【问题标题】:Can't Draw Graphics Because Of "@Override" Annotation由于“@Override”注解而无法绘制图形
【发布时间】:2018-12-20 16:56:50
【问题描述】:

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

}

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

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

我该如何解决这个问题?

【问题讨论】:

    标签: java swing graphics jpanel overriding


    【解决方案1】:

    我该如何解决这个问题?

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

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

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

    阅读 Custom Painting 上的 Swing 教程部分,了解更多信息和工作示例,以帮助您入门。

    你也不应该使用 TimerTask 来制作动画。您应该使用Swing Timer。然后在ActionListeneractionPerformed(...) 方法中,您将更改自定义绘画的属性(即在您的情况下添加要绘制的新方形对象),然后在面板上调用repaint()

    ,我试图每秒画一个新的正方形

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

    【讨论】:

    • 使用 Swing 计时器解决了这个问题。
    猜你喜欢
    • 1970-01-01
    • 2019-10-05
    • 2015-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-02
    相关资源
    最近更新 更多