こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

JavaでのSwingを使った簡易電卓作成

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();
}
}

大変申し訳ございませんが、この投稿に添付された画像や動画などは、「BIGLOBEなんでも相談室」ではご覧いただくことができません。 OKWAVEよりご覧ください。

マルチメディア機能とは?

投稿日時 - 2011-10-09 15:39:38

QNo.7060830

困ってます

質問者が選んだベストアンサー

ボタンごとにリスナーを作るんじゃなくて、
DentakuクラスにActionListenerを実装しなよ。

public class Dentaku implements ActionListener{

  public void actionPerformed(ActionEvent event){
    String command = event.getActionCommand();
    …
    各ボタン(アクションコマンド)ごとの振る舞い
  }
  public Dentaku(){
    …
    btn1.addActionListener(this);
    …
  }

投稿日時 - 2011-10-12 09:48:38

お礼

とても参考になりました。ありがとうございます
これから実践してみようと思います。

投稿日時 - 2011-10-15 18:40:03

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

下半分全然読んでないけどとりあえず配列。

投稿日時 - 2011-10-09 16:31:52

お礼

配列で実行をするとクリックしたときに,コマンド上に変な文字列が一気に出てきてしまいます。
ありがとうございました。

投稿日時 - 2011-10-15 18:41:12

あなたにオススメの質問