Java小程序,60次/秒重绘方法和多边形
我已经运行了每秒重新绘制60次的方法,并且我有一个包含4个多边形的绘制方法。还有4个按钮。当你按下第一个按钮时,poligons将按顺序排列,红色的在顶部,当你按下第二个按钮时,多边形swop,然后绿色在顶部,其他在后面。在eclipse上一切正常,但当我在终端小程序查看器中运行它时,多边形不会停止并不断刷新。我怎么能做出这样一个声明,60次/秒地重新绘制所有内容,但当单击按钮时,多边形只重新绘制一次Java小程序,60次/秒重绘方法和多边形,java,eclipse,applet,Java,Eclipse,Applet,我已经运行了每秒重新绘制60次的方法,并且我有一个包含4个多边形的绘制方法。还有4个按钮。当你按下第一个按钮时,poligons将按顺序排列,红色的在顶部,当你按下第二个按钮时,多边形swop,然后绿色在顶部,其他在后面。在eclipse上一切正常,但当我在终端小程序查看器中运行它时,多边形不会停止并不断刷新。我怎么能做出这样一个声明,60次/秒地重新绘制所有内容,但当单击按钮时,多边形只重新绘制一次 public void run() { long lastTime = System.
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计时器而不是
while(true)
循环来运行我的动画循环。windows.drawCompareWindow(g2);窗。四向窗(g2);windows.drawindow(g2);窗口。DrawSecond窗口(g2);窗口。drawFirstWindow(g2);这些都是polygonsI,我必须更深入地研究它。问题是这是我的java评估工作,我已经提交了它,在最好的情况下,我将有机会更改或添加几行。。。我不知道它在终端上的显示会和eclipse不同,很明显,他们会如何运行它。对我来说有什么快速的解决办法吗?除了这些多边形,其余的一切看起来都正常工作。@user3185161:如果不运行代码,很难说出什么问题。