親のJFrameと子のJDialogで値渡し
子画面のJDialogから親画面のJFrameに値を返す処理をこんな感じで実装しました。
かいつまんでコードを書いておきます。
親画面
//親画面のJFrame public class OyaFrame extends JFrame { public Kodomo kodomo; private JTextField hogeTxt; private void hogeBtnActionPerformed(java.awt.event.ActionEvent evt) { kodomo = new Kodomo(this, "顧客一覧", true); kodomo.addWindowListener(new WindowAdapter() { @Override public void windowClosed(WindowEvent e) { sethogeName(kodomo.name); } }); kodomo.setVisible(true); } public void setHogeName(String name) { hogeTxt.setText(name); } }
子画面
public class Kodomo extends JDialog{ public String hogeName; private JButton button; public kodomo (JFrame owner ,String title,boolean modal) { super(owner,title,modal); button.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { hogeName = "親画面のJFrameに値を渡すテスト"; dispose(); } }); } }
子画面が閉じるタイミングでWindowAdapterをかませて、その中で子画面のプロパティを親画面のセッターで値渡しを行っています。
これで親画面のJTextFieldに子画面の値を渡すことができましたー。
追記(2011/05/13 16:50)
Twitterでもっと簡単な方法を教えて頂きました。これはすごい。
@shinsan68k: @gothedistance @skrb @MIZO432 モーダルだったらkodomo.setVisible(true);でブロックされるのでその次の行でとりだせばいいだけですよ。たぶん難しく考えすぎでは。
2011-05-13 16:40:56 via web to @gothedistance
実際にやってみると、確かに親画面に子画面のプロパティが返されました。
ただ、今回の僕の要件はマニアックでJTableの選択行に入っている値を親画面に返すというものだったので、イベントの中で動的に何かを返す場合は、上記コードの方がいいかもしれない。