Javaのswingで電卓サンプル④~BSとACの機能追加と数字が表記できるようにした~ | 素粒子の世界で自由に生きる

素粒子の世界で自由に生きる

iphoneアプリのレビューをしていたんですが・・
だんだんandroidアプリ開発の話になってきました。。
さらに、素粒子の話になってきました笑
自分が読み返したくなるブログ記事を書いております♪
ほぼ自己満ですが、ぜひお楽しみください!

さって、やっと少し電卓らしくなってきました。

ボタンを認識するだけではなく、1,2,3と押すと123と表記されるようにしました。


ポイントは以下のコードの赤文字になっているところ。


String disp;

disp = disp + "1";

display(disp);


このコードで押したボタンの数字を追加していっています。

変数dispと"1"はString型なので、文字列の足し算となります。


dispに1が入っていれば

"1"+"1"となり、11と表示されます。






package swingsam;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.prefs.BackingStoreException;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

public class Calctest extends JFrame implements ActionListener {
JPanel pane;
JTextField display;
String start = " ";
String disp = start; //ディスプレイを初期化しておく(しておかないと、nullという文字が入ってしまう。

public Calctest(String s) {
super(s);
pane = new JPanel(new GridLayout(1, 1)); // 結果表示のためのパネル
display = new JTextField(); // 結果表示のためのテキストエリア

// フレームの構成
this.setSize(320, 240);
this.setDefaultCloseOperation(EXIT_ON_CLOSE);
this.setLayout(new BorderLayout());

// ボタンなど、画面の構成

this.add(pane); // 結果表示のためのパネルをフレームに組み込む
pane.add(display);// 結果表示のためのテキストエリアをパネルにはめ込んで見えるようにする

display.setHorizontalAlignment(JTextField.RIGHT);// テキストエリアのカーソルを右側に出す
JPanel pane1 = new JPanel(new GridLayout(5, 4));// ボタン配置のためのパネル

String btnface[] = { "BS", "CL", "AC", "1", "2", "3", "+", "4", "5",
"6", "-", "7", "8", "9", "/", "0", "=", "+/-", "*" }; // ボタンの表示を作る
String actionCommand[] = { "BS", "CL", "AC", "1", "2", "3", "+", "4",
"5", "6", "-", "7", "8", "9", "/", "0", "=", "+/-", "*" };
JLabel dummy = new JLabel();// 無記入のラベルをひとつ作る
pane1.add(dummy);// pane1の1番始めのグリッドを空白にするためにひとつ付け足す
JButton btn;
for (int i = 0; i < btnface.length; i++) {
btn = new JButton(btnface[i]);
btn.addActionListener(this); // ActionListenerをbtn(作成したボタン)にadd(付け加えて)している。これでpublic
// void actionPerformed(ActionEvent
// e) が呼び出されるようになった!
btn.setActionCommand(actionCommand[i]); // actionCommandをセットして、ボタンの中身の判断が出来るようにする。(全部数字でそろえてifで判定できるようにする)
pane1.add(btn);
}

this.add(pane, BorderLayout.NORTH);
this.add(pane1, BorderLayout.CENTER);

pane.setBackground(new Color(00, 00, 00));
this.setVisible(true);
display("0");

}

public void display(String t) {
display.setText(t);

}

public void actionPerformed(ActionEvent e) {
String cmd = e.getActionCommand();// まず、getActionCommandでボタンが押されたとき、そのボタンに設定されているActionCommand(set.ActionCommandで設定している。)をcmdに格納する。
if (cmd.equals("BS")) { // if文を使って何ボタンが押されたかを判定していきます。
if (disp.equals(""))
return;
int displength = disp.length();
// System.out.println("disp1"+disp);
disp = disp.substring(0, displength-1);// substringメソッドを使うことで(先頭,終わり)の位置を指定して、文字の長さを変えることが出来る。
//displength-1では、displength(↑で宣言した、文字列の長さ)から一文字ずらしたものを表示するので、BSを押すと後ろが一文字消えたように表示できる。
// System.out.println("disp2"+disp);
display(disp);
return;
} else if (cmd.equals("CL")) {
display("0");
} else if (cmd.equals("AC")) {
disp = start;
display("0");
} else if (cmd.equals("1")) {
disp = disp + "1";
display(disp);
} else if (cmd.equals("2")) {
disp = disp + "2";
display(disp);
} else if (cmd.equals("3")) {
disp = disp + "3";
display(disp);
} else if (cmd.equals("4")) {
disp = disp + "4";
display(disp);
} else if (cmd.equals("5")) {
disp = disp + "5";
display(disp);
} else if (cmd.equals("6")) {
disp = disp + "6";
display(disp);
} else if (cmd.equals("7")) {
disp = disp + "7";
display(disp);
} else if (cmd.equals("8")) {
disp = disp + "8";
display(disp);
} else if (cmd.equals("9")) {
disp = disp + "9";
display(disp);
} else if (cmd.equals("0")) {
disp = disp + "0";
display(disp);
} else if (cmd.equals("+")) {
display("+");
} else if (cmd.equals("-")) {
display("-");
} else if (cmd.equals("+/-")) {
display("+/-");
} else if (cmd.equals("*")) {
display("*");
} else if (cmd.equals("/")) {
display("/");
} else if (cmd.equals("=")) {
display("=");
}

// TODO 自動生成されたメソッド・スタブ

}

public static void main(String[] args) {
Calctest frame = new Calctest("電卓");

}
}