【问题标题】:drawing a line between two points在两点之间画一条线
【发布时间】:2019-12-26 03:56:09
【问题描述】:

嗨 我有 2 个点 (X1,Y1)(X2,Y2) 我如何在它们之间画一条线? 谢谢

【问题讨论】:

  • 你使用什么 gui 库(swing/swt/..)?

标签: java drawing awt


【解决方案1】:

在摇摆中:

Graphics g;
g.drawLine(X1, Y1, X2, Y2);

如果您在JPanel 上绘图,您通常会将这段代码放在paintComponent 方法中:

@Override
protected void paintComponent(Graphics g) {
    g.drawLine(X1, Y1, X2, Y2);
}

要查看Graphics 类的所有可用方法,请参阅Javadocs

【讨论】:

  • 你在哪里实例化 g ?
  • 很明显,它是JPanel内部的私有实例化,你可以覆盖paintComponent来控制Graphics
【解决方案2】:

看看Graphics.drawLine 方法。

您基本上需要覆盖一些小部件(如 JPanel)或获取 Canvas,然后在绘制方法中执行以下操作:

graphics.drawLine( p1.x, p1.y, p2.x, p2.y );

【讨论】:

    【解决方案3】:

    对于 JFrame,您将在继承 JFrame 类的类内部添加一个绘制方法,该方法在 JVM 准备好在 JFrame 上绘图时运行。然后,在其中,您将调用图形的“drawLine”方法,如图所示(确保已导入“图形”类并用您选择的整数替换 X1、Y1、X2、Y2。):

    public void paint(Graphics g) {
        g.drawLine(X1,X2,Y1,Y2);
    }
    

    【讨论】:

    • 你应该覆盖paintComponent(Graphics)而不是paint(Graphics)
    【解决方案4】:

    你也可以试试这个:

    var draw = function(ctx,x1,y1,x2,y2) {
    
        ctx.strokeStyle = "Black";
        ctx.lineWidth = 4;
        ctx.beginPath();
        ctx.moveTo(x1,y1);
        ctx.lineTo(x2,y2);
        ctx.stroke();
    
    };
    
    
    var drawPoints = function(ctx,points) {
    
        ctx.strokeStyle = "Black";
        ctx.lineWidth = 4;
        for(var i = 0; i<points.length -1;i++){
            draw(ctx,points[i][0],points [i][1],points[i+1][0],points[i+1][1]);
        }
    
    };
    
    
    var ctx = canvas.getContext("2d")
    

    现在调用函数为:

    drawPoints(ctx, points);
    

    您可以将var points array 更改为您喜欢的任何点。

    var points = [[50,50],[50,100],[100,100],[100,50]];
    

    这应该用一条黑线连接所有点。如果你输入三个点,它会形成一个三角形,四个点,一个正方形等等。如果我弄错了,请告诉我。

    【讨论】: