質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

1131閲覧

JFrame間の変数の共有

tohokukagaku

総合スコア12

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2018/11/05 02:35

編集2018/11/08 07:22

//フレーム1↓

java

1public class ZtBuilder extends JFrame { 2private Object[] Tcontents = new Object[4]; 3 4btnNewButton_1 = new JButton("検 索"); 5 btnNewButton_1.addActionListener(new ActionListener() { 6 //検索ボタンを押した場合の処理 7 public void actionPerformed(ActionEvent e) { 8 EventQueue.invokeLater(new Runnable() { 9 public void run() { 10 try { 11 String atesaki = textField_2.getText(); 12 SearchBuilder frame = new SearchBuilder(atesaki); 13 //frameをみえるようにする。 14 frame.setVisible(true); 15 16 17 } catch (Exception e) { 18 e.printStackTrace(); 19 } 20 } 21 }); 22 } 23 }); 24} 25 26//フレーム2↓ 27 28public class SearchBuilder extends JFrame { 29private Object[] Tcontents = new Object[4]; 30 31public SearchBuilder(String atesaki) { 32 33 //atesaki の情報をもとにテーブルを作成する 34 this.Serch(atesaki); 35 36 JButton btnNewButton_1 = new JButton("決 定"); 37 btnNewButton_1.addActionListener(new ActionListener() { 38 39 //決定ボタンを押したときの処理 40 41 public void actionPerformed(ActionEvent e) { 42 43 int row = table.getSelectedRow(); //選択している行の番号の取得 44 int column = table.getColumnCount(); //テーブルのカラム数記録 45 Tcontents = new Object[column]; 46 47 for(int i = 0; i < column; i++) { 48 49 Tcontents[i] = table.getValueAt(row, i); //テーブルの中身を入れる処理 50 51 52 } 53 54 //jframeを見えなくする 55 setVisible(false); 56 57 58 59 60 } 61 62 63 64 }); 65

フレーム1の検索ボタンからフレーム2を呼び出し、フレーム2の決定ボタンを押したときに
Tcontents[2]の情報をフレーム1のtextField_2に格納しつつ、フレーム1のTcontentsにその情報を格納したいのですが方法はありますか?

バージョン情報
eclipse4.6 neon

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2018/11/05 02:39

コードはマークダウンのcode機能をご利用ください
guest

回答1

0

ベストアンサー

フレーム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の派生)の仕事とは分離するよう心がけてます。

投稿2018/11/05 04:15

KSwordOfHaste

総合スコア18394

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tohokukagaku

2018/11/05 06:48

見ずらいコードで申し訳ございません。 java初心者でダイアログやマークダウンのコード機能というのがわからないので、調べたうえでKSwordOfHasteさんの(A)、(B)、(C)を実行したいと思います。 詳しく説明してくださりありがとうございます。
KSwordOfHaste

2018/11/05 11:43

本サイトを利用するならコード用のマークダウンを使うことは大変重要と思います。閲覧者に正確な情報が伝わりにくくなりますので。 https://teratail.com/help#about-markdown のページの「コードを入力」にあるとおりに記述すればよいです。 ```java public class MyFrame {  public static void main(Strin[] args) {   ...  } } ``` このように3つのバッククォート文字をコードの前後の行に書くだけでよいです。
tohokukagaku

2018/11/06 06:00

リンクまで教えていただき、ありがとうございます。 次の投稿からは使うようにいたします。
KSwordOfHaste

2018/11/06 11:21

質問は投稿した後でも編集できます。ですので本質問から編集しておくのがよいですよ。
tohokukagaku

2018/11/08 07:24

わかりました。 編集して変更をしておきます。 丁寧に指導してくださり、ありがとうございます。
tohokukagaku

2018/11/15 09:27

やっとJDialogでの作成ができたのですが、 三番目(C)の 「確定したかどうか」のチェックなんですけど具体的にはどうしたらよいですか?
KSwordOfHaste

2018/11/16 05:03 編集

スマートな方法から素朴な方法までいくつかあるかも知れませんが。。。素朴な方法の例を挙げますと、 「キャンセル」「OK」という2つのボタンのどちらが押されたかを覚えておくようなフィールドをJDialogの派生クラスに(例えばboolean isCancelledのように)定義しておき、「キャンセル」のアクションではそれをtrueに、「OK」のアクションではそれをfalseにし、ダイアログをhideして呼び出し元へ制御が戻った後でisCancelledの値を参照できるようなゲッターを通じてどちらがおされたかを知らせればよいと思います。
tohokukagaku

2018/11/16 02:07

沢山のことを教えていただきありがとうございました。 おかげさまで問題は解決しました。 ベストアンサーに選ばせていただきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問