Qui*_*ibo 2 java graphics swing overriding jpanel
我一直在尝试绘制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);
}
Run Code Online (Sandbox Code Playgroud)
如你所见,我试图每秒画一个新的广场.问题是,我在代码中遇到错误:
方法不会覆盖或实现超类型的方法
我怎样才能解决这个问题?
我怎样才能解决这个问题?
该run()
方法不带参数.摆脱Graphics参数.这将摆脱编译错误.
但是,这仍然无助于你的绘画.
相反,您需要覆盖a的paintComponent(...)
方法,JPanel
然后将面板添加到框架中.然后使用传递给paintComponent()方法的Graphics对象来进行绘制.
阅读自定义绘画的Swing教程中的部分,了解更多信息和工作示例,以帮助您入门.
此外,您不应该使用TimerTask进行动画制作.你应该使用Swing Timer.然后在你的actionPerformed(...)
方法中ActionListener
你将改变自定义绘画的属性(即在你的情况下添加一个新的方形对象),然后repaint()
在面板上调用.
,我试图每秒画一个新的广场
查看自定义绘图方法中的DrawOnImage
示例.它将向您展示如何将Rectangle对象添加到BufferedImage.