我有一个每秒重新绘制 60 次的运行方法,并且我有一个包含 4 个多边形的绘制方法。还有4个按钮。当您按第一个按钮时,多边形将按顺序排列,红色多边形位于顶部,当您按第二个按钮时,多边形交换,然后绿色位于顶部,其他多边形位于其后面。在 Eclipse 上一切都很好并且工作正常,但是当我在终端小程序查看器中运行它时,多边形不会停止并不断刷新。我怎样才能做出这样的声明:在单击按钮时以 60 次/秒的速度重新绘制所有内容,但只绘制一次多边形。
public void run() {
long lastTime = System.nanoTime();
double ns = 1000000000.0 / 1.0;
double delta = 0;
requestFocus();
while (running) {
long now = System.nanoTime();
delta += (now - lastTime) / ns;
lastTime = now;
while (delta >= 1) {
delta--;
update();
repaint();
validate();
}
}
}
以及绘制方法
public void paint(Graphics g) {
// gives sharper graphics
g2 = (Graphics2D) g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
windows.drawRact(new Color(0xa0, 0xd1, 0xe3), g2);
if (mlistener.firstWin) {
add(analisysBtn);
add(button_1);
add(LoadFileButton);
ifFirst = true;
ifFirst2 = true;
ifFirst3 = true;
test2 = 0;
test3 = 0;
test4 = 0;
windows.drawCompareWindow(g2);
windows.drawFourthWindow(g2);
windows.drawThirdWindow(g2);
windows.drawSecondWindow(g2);
windows.drawFirstWindow(g2);
}
}
最佳答案
您正在通过 paint(Graphics g)
方法向 GUI 添加组件,这是您永远不应该做的事情。这个方法会被重复调用,很多次超出了你的控制范围,而且它需要非常快。因此,不应包含任何程序逻辑、GUI 结构更改以及长时间运行的代码。
顺便说一句,使用 Swing 并重写 JPanel 的 paintComponent(Graphics g)
方法会比直接在顶级窗口中重写 Paint 方法要好得多。
此外,您应该始终记住在重写中调用 super 方法(通常作为第一个方法调用),以允许组件执行其内务绘制。
此外,我会使用 Swing Timer 而不是 while (true)
循环来运行我的动画循环。
关于Java Applet,重绘 60 次/秒方法和多边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22290776/