【发布时间】:2019-09-26 05:33:17
【问题描述】:
我正在编写一个程序,它会在窗口内每隔一段时间绘制随机形状。我希望将形状存储在一个数组中,因为稍后我需要从文本文件中检索每个形状的信息。只要我不尝试调整窗口大小,它就可以正常工作。每当我拉伸它时,都会出现很多新形状(比预期的要快),可能是因为每次调整大小时都会调用 repaint(),但我不知道如何防止它这样做。换句话说,如何防止在调整大小时出现多余的对象?
我会很感激任何提示,不仅是那些与我的问题直接相关的提示,还有我所做的任何编程选择。我是初学者。
我希望我说清楚了。如果您需要,我很乐意提供更多详细信息。
public Window() {
setTitle("shapes");
setSize(800, 600);
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setBackground(Color.DARK_GRAY);
setVisible(true);
}
public void paint(Graphics g) {
addShape();
g.clearRect(1,1, getWidth(), getHeight());
for (Figure figure : myFigures) {
figure.draw(g);
System.out.println(figure.toString());
}
}
public Thread drawThread() {
return new Thread(() -> {
while (true) {
repaint();
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});
}
private void addShape() {
int whichFigure = (int) (Math.random() * 3);
switch (whichFigure) {
case 1:
myFigures.add(new Oval((int) (Math.random() * getWidth()), (int) (Math.random() * getHeight()), (int) (Math.random() * 100), (int) (Math.random() * 100)));
System.out.println("oval added");
break;
case 2:
myFigures.add(new Rectangle((int) (Math.random() * getWidth()), (int) (Math.random() * getHeight()), (int) (Math.random() * 100), (int) (Math.random() * 100)));
System.out.println("rect added");
break;
}
}
}
【问题讨论】:
标签: java swing jframe awt drawing