質問: table.getValueAt(row, i); //テーブルの中身を入れる処理 } //jframeを見えなくする setVisible(false); } }); } ``` フレーム1の検索ボタンからフレーム2を呼び出し、フレーム2の決定ボタンを押したときに Tcontents[2]の情報をフレーム1のtextField_2に格納しつつ、フレーム1のTcontentsにその情報を格納したいのですが方法はありますか? バージョン情報 eclipse4.6 neon
回答: > > フレーム1の検索ボタンからフレーム2を呼び出し、フレーム2の決定ボタンを押したときに > > Tcontents[2]の情報をフレーム1のtextField_2に格納しつつ、フレーム1のTcontentsにその情報を格納したいのですが方法はありますか? > > > コード用のマークダウンを使っておられずコードが見づらいためあまり見てませんが、やりたいことはこの文から概ねわかります。ですが・・・フレーム2側で呼び出し元のフィールドへ直接設定するようなことはすべきでないと思います。例えフレーム2が呼び出し元のフレーム1専用のものであったとしても、わざわざ汎用性を減じるような設計をしなくてもよいのではないでしょうか。 ではどうするかといえば、 * (A) フレーム2側では確定した情報を自分自身に覚えておき、それを外部へ公開する 公開方法はpublic fieldにしたりgetterを定義したりですが普通はgetterでしょうね。 * (B) フレーム2が閉じたタイミングをフレーム1が知る これはフレーム2をダイアログとして作ってやれば簡単です。例えば素朴にJDialogで作るとするとJDialog#setModalityType(ModalityType.APPLICATION_MODAL)などとすればモーダルにでき、JDialog#show()はダイアログを閉じる操作をした後でshow()から戻ってくるような動作になります。簡単です・・・ * (C) フレーム1はフレーム2が閉じた後に確定情報をフレーム2に問い合わせる フレーム2(ダイアログ)は確定ボタン以外にキャンセルボタンも備えていることが多いでしょう。そこで「確定したかどうか」のチェックをまず行います。もし確定していたら(A)で用意しておいた機能(getter)を通じて確定情報を取得します。 ダイアログはGUIアプリケーションでよく使う道具ですがswingにはJDialogだけでなくダイアログを簡易的に作るためのJOptionPaneなど他の機能もあります。最初ダイアログを作ろうとするとき「何使えばいいんだぁ」状態になりますが、そこはしかたないので少し研究してください。 自分も本件に対して何がベストといえるほどは経験を積んでないですがとりあえずJDialogで素朴に作ってみたらいいのではないかと思います。 余談: searchメソッドは「検索」と「テーブルの生成」の2つの仕事をやっていると思います。自分は前者を「モデルを生成する機能」と捉えアプリケーションロジック用のどこか適当なクラスへ置き、後者を行うビュー(JDialog/JFrameの派生)の仕事とは分離するよう心がけてます。