Java 重写paint()方法

Java 重写paint()方法,java,swing,jframe,awt,paint,Java,Swing,Jframe,Awt,Paint,我这里有一个初学者问题,我希望有一些Java经验的人能帮助我解决这个问题。目前正在学习面向对象的入门课程,重点是Java。我的导师目前正在研究awt和swing,特别是需要重写绘制方法,以便在调整窗口大小时重新绘制图形,等等。我喜欢尽可能多地进行外部阅读,我关心的是,我的教授给出的示例涉及到我读过的内容,而不是最佳实践。说到点子上 我知道有必要重写paint方法,但我不知道最好的方法。我的教授的例子都与以下类似: class Example extends JFrame { public v

我这里有一个初学者问题,我希望有一些Java经验的人能帮助我解决这个问题。目前正在学习面向对象的入门课程,重点是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的所有内容都包含在与我的主方法相同的类中似乎是不对的。另外,我在另一个线程上读到,您不应该扩展JFrame,但没有解释为什么。我的解决方案是创建一个处理gui的类,并在构造函数中实例化JFrame。但是,除非我弄错了,否则这样做不会让我重写绘制方法。我觉得必须扩展JFrame以允许我覆盖绘画,但我再次看到这样做是错误的

任何帮助都将受到真诚的感谢,我知道我可以根据他所拥有的来模拟我的代码,但我真的想了解这一点,并知道处理它的最佳方法

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

不,不应重写paint()方法

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

有关更多信息和工作示例,请阅读上Swing教程的部分

本教程还将向您展示如何更好地构造代码,以便在事件调度线程(EDT)上创建GUI。本教程还有一个关于并发性的章节,将解释这一点的重要性

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

不,不应重写paint()方法

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

有关更多信息和工作示例,请阅读上Swing教程的部分


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

看一看,以及为什么不应该覆盖顶级容器(如
JFrame
JFrame
也有
JRootPane
contentPane
如果是这样的话,由于绘画工作方式的性质,这些可以独立于画框进行绘画,导致画框上曾经画过的东西在你不知道的情况下被画了一遍。您还将自己锁定在单个用例中,使代码难以重用我同意您关于将主类与UI分离的假设,但这不应阻止您从其他UI类(如
paintComponent
)进行扩展。然后,这允许您在您看到的任何其他容器中重复使用这些类。请看一看,出于某些原因,您不应该覆盖顶级容器的
paint
,例如
JFrame
JFrame
也有一个
JRootPane
contentPane
,如果,由于绘画工作方式的性质,这些可以独立于画框进行绘画,导致画框上曾经画过的东西在你不知道的情况下被画了一遍。您还将自己锁定在单个用例中,使代码难以重用我同意您关于将主类与UI分离的假设,但这不应阻止您从其他UI类(如
paintComponent
)进行扩展。这样,您就可以在您认为合适的任何其他容器中重用这些类