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()
それとも何らかの方法でローカルスコープから参照を「釣り上げる」ことになっていますか?