3

当将一个类专用于特定的 Swing 组件时,是extend该特定组件更好,还是在内部构造它并提供参考?

public class Foo extends JComponent{

}

或者

public class Foo{
    public JComponent getComponent(){
    }
}

编辑

这就是我所说的奉献

public class Foo{
    private static Foo INSTANCE;

    public static Foo getInstance(){
        if(INSTANCE == null){
            INSTANCE = new Foo();
        }
    }

    public void createAndShowComponent(){
        //do stuff
    }
}

在里面createAndShowComponent(),我JComponent用它的所有组件和它们各自的监听器创建了一个,而不暴露我刚刚创建的组件的内部。

4

6 回答 6

7

+1 组合超过扩展。它使 API 更加简洁,因为您只公开哪些方法对您的新组件很重要

于 2011-05-27T17:32:17.627 回答
3

我同意 jzd 这一切都取决于。

从技术上讲,如果您正在处理 GUI,我认为最好在需要时构建组件,例如通过扩展 JComponent。这样您就可以简单地重复使用它们。

就我个人而言,我永远不会在课堂上使用第二个选项。只有当有很好的理由这样做时,我才会让一个类返回另一个组件,例如,使用户能够修改复杂日历组件中的按钮外观。

出于一个非常简单的原因,每个组件类都应该知道它拥有这个组件的用途,并且它应该根据正在发生的事情来控制视图。因此,您将有适当的方法。

于 2011-05-27T17:44:39.763 回答
2

我会说扩展它会更好。能够使用它的所有属性并像使用它一样使用它是该对象使它更易于使用。只是我个人的意见。两种方式都很好。

如果你把整个班级都献给它。还不如通过继承来实现。

于 2011-05-27T17:49:38.737 回答
2

如果您的对象是一个组件,请扩展它。如果没有,则使用组合。

于 2011-05-27T18:21:27.480 回答
1

这真的取决于你在做什么。例如,如果您想在 JPanel 上包含新类,则需要扩展该组件。如果您的代码可以将组件添加到 GUI 上的正确位置,那么您不必扩展它。

于 2011-05-27T17:32:43.773 回答
1

我会说一个都没有。Swing 组件非常(非常)丰富,可以以任何方式针对可视化(L&F)和行为(事件)进行定制。另一点是创建一组不同的组件并将它们布置在 JPanel 中。

于 2011-05-27T17:34:54.927 回答