【问题标题】:Java graphic class proposition [closed]Java图形类命题[关闭]
【发布时间】:2010-07-21 14:34:10
【问题描述】:

我正在从事一个 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)
    }
}

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

【问题讨论】:

  • 请不要使用下划线。这不是 PHP
  • @Lord.Quackstar : 我不可能在没有自定义/常见实践的情况下从 PHP、Java、Python、Javascript 切换。

标签: java architecture oop graphical-programming


【解决方案1】:

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2015-12-14
    • 1970-01-01
    • 2013-03-23
    • 2013-10-21
    • 2023-03-15
    • 1970-01-01
    • 2013-12-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多