5

Abstract : Eclipse Window Builder のコード ジェネレーターを構成して、そのオブジェクト参照をメソッド内でローカルに配置するのではなく、クラス本体に配置する方法を探していますinitalize()

詳細:

ウィンドウビルダーには、「グラフィカルフォームデザイナー」からGUIコードを生成できるコードジェネレーター/コードアナライザーが組み込まれており、その逆も可能です。GUI をすばやく設計し、さまざまなフレームワークが Java でどのように機能するかを学習するのに非常に役立ちます (特に Java の初心者にとって)。しかし、より洗練された GUI 設定に移行する際に、生成されたコードをデザインで使用する際に問題が発生します。問題は、生成されたコードのほとんどがinitialize()メソッド内に配置されているため、オブジェクトがローカル スコープに常駐し、「外部」から参照を取得するのが困難になることです。

これまでのところ、型宣言をinitialize()メソッドからクラス本体に手動でコピーして貼り付け、それらにアクセスできるようにしましたが、これはどういうわけか間違ったアプローチのようです。グラフィカル デザイナ内から GUI を再編成しない限り、問題なく動作します。その場合、コード ジェネレーターはその型宣言をinitialize()メソッドに再度配置します。

自動生成されたコードは次のようになります。

   // AUTO-GENERATED CODE
   public class MyGUI {
      private void initialize() {
          // gui objects declared AND created in this scope by Window Builder
          JFrame frame = new JFrame();
          JPanel panel_1 = new JPanel();
          frame.getContentPane().add(panel_1);
    }
  }

私が欲しいのは:

   public class MyGUI {
          // accessible from outside
          public Frame frame = null;
          public JPanel panel_1 = null;

       private void initialize() {
          // gui objects only created in this scope
          frame = new JFrame();
          panel_1 = new JPanel();
          frame.getContentPane().add(panel_1);
    }
  }

私は解決策のドキュメントを探していました (そのドキュメントはほとんどありません)。また、さまざまな Window Builder の設定を調べましたが、今のところうまくいきません。「データバインディング」がありますが、MVC(GUI要素をモデルにバインド)を実装しているようで、かなりやり過ぎです。

私が見逃しているデザインパターンはありますか、initialize()それとも何らかの方法でローカルスコープから参照を「釣り上げる」ことになっていますか?

4

1 に答える 1

2

「設定」ウィンドウで、WindowBuilder と Swing (または SWT) を展開し、次に「コード生成」を展開します。変数をクラスレベル フィールドとしてローカルに宣言し、遅延初期化するオプションがあります。フラット ステートメントまたはブロック ステートメントを選択することもできます。ドキュメントの WindowBuilder Pro ユーザー ガイド > 設定 > 検索対象のスイングにいくつかの例があります。

于 2012-09-11T13:23:16.627 に答える