我正在开发一个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)
}
}
这个设计的缺陷可能是什么?
答案 0 :(得分:3)
我看到的主要缺点是您的GammaPanel
不会自动在GammaFrame
类中使用。
您不应使用main
方法来生成GUI。您应该让GammaFrame
的构造函数处理实例化其组件并显示它们;另外,你必须在main
方法中实例化所有内容,但是如果你有多个框架和许多组件,这是不合适的。
通常,您倾向于将整个框架及其内容封装在一个类中,该类可能具有自定义组件的内部分类器(如GammaPanel
)。
如果您计划拥有共享组件(如自定义图形),则可以单独声明它,然后在不同的框架中实例化并使用它。
在event dispatch thread上构建GUI组件至关重要。
您可能需要考虑模型 - 视图 - 控制器设计的好处,如example中所述。