我非常确定我理解摇摆计时器是如何工作的,我只是无法弄清楚如何在我的代码中应用它。我在代码中应用它的方式并不允许它绘制,因为Graphics g超出了它的范围。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class JayFrame extends JFrame
{
public JayFrame()
{
super("My Frame");
setContentPane(new DrawPane());
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setSize(1200, 675);
setResizable(false);
setVisible(true);
}
class DrawPane extends JPanel
{
Timer timer = new Timer(1000, new MyTimer());
public void paintComponent(Graphics g)
{
//Paint stuff
super.paintComponent(g);
timer.start();
for(int i = 0; i < 1000; i += 110)
{
g.fillRect(i, 10, 100, 100);
try{Thread.sleep(100);}
catch(InterruptedException ie){}
}
timer.stop();
}
}
class MyTimer implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
//Loop stuff
repaint();
}
}
public static void main(String[] args)
{
new JayFrame();
}
}
编辑:我已更新代码以显示我认为应该有效的内容,但却没有。所以我可能对摆动计时器有一个错误的理解。
答案 0 :(得分:2)
timer.start();
和/或timer.stop()
,这无论如何都不会有任何意义,因为各种原因可能会出现绘画,我的你无法控制的。paintComponent
,这是Thread.sleep
的重点。您只是阻止Swing更新屏幕或处理任何新事件 paintComponent
充当psudo循环,在Timer
的每次迭代中,您更新某个状态,检查一些退出条件并做出关于应该发生什么的决定。
Timer
只描绘当前状态。
例如:
Timer