覆盖paint()方法

时间:2015-12-02 06:47:55

标签: java swing jframe awt paint

我在这里有一个初学者的问题,我希望有一些Java经验的人可以帮助我。目前正在介绍OOP课程,重点是Java。我的教练目前正在覆盖awt和swing,特别是需要覆盖绘制方法,以便在调整窗口大小时重绘图形等。我喜欢尽可能多地在外面阅读,我关心的是我的例子教授给出了我所读过的不是最佳实践的内容。为了达到目的......

我知道有必要覆盖paint方法,但我不知道最好的方法。我教授的例子都类似于以下内容:

class Example extends JFrame {
  public void paint(Graphics g) {
    super.paint(g);
    g.drawString("Blah, blah");
  }

  public static void main(String[] args) {
    Example a = new Example();
    a.setDefaultCl...
    \\Etc...
  }
}

这让我感到困扰,因为将GUI的所有内容都包含在与我的main方法相同的类中似乎是不对的。另外,我在这里阅读了一个不同的主题,你不应该扩展JFrame,但是没有解释为什么。我的解决方案是创建一个处理gui的类并在构造函数中实例化JFrame。但是,除非我弄错了,否则这样做不会让我覆盖paint方法。我觉得有必要扩展JFrame以允许我覆盖绘画,但我再次读到这是错误的事情。

任何帮助都会得到真诚的感谢,我知道我可以根据他的内容对我的代码进行建模,但我真的很想了解这一点并知道处理它的最佳方法。

1 个答案:

答案 0 :(得分:3)

  

我知道有必要覆盖绘制方法

不,你不应该覆盖paint()方法。

您应该覆盖JPanel的paintComponent()方法,然后将面板添加到框架中。

阅读Custom Painting上Swing教程中的部分,了解更多信息和工作示例。

本教程还将向您展示如何更好地构建代码,以便在事件调度线程(EDT)上创建GUI。本教程还有一个关于Concurrency的部分,它将解释为什么这很重要。