我编写了一个代码,如果我按下按钮 RandomB,则可以用随机 x 和 y 值可视化一些城市。首先,我希望它清除屏幕,所以我使用
Screen.removeAll(); Screen.revalidate(); Screen.repaint();
为了工作。
然后我返回 forLoop 中的函数来创建一些城市 getSA 是城市数量。但问题是在我运行程序并按下按钮后,我看到了城市,但它们消失得很快。有时我什至看不到它们可能是什么问题??
@Override
public void actionPerformed(ActionEvent e) {
//if (e.getSource() == starButton) {
//}
if (e.getSource() == randomB) {
Screen.removeAll();
Screen.revalidate();
Screen.repaint();
getSA = StadtAnzahl.getSelectedItem().toString();
for (int i = 0; i < Integer.parseInt(getSA); i++) {
int x = r.nextInt((int) Math.round(0.77 * screenSize.width)) + 10;
int y = r.nextInt((int) Math.round(0.82 * screenSize.height)) + 10;
ZeichneStadt(x, y, Screen.getGraphics());
}
}
}
public void ZeichneStadt(int x,int y,Graphics g)
{
Graphics2D g2=(Graphics2D)g.create();
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.setColor(Color.red);
g2.fillOval(x, y, 10, 10);
salesman.hinzufügen(x, y);
}
我尝试替换removeall()、revalidiate()和repaint()。
首先创建一个
paintComponent()
方法,它将变量中的数据绘制到屏幕上。请注意,paintComponent()
不是由您调用的。由 Swing 决定何时需要绘制组件。
在您的
actionPerformed()
方法中准备要绘制的数据(=将它们放入变量中),然后您只需调用 repaint()
。这向 Swing 表明数据已更改并且应重新绘制组件。 Swing 将检查组件是否完全可见,然后才调用 paintComponent()
。