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

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

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

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

Q&A

2回答

3270閲覧

[java]TextFieldの中身を引数として持ってくる場合

IsiyakiimoO

総合スコア8

Java

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

0グッド

0クリップ

投稿2016/07/15 03:03

編集2022/01/12 10:55

[java]TextFieldの中身を引数として持ってくる場合どうしたらよいですか?
TextFieldに書かれた文字をボタンが押されたら一時的に保存されるという風にしたいのですが

class hogehoge extends JFrame implements ActionListener{
フィールド
keyPanel new Jpanel
title_name new textField
REGIST_button new button
関数{
keyPanel.setLayout(new GridLayout(5,1));
keyPanel.add(title_name);
keyPanel.add(REGIST_button);
REGIST_button.addActionListener(this);
}
関数2(ActionEvent e){
変数 = title_name.getText();
}
}

という形で関数2の場所で怒られます。
(Frane.title_nameは不可視です)
java初心者というのもあります。よろしくお願いします。

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

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

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

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

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

argius

2016/07/15 04:02

教えてください。(1).フィールドの変数名は何ですか? (2).「関数2の場所で怒られます」とありますが、怒られた内容を具体的に書いてください。または、そのエラーが確認できるように、実際のコードを掲載してください。
argius

2016/07/15 04:48

二度手間になってしまいすみません。わざわざ質問のために別途手書きをされているようですが、実際に動かしているコードをそのまま掲載していただくのに不都合があるのでしょうか? そうでなければそのまま貼っていただいた方が双方にとって楽だと思うのですが。初心者さんであればなおさら、言葉で説明するのは難しいと思います。
guest

回答2

0

JTextField.setText()で取得した文字列を格納する変数を用意します。
もちろん、変数はインスタンス変数として用意しなければ、他のメソッド(俗にいう関数)で使えません。

以下、サンプルです。

Java

1public class SwingSample extends JFrame { 2 private JTextField tfName = new JTextField(); 3 private String name; 4 5 public static void main(String[] args){ 6 final SwingSample s = new SwingSample(); 7 s.setTitle("SwingSample"); 8 s.setSize(400, 400); 9 s.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 10 SwingUtilities.invokeLater(new Runnable(){ 11 @Override public void run(){ 12 s.setVisible(true); 13 } 14 }); 15 } 16 17 SwingSample(){ 18 final JButton btn1 = new JButton("Save"); 19 btn1.addActionListener(new ActionListener(){ 20 @Override public void actionPerformed(ActionEvent e){ 21 name = tfName.getText(); 22 tfName.setText(""); 23 } 24 }); 25 final JButton btn2 = new JButton("Restore"); 26 btn2.addActionListener(new ActionListener(){ 27 @Override public void actionPerformed(ActionEvent e){ 28 tfName.setText(name); 29 } 30 }); 31 32 final JPanel keyPanel = new JPanel(); 33 keyPanel.setLayout(new GridLayout(3, 1)); 34 keyPanel.add(tfName); 35 keyPanel.add(btn1); 36 keyPanel.add(btn2); 37 getContentPane().add(keyPanel); 38 } 39}

SwingSampleクラスをJPanelの派生クラスに変更し、Java 8の環境であれば、次のようなコードになります。

Java

1public class SwingSample extends JPanel { 2 private JTextField tfName = new JTextField(); 3 private String name; 4 5 public static void main(String[] args){ 6 final JFrame f = new JFrame("SwingSample"); 7 f.getContentPane().add(new SwingSample()); 8 f.setSize(400, 400); 9 f.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 10 SwingUtilities.invokeLater(()->f.setVisible(true)); 11 } 12 13 SwingSample(){ 14 final JButton btn1 = new JButton("Save"); 15 final JButton btn2 = new JButton("Restore"); 16 17 setLayout(new GridLayout(3, 1)); 18 add(tfName); 19 add(btn1); 20 add(btn2); 21 22 btn1.addActionListener((e)->{ 23 name = tfName.getText(); 24 tfName.setText(""); 25 }); 26 27 btn2.addActionListener((e)->tfName.setText(name)); 28 } 29}

投稿2016/07/15 08:25

編集2016/07/15 08:32
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

保存のところはsipadan2003さんの回答を参考にしていただくとして。

元の質問の頭のところを生かして書くとしたら、下記のようにすれば関数2の場所で怒られることは無いはずです。
いったんここまで出来てから、「一時的に保存の処理」の追加に挑戦してみると良いです。

lang

1class hogehoge extends JFrame implements ActionListener { 2 3 private JPanel keyPanel = new JPanel(); 4 private JTextField title_name = new JTextField(); 5 private JButton REGIST_button = new JButton(); 6 7 hogehoge() { 8 keyPanel.setLayout(new GridLayout(5, 1)); 9 keyPanel.add(title_name); 10 keyPanel.add(REGIST_button); 11 REGIST_button.addActionListener(this); 12 add(keyPanel); 13 } 14 15 @Override 16 public void actionPerformed(ActionEvent e) { 17 String s = title_name.getText(); 18 System.out.println(s); // TODO 一時保存の処理 19 } 20 21}

「Frane.title_nameは不可視です」の原因として考えられるのは、ActionListenerの実装クラスがhogehogeクラスとは別に宣言されていて、そのクラスのactionPerformedから参照しようとしている場合ですが、この場合はimplements ActionListenerしているのでactionPerformedを外側のクラスに書く必要はないはずです。

ただ、イベントハンドラーは匿名クラスで書くのが一般的ですので、sipadan2003さんの回答のように書く方が良いと思います。

投稿2016/07/15 09:09

argius

総合スコア9388

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問