我习惯于在其他编程环境中对窗口类进行子类化,但在 java 教程中我通常会看到类似的东西
JPanel p = new JPanel();
p.setLayout(new BoxLayout(p, BoxLayout.PAGE_AXIS));
p.add(aComponent);
p.add(anotherComponent);
那么 Java 中关于子类化顶级容器类的约定是什么?
最佳答案
使用与所有 Java 类相同的原则。如果您正在修改或扩展行为或功能,那么一定要扩展 JPanel
或 JFrame
。诀窍是仔细考虑并决定你是否真的要添加任何东西。在 大多数 情况下,当我看到人们扩展 JFrame
时,这是不必要和错误的;
public class MyFrame extends JFrame {
public static void main(String[] args) {
new MyFrame().setVisible(true);
}
}
为什么要扩展 JFrame
?你还没有添加任何东西!组合是一个更好的选择。
扩展 JPanel
有点不同。 JPanel 是一个相当抽象的概念,它只是其他组件的通用容器。恕我直言,将 JPanel
子类化以创建更具体的面板,然后在您的应用程序中使用它是有效的。它促进了 OOP 和封装。
例如,假设您的 GUI 有 2 个主要显示区域;一个带有一些按钮/控件/输入,另一个显示输出(例如在文本区域中)。将 JPanel
子类化以创建包含按钮/控件/输入的 ControlPanel 是完全可以接受的。这会将所有代码移动到一个简洁的模块中,清理包含并处理主要 JFrame
的类。
关于java - 我是否应该子类化 JFrame/JPanel?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5895282/