我在这里有一个初学者的问题,我希望有一些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以允许我覆盖绘画,但我再次读到这是错误的事情。
任何帮助都会得到真诚的感谢,我知道我可以根据他的内容对我的代码进行建模,但我真的很想了解这一点并知道处理它的最佳方法。
答案 0 :(得分:3)
我知道有必要覆盖绘制方法
不,你不应该覆盖paint()方法。
您应该覆盖JPanel的paintComponent()
方法,然后将面板添加到框架中。
阅读Custom Painting上Swing教程中的部分,了解更多信息和工作示例。
本教程还将向您展示如何更好地构建代码,以便在事件调度线程(EDT)上创建GUI。本教程还有一个关于Concurrency
的部分,它将解释为什么这很重要。