1

子ウィンドウを使用して親ウィンドウで何かを変更する方法を知りたいです。それで、ボタンを押すとポップアップウィンドウを開くウィンドウがあるとしましょう。この新しいウィンドウには、JTextArea と [OK] という別のボタンが含まれています。[OK] ボタンが押されたときに JTextArea の内容に基づいて親ウィンドウのタイトルを変更するにはどうすればよいですか?

4

1 に答える 1

6

私の見方では、これを行うには2つの一般的な方法があります。

  • [OK] が押されると、子ウィンドウは情報を親ウィンドウにプッシュできます。これを行うには、子ウィンドウは親ウィンドウへの参照を必要とし、親のパブリック メソッドを呼び出します。
  • 親ウィンドウは、子から情報を取得できます。これは、2 つの方法のいずれかで発生します。
    • 子ウィンドウがモーダルダイアログの場合、ダイアログが処理され、プログラム フローが親のコードに戻ると、親は単に子ウィンドウにクエリを実行できます。
    • ダイアログが非モーダルダイアログの場合、親ウィンドウは子にリスナーを追加する必要があります。たとえば、PropertyChangeListenerこのリスナーによって適切なイベントがトリガーされると、親ウィンドウはダイアログ ウィンドウに情報を問い合わせます。これは、 Observerデザイン パターンの使用例です。

子ウィンドウを表示するコードを持ち、子ウィンドウからの情報を必要とするオブジェクトは親であるため、必要な情報を抽出するコードが必要であり、子ウィンドウは親ウィンドウ オブジェクトを認識したり参照したりする必要はありません。これは私にはずっときれいに思えます。

この例については、こちらこちら、およびこちらのコードをご覧ください。

編集: あなたが説明した例では、JOptionPaneを使用してこれを簡単に解決できることに注意してください。多くの人は、JOptionPanes が非常に複雑な GUI を表示できることを知りません。基本的に、JPanel に配置できるものはすべて、JOptionPane (およびいくつか) に表示できます。JTextField を表示する JOptionPane を表示するだけで、プログラム フローが呼び出し側プログラムに戻ったときに、JOptionPane に表示された JTextField が保持するテキストを取得するだけです。これ以上簡単なことはありません。

于 2013-01-02T21:43:14.417 に答える