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

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

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

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

button

HTMLで用いる<button>タグです。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Q&A

解決済

3回答

651閲覧

Javaのボタンアクションを実装したい

j-nagnn

総合スコア21

Java

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

button

HTMLで用いる<button>タグです。

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

0グッド

0クリップ

投稿2020/07/09 10:16

現在、eclipceでjavaの勉強をしています。
そこでボタンを押したときに、同じ画面に表示されているラベルの文字が変わるというプログラムを作っていますが、ボタンを押しても変わりません。

参考サイトなどを見ても、どこが違うのかが、自分ではわかりませんでした。

java

1package chapter13; 2import java.awt.*; 3import java.awt.event.*; 4 5import javax.swing.JLabel; 6 7public class LayPanel extends Frame implements ActionListener { 8 Label la; 9 Button b1,b2,b3; 10 public static void main(String[] args) { 11 LayPanel lp = new LayPanel("パネル据え置き"); 12 lp.buhin(); 13 lp.setVisible(true); 14 } 15 16LayPanel(String s){ 17 super(s); 18 setSize(300,300); 19 } 20 21public void buhin() { 22 // TODO 自動生成されたメソッド・スタブ 23 FlowLayout f = new FlowLayout();//FlowLayoutクラスのコンストラクタ 24 setLayout(f);//フレームのレイアウト設定 25 Panel p1 = new Panel();//パネル作成 26 Panel p2 = new Panel();//パネル作成 27 add(p1); 28 add(p2); 29 30 GridLayout gl = new GridLayout(3,1);//横3列、縦1列の配置 31 p1.setLayout(gl); 32 33 34 35 b1 = new Button("設置"); 36 b1.addActionListener(this); 37 b2 = new Button("再構築"); 38 b2.addActionListener(this); 39 b3 = new Button("創成"); 40 b3.addActionListener(this); 41 //ボタン3種をパネル1に追加 42 43 p1.add(b1); 44 p1.add(b2); 45 p1.add(b3); 46 47 48 p2.setLayout(f); 49 la = new Label("Exsample"); 50 TextField t1 = new TextField(7);//テキストフィールド 51 p2.add(la);//panel2にラベルを設置 52 p2.add(t1); 53 54} 55 56public void actionPerformed(ActionEvent e){ 57 if (e.getSource() == "b1"){ 58 la.setText("配置"); 59 }else if (e.getSource() == "b2"){ 60 la.setText("初期化"); 61 }else if(e.getSource() == "b3") { 62 la.setText("再構築"); 63 } 64 65 } 66 67} 68 69

実現できる記述の仕方が分かる方や、書き方が間違っているというのが分かる方いたらご指摘お願いします。

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2020/07/09 10:32

とりあえず awt でなく swing で構築しましょう
j-nagnn

2020/07/09 10:35

ありがとうございます。 参考文献がawtだったので、そちらで構築していました
guest

回答3

0

回答がかぶっちゃってますが、せっかく書いたのでおいておきます

b1, b2, b3 がインスタンス変数だったことに書いた後に気がついてしまったので
正直よろしくないコードです。

java

1public void actionPerformed(ActionEvent e){ 2 System.out.println(e.getSource()); 3 // java.awt.Button[button0,0,0,50x21,label=設置] 4 5 Button btn = (Button) e.getSource(); // getSource() はイベントを発生させた部品が帰ってきます 6 String label = btn.getLabel(); // ボタンのラベルで識別するので取得しておきます。 7 8 if (btn.getLabel().equals("設置")){ 9 la.setText("配置"); 10 }else if (btn.getLabel().equals("再構築")){ 11 la.setText("初期化"); 12 }else if (btn.getLabel().equals("創成")){ 13 la.setText("再構築"); 14 } 15 16 }

投稿2020/07/09 11:58

編集2020/07/09 12:02
YakumoSaki

総合スコア2027

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

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

0

ベストアンサー

actionPerformedを以下のようにしてください。
e.getSource() == "b1" では"b1"という文字列と比較しているため永遠に入りません。

Java

1public void actionPerformed(ActionEvent e) { 2 if (e.getSource() == b1) { 3 la.setText("配置"); 4 } else if (e.getSource() == b2) { 5 la.setText("初期化"); 6 } else if (e.getSource() == b3) { 7 la.setText("再構築"); 8 } 9}

あと、詳しい説明は省きますが、awtを使われていますが最低でもswingを使いましょう。
一部awtのクラスを使う事もありますが、画面の部品はswing使います。

Frame → JFrame
Label → JLabel
Button → JButton

と言うのと、Frameの✕ボタンを押した時にちゃんとアプリが終了するようにした方がいいです。
今回の質問と関係ないので、スルーしていただいても構いません。

投稿2020/07/09 10:45

編集2020/07/09 10:47
root_jp

総合スコア4666

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

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

root_jp

2020/07/09 10:47

asahina1979さんのコメントや回答と、ほぼほぼかぶってしまいました。
j-nagnn

2020/07/09 10:49

回答ありがとうございます。文字列と比較してしまっていたんですね。 今後書き方には気を付けます。回答ありがとうございました。
guest

0

e.getSource()

これは 今回の場合 Button のインスタンス がはいっていたはずです。
Button のインスタンス は文字列とは一致しないです。

投稿2020/07/09 10:35

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

j-nagnn

2020/07/09 10:46

actionPerformedメソッドのifの条件である[e.getSource() == "b1"]の"b1"がインスタンスではなく文字列として認識されているということでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問