由于"@Override"注释而无法绘制图形

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)

如你所见,我试图每秒画一个新的广场.问题是,我在代码中遇到错误:

方法不会覆盖或实现超类型的方法

我怎样才能解决这个问题?

cam*_*ckr 6

我怎样才能解决这个问题?

run()方法不带参数.摆脱Graphics参数.这将摆脱编译错误.

但是,这仍然无助于你的绘画.

相反,您需要覆盖a的paintComponent(...)方法,JPanel然后将面板添加到框架中.然后使用传递给paintComponent()方法的Graphics对象来进行绘制.

阅读自定义绘画的Swing教程中的部分,了解更多信息和工作示例,以帮助您入门.

此外,您不应该使用TimerTask进行动画制作.你应该使用Swing Timer.然后在你的actionPerformed(...)方法中ActionListener你将改变自定义绘画的属性(即在你的情况下添加一个新的方形对象),然后repaint()在面板上调用.

,我试图每秒画一个新的广场

查看自定义绘图方法中DrawOnImage示例.它将向您展示如何将Rectangle对象添加到BufferedImage.