Javaについて勉強中の学生です。
よろしくお願いします。
CGIによるプログラムは一通り勉強しました。
次にGUIによるプログラムを勉強中です。
そこで電卓を作ってみようと思いましたが、よくわからないところがあります。
ご教示いただければ幸いです。
一応外見だけは作ることができましたが、イベントを登録するときに電卓のボタンをbtn1,btn2,btn3…とすればイベントを登録することはできるのですが、それだとボタンの分だけ作成しなければならず修正を加えるのが大変になってしまいます。
例)btn1.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent ae){
hyozi.setText(hyozi.getText() + "1");
}
}
そこで「btn」に統一しボタンに表示されている文字列を使い簡潔にプログラムをまとめたいのですがどのようにすればよいのかわかりません。以下のプログラムに追加できるようなものを教えていただけないでしょうか?
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Dentaku{
private JFrame frame;
private JPanel panel_fun,panel_ten;
private JTextField hyozi;
private JButton btn;
public Dentaku(){
//フレームの作成してレイアウトをセット
frame = new JFrame("簡易電卓プログラム");
frame.setLayout(new BorderLayout());
//パネルを作成してレイアウトをセット
panel_fun = new JPanel();
panel_fun.setLayout(new GridLayout(2,3));
panel_ten = new JPanel();
panel_ten.setLayout(new GridLayout(4,3));
//表示用テキストボックスを作成
hyozi = new JTextField();
//電卓のボタンを作成
panel_fun.add(btn = new JButton("CA"));
panel_fun.add(btn = new JButton("+"));
panel_fun.add(btn = new JButton("-"));
panel_fun.add(btn = new JButton("*"));
panel_fun.add(btn = new JButton("/"));
panel_fun.add(btn = new JButton("="));
panel_ten.add(btn = new JButton("1"));
panel_ten.add(btn = new JButton("2"));
panel_ten.add(btn = new JButton("3"));
panel_ten.add(btn = new JButton("4"));
panel_ten.add(btn = new JButton("5"));
panel_ten.add(btn = new JButton("6"));
panel_ten.add(btn = new JButton("7"));
panel_ten.add(btn = new JButton("8"));
panel_ten.add(btn = new JButton("9"));
panel_ten.add(btn = new JButton("0"));
//フレームに表示用テキストボックスをセット(BorderLayoutの北側)
frame.add(hyozi,BorderLayout.NORTH);
//フレームにパネルをセット(BorderLayoutの中央,南側)
frame.add(panel_fun,BorderLayout.CENTER);
frame.add(panel_ten,BorderLayout.SOUTH);
//フレームの詳細設定
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(300,250);
frame.setVisible(true);
}
//mainメソッドの定義
public static void main(String[] args){
Dentaku application = new Dentaku();
}
}
No.2ベストアンサー
- 回答日時:
ボタンごとにリスナーを作るんじゃなくて、
DentakuクラスにActionListenerを実装しなよ。
public class Dentaku implements ActionListener{
…
public void actionPerformed(ActionEvent event){
String command = event.getActionCommand();
…
各ボタン(アクションコマンド)ごとの振る舞い
}
public Dentaku(){
…
btn1.addActionListener(this);
…
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- VPN 何これ 1 2022/04/19 01:32
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- その他(プログラミング・Web制作) pythonのグローバル変数 2 2022/11/25 18:02
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- PHP jpgraphで表示されない 2 2022/10/22 09:12
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- Windows 10 IT初心者です! powershellで以下のようなエラーが出ました オブジェクト参照がオブジェクト 1 2023/05/17 11:30
- JavaScript 指定したパスが現URLに含まれていたら特定要素を削除するJavascriptのコードを教えてください 2 2023/04/27 17:58
- Java java final 1 2022/06/10 22:49
- C言語・C++・C# クラスのメンバ変数を基準に並べ替えをしたい 5 2022/12/25 17:40
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JTable の 列幅を個別に設定す...
-
JPanelの切り替えと再描画
-
KeyListenerの使い方について
-
タスクトレイのメニュからウィ...
-
キャレットの幅を設定したい。
-
eclipse java swing
-
JavaでのSwingを使った簡易電卓...
-
javaで文字数制限するには?
-
JPanelの重ね方/OverlayLayout他
-
最後の行に移動するには?
-
TextAreaでの文字の色
-
java junit list同士の比較方法
-
JSPやサーブレットでSystem.out...
-
変数を動的に利用するには?
-
C言語のポインターに関する警告
-
System.err. printlnとSystem.o...
-
getStringの値がNULLの時の処理
-
Java配列でNullPointerExceptio...
-
JSPでImportエラーになります
-
[JAVA]try 内の変数を外で!?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
java junit list同士の比較方法
-
javaで文字数制限するには?
-
JPanelの切り替えと再描画
-
連番をオブジェクト名の最後に...
-
JPanelの重ね方/OverlayLayout他
-
JavaのswingでCardLayoutの画面...
-
JavaでのSwingを使った簡易電卓...
-
ArrayListの使い方について(初...
-
4択クイズでのランダム出題の...
-
KeyListenerの使い方について
-
JDialogを閉じた時の処理
-
BMI測定を作ろうとしている...
-
TextAreaでの文字の色
-
EXECLの行を削除
-
Java-Swing TextAreaにスクロー...
-
setPrefferedSizeとsetSize
-
【Swing】JPanel クラス外から...
-
最後の行に移動するには?
-
あるコンボボックスを選択する...
-
JButton-背景の透明化
おすすめ情報