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

私が見る主な欠点は、 yourがクラスGammaPanel内で自動的に使用されないという事実です。GammaFrame

mainメソッドを使用して GUI を生成しないでください。GammaFrameハンドルのコンストラクターがそのコンポーネントをインスタンス化して表示できるようにする必要があります。そうでなければ、メソッド内のすべてをインスタンス化する必要がありmainますが、複数のフレームと多くのコンポーネントがある場合、これは不適切です。

通常、フレーム全体とそのコンテンツを、カスタム コンポーネントの内部クラサーを持つ可能性がある 1 つのクラス (たとえば、GammaPanel.

カスタム グラフのようにコンポーネントを共有する予定がある場合は、それを個別に宣言し、インスタンス化して別のフレームで使用することができます。

イベント ディスパッチ スレッドで GUI コンポーネントを構築することが重要です。

こので提案されているように、モデル ビュー コントローラー設計の利点を検討することをお勧めします。

于 2010-07-21T14:38:25.557 に答える