我一直在尝试在JFrame上进行绘制,因此将来我可以将这些实验用于可能创建的程序。但是,我发现了一个我无法解决的问题: 如何在设置计时器的同时绘画东西。
public static void MyTimer() {
JFrame frame = new JFrame("Colors");
int width = 700;
int height = 700;
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setBackground(Color.BLACK);
frame.pack();
frame.setSize(width, height);
frame.setVisible(true);
frame.setResizable(false);
TimerTask task;
task = new TimerTask() {
int a = 2;
@Override
public void run(Graphics g) {
g.drawRect(a, 2, a + 66, 68);
g.fillRect(a, 2, a + 66, 68);
a = a + 20;
}
};
timer.schedule(task, 0, 1000);
}
如您所见,我正在尝试每秒绘制一个新正方形。问题是,我在代码中收到错误:
方法不会覆盖或实现超类型的方法
我该如何解决?
答案 0 :(得分:6)
我该如何解决?
run()
方法不带参数。摆脱Graphics参数。那将摆脱编译错误。
但是,这仍然对您的绘画没有帮助。
相反,您需要覆盖paintComponent(...)
的{{1}}方法,然后将面板添加到框架中。然后,使用传递给paintComponent()方法的Graphics对象进行绘画。
阅读Custom Painting的Swing教程中的这一节,以获取更多信息和工作示例,以帮助您入门。
此外,您不应该将TimerTask用于动画。您应该使用Swing Timer。然后,在JPanel
的{{1}}方法中,您将更改自定义绘画的属性(即,在您的情况下,添加一个要绘画的新正方形对象),然后在面板上调用actionPerformed(...)
,我试图每秒绘制一个新正方形
查看Custom Painting Approaches中的ActionListener
示例。它将向您展示如何将Rectangle对象添加到BufferedImage。