0

我正在做一个 java+swing+miglayout 项目,我们确定了从 JPanel 和 JFrame 继承的图形类的类设计,这里是骨架:

class GammaFrame extends JFrame {
private JPanel __pane__ = null;

public static GammaFrame open(...) {

    _instance = GammaFrame()

    __pane__ = _instance.getContentPane();
    __pane__.setLayout(new MigLayout(...));

    _instance.__init__()

    # do logic job if any

    return _instance;
    }

    public static void main(String argv[]) {
        GammaFrame.open();
    }
}

class GammaPanel extends JPanel {

public static GammaPanel create(...) {

    _instance = GammaPanel()

    _instance.setLayout(new MigLayout(...));

    _instance.__init__()

    # do logic job if any

    return _instance;
    }

    public static void main(String argv[]) {
        JPanel panel = GammaPanel.create()
        JFrame frame = new JFrame()
        frame.getContentPane().add(panel)

        # 
        # more settings here
        # 

        frame.setVisible(true)
    }
}

这种设计可能有什么缺陷?

4

1 回答 1

3

我看到的主要缺点是您不会在课堂GammaPanel内自动使用。GammaFrame

您不应该使用main方法来生成 GUI。您应该让构造函数GammaFrame处理实例化其组件并显示它们;否则,您将不得不实例化main方法中的所有内容,但如果您有多个框架和许多组件,这不合适。

通常,您倾向于将整个框架及其内容封装在一个类中,该类可能具有用于自定义组件的内部分类器(例如您的GammaPanel.

如果您计划共享组件,例如自定义图形,您可以单独声明它,然后实例化并在不同的框架中使用它。

在事件分派线程上构建 GUI 组件至关重要。

您可能需要考虑模型-视图-控制器设计的好处,如本示例中所建议的那样。

于 2010-07-21T14:38:25.557 回答