我正在学习使用 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 循环绘制的所有线条,但不知道是什么。
为什么你的例子不起作用很简单; 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.addLine
为您的迷宫添加线条。还;指定您的宽度和高度Labyrinth
,通过调用setBounds
或类似的,因为 Swing 可能会裁剪图形。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)