所以我在一段时间内第一次搞乱了Swing,我遇到了一个奇怪的问题。所以我要添加"形状"每隔一段时间到一个列表,然后在JPanel的paintComponent方法中,我循环遍历列表并绘制形状。我还在for循环之外绘制一个形状用于测试目的。
for循环中的形状会随机跳转到屏幕上。只有在此循环中绘制形状时才会发生这种情况。
我已经尝试过了:
这是问题的GIF(15秒长): image
您会注意到小方块会以随机间隔跳转。这不应该发生。我只是试图产生"一个正方形的随机坐标。
以下是pastebin中的代码: code
我已按此顺序包含所有3个类:JPanel类,Main类(扩展JFrame)和形状类
如果任何链接无法正常工作,请通知我,我会及时发布其他链接。
感谢。
答案 0 :(得分:0)
此设置......
@Override
public final void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2 = (Graphics2D) g;
if (this.startTime == -1L) {
this.startTime = Main.timeMillis();
}
final long timeDiff = Main.timeMillis() - this.startTime;
if (this.circlesIndex <= 19 && timeDiff > 2000) {
final int randX = this.rand.nextInt(this.WIDTH);
final int randY = this.rand.nextInt(this.HEIGHT);
this.testShapes.add(new TestShape(randX, randY));
this.startTime = Main.timeMillis();
}
for (TestShape ts : this.testShapes) {
ts.draw(g);
}
g2.setColor(Color.gray);
g2.fill3DRect(350, 400, 100, 60, true);
}
@Override
public final void actionPerformed(final ActionEvent event) {
x++;
if (x > WIDTH) {
x = -50;
}
repaint();
}
错了。
Paint用于绘画 - 您不应该在任何绘制方法中修改UI的状态,在ActionListener
中执行此操作。问题是,您的组件可能因任何原因而被绘制,其中许多原因是您无法控制或了解