【问题标题】:Drawing lines in Java用Java画线
【发布时间】:2025-12-08 09:50:02
【问题描述】:

好的,所以我在编写这个程序时遇到了问题。我已经完成了第一部分,但我不知道如何完成它。我尝试了不同的解决方案和一切,但我仍然不知道。这是我到目前为止所拥有的。我需要做的是让它从四个角落开始。

public void paintComponent( Graphics g )
{
    super.paintComponent( g );
    int width = getWidth();
    int height = getHeight();
    int number, x, y, dx, dy;
    x = 0;
    y = height;
    number = 15;
    dx = width / number;
    dy = height / number;
    for ( int i = 1; i < number; i++ )
    {
        x += dx;
        y -= dy;
        g.drawLine( 0, 0, x, y );
    }
}

【问题讨论】:

  • 请正确缩进您的代码,并重写您的问题。前两行什么都没说,肉句“What I need to do”……很难理解
  • 为了更好的帮助,请尽快发布SSCCE,简短,可运行,可编译,就在JFrame中的JComponent/JPanel,那么您的问题将得到解答
  • 你没有说你的问题是什么,你想要完成什么。
  • 你很幸运,有些人能够猜出你想要做什么。下次请告诉我们。不要以为我们都拥有 ESP 超能力,因为不幸的是这里只有少数人拥有。
  • 缩进正确,因为我编辑了您的原始帖子。问题不在于语法——而是缺少对您要完成的任务的描述。对于下面的答案,我根据您的代码猜测了一些东西,但只有您知道我是否猜对了。将来,请描述您的代码打算做什么,它实际上做了什么,以及您在哪里修复它。您更有可能获得有用的回复。

标签: java swing paintcomponent


【解决方案1】:

我猜您想从每个角到对角线绘制 15 条线的扇形。我建议编写一个例程,将风扇从一个点绘制到任意线段,然后使用它:

drawFan(Graphics g,
        int number,     // number of fan lines
        int x0, int y0, // coordinates of the point
        int sx, int sy, // coordinates of the line segment start
        int ex, int ey) // coordinates of the line segment end
{
    int x = sx,
        y = sy,
        dx = (ex - sx) / number,
        dy = (ey - sy) / number;
    for (int i = 1; i < number; ++i) {
        x += dx;
        y += dy;
        g.drawLine(x0, y0, x, y);
    }
}

然后您可以使用每个角和对角线的适当值来调用它。

public void paintComponent( Graphics g )
{
    super.paintComponent( g );
    int width = getWidth();
    int height = getHeight();
    drawFan(g, 15, 0, 0, 0, height, width, 0);          // top left corner
    drawFan(g, 15, 0, height, 0, 0, width, height);     // bottom left corner
    drawFan(g, 15, width, height, 0, height, width, 0); // bottom right corner
    drawFan(g, 15, width, 0, 0, 0, width, height);      // top right corner
}

【讨论】:

    【解决方案2】:

    这是解决方案,我的建议是了解坐标系在 Java 中的工作原理,然后就很容易了。

    public void paintComponent( Graphics g ){
        super.paintComponent(g);
        int widthX = getWidth();
        int heightY = getHeight();
    
        int num, i, j;
        num = 15;
        i = 0;
        j = 15;
    
        while( i != 16 && j != -1 ){
    
            g.drawLine( 0, 0, widthX*i/num, heightY*j/num );
            g.drawLine(  widthX*i/num, heightY*j/num, widthX, heightY );
            g.drawLine(  widthX*i/num, heightY*i/num,  widthX, 0);
            g.drawLine(  widthX*j/num, heightY*j/num,  0, heightY);
    
            i++;
            j--;
    
        }//end while 
    }//end method paintComponent
    

    【讨论】: