java - 扩展 JFrame 与在程序中创建它

标签 java swing oop inheritance composition

在使用 Swing 制作应用程序时,我看到人们使用两种方法之一来创建 JFrame。哪种方法更好?为什么?

我是 Java 和编程的初学者。我唯一的学习来源是书籍、YouTube 和 StackOverflow。

import {imports};

public class GuiApp1 {

    public static void main(String[] args) {

        new GuiApp1();
    }

    public GuiApp1()  {
        JFrame guiFrame = new JFrame();

        guiFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        guiFrame.setTitle("Example GUI");
        guiFrame.setSize(300,250);
        ................
    }

import {imports};

public class GuiApp1 extends JFrame {

    public Execute() {
        getContentPane().setBackground(Color.WHITE);
        getContentPane().setLayout(null);
        setSize(800, 600);
        .............
    }

    public static void main(String[] args) {
        Execute frame1 = new Execute();
        frame1.setVisible(true);

    }
}

最佳答案

想法:

  • 避免扩展 JFrame,因为它会将您的 GUI 与 JFrame 联系在一起。相反,如果您专注于创建 JPanel,那么您可以在任何需要的地方自由使用这些 JPanel - 在 JFrame、JDialog 或 JApplet 中,或在另一个 JPanel 内部,或通过 CardLayout 与其他 JPanel 交换。
  • 一般避免继承,尤其是复杂类。这将防止有害错误,例如无意的方法覆盖(尝试创建具有 getX()getY() 方法的 JFrame 或 JPanel 以了解我的意思!) .
  • 如果您使用 IDE,请避免继承复杂类:如果您重写一个复杂类,当您调用这些类的对象上的方法时,您将有太多太多的方法选择提供给您。
  • 封装很好,可以创建更安全的代码。只曝光需要曝光的部分,并尽可能控制曝光。

关于java - 扩展 JFrame 与在程序中创建它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22003802/

相关文章:

java - 如何在 JAX-RS 中提供已压缩的内容?

java - Swing 窗口监听器线程问题

java - 从具有相同方法签名的多个接口(interface)继承的类

java - 这个类是否遵循单一职责原则?

java - 在Java中: How do I create a class that can be initialized and call its methods in one statement?

java - 如何将三地址码(TAC)转换为Java字节码?

java - 我们可以将 Atomikos 事务管理器与 Tomcat JDBC XA 连接池一起使用吗

java - Java 中是否可以有无限数量的类型参数?

java - 写入值并单击按钮打开浏览器

java - 如何在 Swing 中淡化图像?