私は C のシステム プログラミングのバックグラウンドを持っており、Java プログラミングは私にとってギリシャ語とラテン語です。
だから私の問題は: - 私は2つのJFrame
オブジェクトを持っています
- 親オブジェクトAがあります
- これには子オブジェクト B があります。
オブジェクト B にはボタンがあります。BI でボタンがクリックされた場合、親オブジェクトの UI を更新したい。
親と通信するにはどうすればよいですか - 自分自身を更新するにはどうすればよいですか?
私は C のシステム プログラミングのバックグラウンドを持っており、Java プログラミングは私にとってギリシャ語とラテン語です。
だから私の問題は: - 私は2つのJFrame
オブジェクトを持っています
オブジェクト B にはボタンがあります。BI でボタンがクリックされた場合、親オブジェクトの UI を更新したい。
親と通信するにはどうすればよいですか - 自分自身を更新するにはどうすればよいですか?
値が調整され、2番目のGUIが開いている間に更新を「ライブ」にする必要がありますか、それとも閉じるまで遅らせることができますか?
閉鎖されるまで延期することができます。
モーダルダイアログまたはJOptionPane
代わりに使用してください。
モーダルダイアログを使用すると、表示を設定した直後に表示されるコード行はすべて、閉じられるまで処理されなくなります。ここで、ダイアログに配置したコントロールの値(オプションペインの戻り値と)を調べます。ここでの考え方はダイアログを拡張しないことに注意してください。代わりに、メインコードで1つのインスタンスを作成し、コントロールを作成して追加し、メインフレームを親として使用して表示します。
「すべてを1つのクラスに入れる」ことは、良い設計ではなく、私が一般的に提案していることでもありません。ここでは、メインGUIに影響を与える/更新するコントロールへの参照がない理由はほとんどありません。
通常、ボタンやパネルなどのウィジェットを配置する親 JFrame オブジェクトがあります。ボタンに匿名アクション リスナーを追加するだけで、その中から親クラスの任意の関数を呼び出すことができます。
public class MyFrame extends JFrame{
private Button button 2 = new Button();
public void init(){
b = new Button("Click me");
b.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
//CALL ANY FUNCTION OF PARENT CLASS FROM HERE.
updateText();
}
});
}
updateText(){
this.button2.setText("new text");
}
}
詳細については、このページhttp://docs.oracle.com/javase/tutorial/uiswing/events/actionlistener.htmlを参照してください。
この問題を解決する別の方法を見つけました。
一般的な委任の問題を解決できると思います。
親オブジェクトは子オブジェクトを構成します。親オブジェクトは、コンストラクターでこの値を子オブジェクトに渡します。このようにして、子は親オブジェクトのメソッドを呼び出し、変更を通知できます。
この場合、子フレームは親フレームを呼び出し、親にそれ自体を更新するように依頼します。