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

时间:2018-12-20 16:56:51

标签: java swing graphics jpanel override

我一直在尝试在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);

}

如您所见,我正在尝试每秒绘制一个新正方形。问题是,我在代码中收到错误:

  

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

我该如何解决?

1 个答案:

答案 0 :(得分:6)

  

我该如何解决?

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

但是,这仍然对您的绘画没有帮助。

相反,您需要覆盖paintComponent(...)的{​​{1}}方法,然后将面板添加到框架中。然后,使用传递给paintComponent()方法的Graphics对象进行绘画。

阅读Custom Painting的Swing教程中的这一节,以获取更多信息和工作示例,以帮助您入门。

此外,您不应该将TimerTask用于动画。您应该使用Swing Timer。然后,在JPanel的{​​{1}}方法中,您将更改自定义绘画的属性(即,在您的情况下,添加一个要绘画的新正方形对象),然后在面板上调用actionPerformed(...)

  

,我试图每秒绘制一个新正方形

查看Custom Painting Approaches中的ActionListener示例。它将向您展示如何将Rectangle对象添加到BufferedImage。