我是编程新手,对 Java 绝对是新手。在今年秋天开始计算机科学类(class)之前,我正在自学,我对从两位不同作者那里看到的语法很好奇。 在一本书中,通常通过将类作为JFrame的扩展来建立一个JFrame
public class MyClass extends JFrame {
等等
但是,另一位作者以及本网站上的问题通常会在类内部建立一个框架:
public class MyClass {
JFrame frame = new JFrame();
首先,一个比另一个有什么优势? 在我看来,虽然我不是专家,但将类作为 JFrame 的扩展可以更轻松地设置框架的参数以及向其中添加组件。
IE中的扩展格式,你随便说
add(component);
但是,在其他格式中,必须键入:
frame.getContentPane().add(component);
这看起来更乏味。
有人可以简明扼要地解释一下这背后的原因,或者这只是一个偏好问题。我对此进行了调查,但无法得到直接的答案。
最佳答案
许多人(包括我)更喜欢后者有哲学和实践上的原因:
- 总体上更喜欢组合而不是继承。
- 仅当您打算更改类的固有行为(即覆盖其一个或多个方法)时才扩展该类。
- 通过不扩展 JFrame,可以更轻松地创建最大化内聚和最小化耦合的类,并编写干净的基于 MVC 的代码。此概念的一个更重要的示例是避免让您的 GUI 代码(您的 View 代码)实现任何监听器接口(interface)(您的控制 代码)。这对于婴儿程序来说没问题,但对于有可能变得复杂的成人代码来说就不行了。
- 通过不扩展大型复杂类(例如 JFrame),您可以降低难以调试的隐藏覆盖恶意行为的风险。尝试扩展 JFrame 或 JPanel 并为类提供
getX()
和getY()
方法,看看我的意思! - 如果您使用的 IDE 可以为您的类的对象提供可用方法的建议,并且您不重写 JFrame 等庞大的复杂类,则可以大大减少可能建议方法的数量(和复杂性)。
- 通过调整您的 Swing GUI 来创建 JPanel 而不是覆盖 JFrame,您可以大大提高该 GUI 使用方式的灵 active 。现在它可以作为更复杂的 GUI 的一部分或作为 CardLayout View 交换的一部分放置在 JDialog、JOptionPane、JApplet 中、另一个 JPanel 的内部....我可以继续下去。
- 出于与上述相同的原因,我的许多 GUI 就是这样做的,创建 JPanel,我可以通过将它们放入小型测试程序中的 JFrames 中进行隔离测试,然后再将它们添加到更大的应用程序整体中。
关于java - 建立JFrame的语法。哪个是对的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17765258/