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

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

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

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

Q&A

解決済

1回答

1820閲覧

別のクラスprivate変数を呼び出せない

KasperHekmatyar

総合スコア81

Java

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

0グッド

0クリップ

投稿2017/06/07 05:55

###発生している問題・エラーメッセージ

swingでアプリケーションウィンドーを作成してtextfieldに文字を入力し、ボタンをクリックしたあとに色々処理するプログラムを作成しています。
正常に動作しないのでデバッグ用にアプリケーションウィンドを作ったクラスと
クリック後で呼び出す別のクラスそれぞれで文字入力したtextfieldをsysoutするとアプリケーションウィンドを作ったクラス側は正常にsysoutされますが、別のクラスの方は正常に動作せず、コンソールでは以下のようになるのですが、なぜなのでしょうか

UIクラス側 入力された商品ID A001
UIクラス側 入力された商品名 A002
CSVクラス側入力された商品ID
CSVクラス側入力された商品名

###該当のソースコード
■UIクラス

java

1 2private JFrame frame; 3 private JTextField input_product_id; 4 private JTextField input_product_name; 5 6 7 8 9 //ゲッター 10 public String get_input_product_id(){ 11 return input_product_id.getText(); 12 } 13 14 public String get_input_product_name(){ 15 return input_product_name.getText(); 16 } 17 18 19 20 21JButton btnNewButton = new JButton("検索"); 22 btnNewButton.addMouseListener(new MouseAdapter() { 23 @Override 24 public void mouseClicked(MouseEvent e) { 25 26 String geta_input_product_id = input_product_id.getText(); 27 String geta_input_product_name = input_product_name.getText(); 28 29 System.out.println("UIクラス側 入力された商品ID " + get_input_product_id()); 30 System.out.println("UIクラス側 入力された商品名 " + get_input_product_name()); 31 32 33 CSV_read csv_read = new CSV_read(); 34 csv_read.csv_read_method(); 35 36 //set_field_product_name(get_input_product_id()); 37 } 38 }); 39

■CSV_readクラス

java

1 public void csv_read_method() { 2 3 4 System.out.println("CSVクラス側入力された商品ID " + ui.get_input_product_id()); 5 System.out.println("CSVクラス側入力された商品名 " + ui.get_input_product_name()); 6 7}

###試したこと
課題に対してアプローチしたことを記載してください

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報
###前提・実現したいこと
ここに質問したいことを詳細に書いてください
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。

###発生している問題・エラーメッセージ

エラーメッセージ

###該当のソースコード

ここにご自身が実行したソースコードを書いてください

###試したこと
課題に対してアプローチしたことを記載してください

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

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

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

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

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

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

guest

回答1

0

ベストアンサー

こうなっているのだろうと思います。uiは呼び出し元のUIのインスタンスとは別物なので同じ値が表示されるわけもありません。

java

1public class CSV_read { 2 UI ui = new UI(); 3 4 public void csv_read_method() { 5 System.out.println("CSVクラス側入力された商品ID " + ui.get_input_product_id()); 6 System.out.println("CSVクラス側入力された商品名 " + ui.get_input_product_name()); 7 } 8}

こんなふうにして呼び出し元のUIインスタンスがCSV_readにきちんとわたるようにしてください。

java

1// UI.java 2public class UI { 3 UI() { 4 JButton btnNewButton = new JButton("検索"); 5 btnNewButton.addMouseListener(new MouseAdapter() { 6 @Override 7 public void mouseClicked(MouseEvent e) { 8 System.out.println("UIクラス側 入力された商品ID " + get_input_product_id()); 9 System.out.println("UIクラス側 入力された商品名 " + get_input_product_name()); 10 11 CSV_read csv_read = new CSV_read(this); 12 csv_read.csv_read_method(); 13 ... 14 } 15 }); 16 ... 17 } 18} 19 20// CSV_read.java 21public class CSV_read { 22 UI ui; 23 24 public CSV_read(UI ui) { 25 this.ui = ui; 26 } 27 28 public void csv_read_method() { 29 System.out.println("CSVクラス側入力された商品ID " + ui.get_input_product_id()); 30 System.out.println("CSVクラス側入力された商品名 " + ui.get_input_product_name()); 31 } 32}

投稿2017/06/07 06:20

KSwordOfHaste

総合スコア18392

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

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

KasperHekmatyar

2017/06/07 06:27

「uiは呼び出し元のUIのインスタンスとは別物なので」というのは呼び出し先では初期の何も代入されていないtextfieldが呼び出されるからですか?
KSwordOfHaste

2017/06/07 06:30

はい、そういう意味です。
KasperHekmatyar

2017/06/07 06:31

イマイチUI uiのような何とかクラス型のなんとか変数名のイメージが沸かないです。その辺分かりやすく説明していただけると助かります。
ozwk

2017/06/07 06:51 編集

↓のKSwordOfHasteさんのコメントでわからないなら別質問にした方がいいと思います。 その際はintやstringなど他の型とくらべて何がイメージしづらいか添えるといいと思います。
KSwordOfHaste

2017/06/07 06:49

class A { int x; } A a1 = new A(); A a2 = new A(); a1.x = 1; a2.x = 2; としたときa1とa2のxはそれぞれ別ということがわかっていなければ本件のような応用プログラムを書くことは不可能です。その点があやしいならもっと小さなコードを書いてインスタンスが何かをよく確認することをお勧めします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問