繁体   English   中英

使用Java Swing绘制多行

[英]Drawing multiple lines with Java Swing

我正在学习使用Java Swing绘制线条以绘制迷宫。 我可以在指定的位置绘制一条线,它显示得很好。 但是当我想画多行时,只有最后一行显示。 我的代码:

public class LabyrinthGUI extends JFrame {
...
Line line;
for (int i = 0; i < 10; i++) {
   line = new Line(i*25, 0, (i+1)*25, 50);
   this.getContentPane().add(line);
}
}

public class Line extends JPanel{
private int x1, y1, x2, y2;

public Line(int x1, int y1, int x2, int y2) {
    this.x1 = x1;
    this.y1 = y1;
    this.x2 = x2;
    this.y2 = y2;
}
public void paintComponent (Graphics g) {
    g.drawLine(x1, y1, x2, y2);

}

我可能需要刷新一些东西,以显示用for-loop绘制的所有线条,但不知道是什么。

为什么你的例子不起作用很简单; Swing使用布局管理器将添加到Container每个组件放到屏幕上。 这样,线条不重叠。

相反,使用一个Component ,其中绘制每一行。 绘制迷宫的解决方案是:

public class Labyrinth extends JPanel {

    private final ArrayList<Line> lines = new ArrayList<Line>();

    public void addLine(int x1, int y1, int x2, int y2) {
        this.lines.add(new Line(x1, y1, x2, y2));
    }

    public void paintComponent(Graphics g) {
        for(final Line r : lines) {
            r.paint(g);
        }
    }
}

public static class Line {
    public final int x1;
    public final int x2;
    public final int y1;
    public final int y2;
    public Line(int x1, int y1, int x2, int y2) {
        this.x1 = x1;
        this.x2 = x2;
        this.y1 = y1;
        this.y2 = y2;
    }
    public void paint(Graphics g) {
        g.drawLine(this.x1, this.y1, this.x2, this.y2);
    }
}

然后使用Labyrinth.addLineLabyrinth.addLine添加线条。 也; 通过调用setBounds或类似方法为Labyrinth指定宽度和高度,因为Swing可能会裁剪图形。

你的问题几乎归结为:

public class Line extends JPanel

将每个JPanel视为不透明的卡片,上面绘有一些东西。 你正在创建一堆这些,每个都在其上绘制一条线,然后将它们堆叠在一起。 这就是为什么你只能看到最新的一行。

相反,您应该只有一个组件在其paintComponent方法中绘制所有行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM