0

Swing UI の開発をより迅速かつ管理しやすくするために、Factory Method パターンの使用を検討しています。

一般に、JInternalFrames を使用する MDI アプリケーションです。システムには多くの設定、いわゆるタイプがあります (例: userTypes、accountTypes など)。使用することに決めた固定 UI があります。システムにはこれらのタイプが 50 以上あるため、ファクトリ メソッド パターンが最も扱いやすいソリューションのようです。以下は、動作中のアプリの 2 つのスクリーンショットです。

レコードの主要部分 ここに画像の説明を入力

[この例][3] を見ていましたが、すべての情報をレコードに保存するために必要なタブの数を見積もることができないため、複数のタブとコントロール (ラベル、テキスト ボックス) を追加できる必要があります。 、テーブル、コンボボックスなど) これらのタブ内。

例に基づいて、抽象クラスで JTabbedPane を作成し、サブクラスで変更および追加することは可能ですか? 私は次のことを試しましたが、少し迷っています:

public AbstractTypeInternalFrame(String title) {
        setBounds(100, 100, 808, 589);

        JToolBar toolBar = new JToolBar();
        getContentPane().add(toolBar, BorderLayout.NORTH);

        JButton btnAdd = new JButton("Add");
        toolBar.add(btnAdd);

        JButton btnSave = new JButton("Save");
        btnSave.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
            }
        });
        toolBar.add(btnSave);

        JButton btnDelete = new JButton("Delete");
        toolBar.add(btnDelete);

        JButton btnCancel = new JButton("Cancel");
        btnCancel.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
            }
        });
        toolBar.add(btnCancel);

        JTabbedPane recordTabs = new JTabbedPane(makeRecordTabPane());
        getContentPane().add(recordTabs, BorderLayout.NORTH);

        JSeparator recordSearchSeparator = new JSeparator();
        getContentPane().add(recordSearchSeparator, BorderLayout.NORTH);



    }

    protected abstract int makeRecordTabPane();

メソッド makeRecordTabPane() では int を返す必要があります。

ご覧のとおり、私は少し道に迷っており、そのようなパターンをどのように進めるかについての指示が必要です。アドバイスや例/リンクさえあれば、それは大歓迎です。

私の質問があいまいであることは承知していますので、私の側で明確化が必要な場合は、お気軽にお尋ねください。

よろしくお願いします。

4

1 に答える 1

0

これがより詳細な質問です。

そのため、システム上のレコードに対する CRUD 操作用の単純な JInternalFrame を構築しようとしています。ユーザー、ユーザー タイプ、アカウント、アカウント タイプなどのレコード。システムにはこれらのタイプが 50 以上あるので、ファクトリ メソッド パターンを使用すると、これらすべての JInternalFrames をより管理しやすくなると思います。

ユーザー レコードの例を次に示します。

リンク 1 リンク2

上半分はレコードの詳細で構成され、レコードの内容に応じてタブに分割されます。一部のレコードにはタブが 1 つしかない場合がありますが、他の大きなレコードには複数のタブがあります。したがって、JTabbedPane のコンテンツは、サブクラス レベルでこの例に従ってインスタンス化する必要があります。

下部は、そのタイプのレコードを検索する場所です。たとえば、投稿されたリンクで、User Manager JInternalFrame が開かれているとします。次に、ユーザー名やユーザー ID に従ってユーザーを検索します。結果は下の表に表示され、検索結果をダブルクリックすると、JTabbedPane の上にレコードが表示されます。

次に、追加、保存、削除、およびキャンセル ボタンを使用して、レコードに入力された内容に対して CRUD 操作を実行します。

このことから、サブクラスによってインスタンス化する必要がある設計の側面は次のとおりであると言えます。

1) JInternaFrame のサイズ 2) JTabbedPane のすべてのコンテンツ: タブ、テーブル、ラベル、テキストボックスなどの数。 3) 検索結果 JTable の列数: JTable ヘッダーをインスタンス化することで変更できます。

まず、JTabbedPane を使用して Abstract クラスを作成し、JTabbedPane にコンポーネントを追加して、どうすればよいかを確認しようとしました。以前投稿したコードです。このファイルは、後で変更した WindowBuilder を使用して生成されました。

package zm.co.freight.fpsManagementGUI.view;

import java.awt.EventQueue;

public abstract class AbstractTypeInternalFrame extends JInternalFrame {

    /**
     * Launch the application.
     */
//  public static void main(String[] args) {
//      EventQueue.invokeLater(new Runnable() {
//          public void run() {
//              try {
//                  AbstractTypeInternalFrame frame = new AbstractTypeInternalFrame();
//                  frame.setVisible(true);
//              } catch (Exception e) {
//                  e.printStackTrace();
//              }
//          }
//      });
//  }

    /**
     * Create the frame.
     */
    public AbstractTypeInternalFrame(String title) {
        setBounds(100, 100, 808, 589);

        JToolBar toolBar = new JToolBar();
        getContentPane().add(toolBar, BorderLayout.NORTH);

        JButton btnAdd = new JButton("Add");
        toolBar.add(btnAdd);

        JButton btnSave = new JButton("Save");
        btnSave.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
            }
        });
        toolBar.add(btnSave);

        JButton btnDelete = new JButton("Delete");
        toolBar.add(btnDelete);

        JButton btnCancel = new JButton("Cancel");
        btnCancel.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
            }
        });
        toolBar.add(btnCancel);

        JTabbedPane recordTabs = new JTabbedPane(makeRecordTabPane());
        getContentPane().add(recordTabs, BorderLayout.NORTH);

        JSeparator recordSearchSeparator = new JSeparator();
        getContentPane().add(recordSearchSeparator, BorderLayout.NORTH);



    }

    protected abstract int makeRecordTabPane();

}

問題は、私は正しい軌道に乗っているかということです。よくわからないので、ファクトリメソッドのパターンを使ってどのようにアプローチすればよいでしょうか。形状と描画を使ったもっと単純な例を見たことがありますが、Swing インターフェースについては少しわかりません。あなたが私に指示できる良い例、または単に私を正しい方向に向けるための簡単な例はありますか...それが私が求めていたすべてです. 曖昧でしたらすみません…

于 2012-05-31T09:40:38.987 に答える