Java图形类命题

时间:2010-07-21 14:34:11

标签: java architecture oop graphical-programming

我正在开发一个java + swing + miglayout项目,我们选择了一个继承自JPanel& amp;的图形类的类设计。 JFrame,这是skelletons:

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)
    }
}

这个设计的缺陷可能是什么?

1 个答案:

答案 0 :(得分:3)

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

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

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

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

event dispatch thread上构建GUI组件至关重要。

您可能需要考虑模型 - 视图 - 控制器设计的好处,如example中所述。