Life is Really Short, Have Your Life!!

ござ先輩の主に技術的なメモ

親の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でもっと簡単な方法を教えて頂きました。これはすごい。

実際にやってみると、確かに親画面に子画面のプロパティが返されました。

ただ、今回の僕の要件はマニアックでJTableの選択行に入っている値を親画面に返すというものだったので、イベントの中で動的に何かを返す場合は、上記コードの方がいいかもしれない。