【发布时间】:2016-03-06 07:52:42
【问题描述】:
我在这里遇到了一个初学者问题,我希望有一些 Java 经验的人可以帮助我。目前正在学习专注于 Java 的 OOP 课程简介。我的导师目前正在讨论 awt 和 swing,特别是需要覆盖 paint 方法以便在调整窗口大小时重新绘制图形等。我喜欢尽可能多地在户外阅读,我担心的是我的示例教授给出的涉及我读过的东西不是最佳实践。言归正传……
我知道有必要重写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 以允许我覆盖绘画,但我再次读到这是错误的做法。
任何帮助都将不胜感激,我知道我可以根据他所拥有的内容对我的代码进行建模,但我真的很想了解这一点并知道处理它的最佳方法。
【问题讨论】:
-
看看 How can I set in the midst? 和 How to get the EXACT middle of a screen, even when re-sized 看看为什么你不应该覆盖像
JFrame这样的顶级容器的paint。 -
JFrame也有一个JRootPane和contentPane位于其顶部,如果由于绘画方式的性质,这些可以独立于框架进行绘画,从而导致画到要画的框架上,而您却不知道。您还将自己锁定在一个用例中,使您的代码难以重用 -
我同意您关于将主类与 UI 分离的假设,但这不应阻止您从其他 UI 类扩展,例如
paintComponent。然后,这允许您在您认为合适的任何其他容器中重用这些类
标签: java swing jframe awt paint