扩展JFrame

时间:2012-05-04 04:18:46

标签: java swing inheritance jframe composition

扩展JFrame 的优缺点是什么,而不是创建新的JFrame

例如:

public class Test extends JFrame {

setVisible(true);

}

public class Test {

JFrame test = new JFrame():

test.setVisible(true);

}

4 个答案:

答案 0 :(得分:9)

除非您想要实际扩展其功能,否则不应扩展类,在您显示的示例中,您应该使用选项2,因为选项1是滥用extend功能。 / p>

换句话说 - 只要问题的答案是测试JFrame,它就不应该延伸JFrame

答案 1 :(得分:8)

不扩展JFrame(或任何Swing组件)的优点:

  • 避免无意的方法覆盖。我已经多次介入这个问题,首先是我提供了课程int getX()int getY()方法。尝试一下,你会看到一些不那么有趣的异常行为。
  • 简化将Eclipse或NetBeans仅用于您创建的方法时可用的方法选项。这实际上是我最喜欢的优势。
  • 使用GUI来创建JPanel而不是JFrame,从而将部署灵活性提高了100倍。
  • 最重要的是,只暴露需要暴露的东西。

答案 2 :(得分:2)

如果扩展JFrame,我想修改/自定义我当前的Jframe类 所以子类可以使用这个自定义的实现。

如果在JFrame类中没有我想做的任何改变,只需使用 存在于您在代码中提供的第二个代码段中。通过使用,我的意思是 通过在JPanel和。中创建其他JComponent(示例的按钮/标签)等 创建一个对象测试并将JFrame contentPane设置为此对象。某物 像

public class Test extends JPanel {

   public class() {
    // add buttons/label here
   }
   ...

   private static void createAndShowGUI() {
       JFrame frame = new JFrame();

       Test object = new Test();
       frame.setContentPane(object.setOpaque(true));

       frame.setVisible(true);
   }
...
}

答案 3 :(得分:0)

OOD的一个规则:如果你不能继承(扩展)你不继承它们的类。

继承会增加程序的复杂性和连通性,并可能导致新的错误。在你的情况下,没有任何理由扩展课程。

只有在需要访问受保护成员和/或获取多态行为(覆盖虚拟方法)时,才应扩展类。