この電卓のインターフェイスは、対話型インターフェイスやさまざまな入力への応答など、Windows に付属の単純な電卓を模倣しています。メニューバーとメモリーボタンの機能はまだ実装されていません。
次のようにコードをコピーします。
java.awt.Colorをインポートします。
java.awt.Containerをインポートします。
インポートjava.awt.GridLayout;
java.awt.Insetsをインポートします。
インポートjava.awt.event.ActionEvent;
インポート java.awt.event.ActionListener;
javax.swing.JFrameをインポートします。
javax.swing.JButtonをインポートします。
javax.swing.JMenuをインポートします。
インポート javax.swing.JMenuBar;
javax.swing.JMenuItemをインポートします。
javax.swing.JPanelをインポートします。
インポートjavax.swing.JTextField;
インポート javax.swing.SwingConstants;
インポート javax.swing.plaf.basic.BasicBorders;
public class Calculator extends JFrame {
プライベート静的最終ロングシリアルバージョンUID = 1L;
コンテナ c = getContentPane();
StringBuildernumber1 = new StringBuilder("");//最初の数値文字列を格納します
StringBuildernumber2 = new StringBuilder("");//2 番目の数値文字列を格納します
StringBuilder 演算子 = new StringBuilder("");//ストレージ演算子
StringBuilder result = new StringBuilder("");//ストレージ操作の結果
JTextFieldnumbershow = new JTextField("0.");//数値表示領域、初期表示は「0.」です。
public static void main(String[] args) {//メイン メソッド
計算機 c1 = 新しい計算機();
c1.setVisible(true);
}
public Calculator() {// 電卓構築メソッド
setTitle("電卓");
setBounds(100, 100, 260, 245);
setResizable(false);
setLayout(null);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
createMenuBar();//メニューバーを作成
createNumberShow();//数値表示領域を作成
createMemoShow();//メモリ表示を作成
createClearButtons();//Backspace、CE、C などの 3 つのボタンを作成します
createButtonArea();//数字ボタンエリアを作成
}
private void createMenuBar() {//メニューバーを作成するメソッド
JMenuBar メニューバー = new JMenuBar();
setJMenuBar(メニューバー);
JMenu menu1 = new JMenu("編集");
JMenu menu2 = new JMenu("View");
JMenu menu3 = new JMenu("ヘルプ");
メニューバー.add(メニュー1);
メニューバー.add(メニュー2);
メニューバー.add(menu3);
JMenuItem menu1item1 = new JMenuItem("コピー");
JMenuItem menu1item2 = new JMenuItem("貼り付け");
JMenuItem menu2item1 = new JMenuItem("標準タイプ");
JMenuItem menu2item2 = new JMenuItem("科学");
JMenuItem menu2item3 = new JMenuItem("科学的グループ化");
JMenuItem menu3item1 = new JMenuItem("ヘルプ トピック");
JMenuItem menu3item2 = new JMenuItem("電卓について");
menu1.add(menu1item1);
menu1.add(menu1item2);
menu2.add(menu2item1);
menu2.add(menu2item2);
menu2.add(menu2item3);
menu3.add(menu3item1);
menu3.add(menu3item2);
}
private void createNumberShow() {//数値表示領域を作成するメソッド
numbershow.sethorizontalAlignment(JTextField.RIGHT);
数値ショー.setBounds(5, 0, 245, 22);
数値ショー.setEnabled(false);
numbershow.setDisabledTextColor(Color.BLACK);
c.add(numbershow);
}
private void createMemoShow() {//メモリ表示を作成するメソッド
JTextField memoshow = new JTextField();
memoshow.setEditable(false);
memoshow.setBounds(10, 30, 28, 22);
memoshow.setBorder(new BasicBorders.FieldBorder(Color.black,
カラー.ブラック、カラー.ホワイト、カラー.ホワイト));
c.add(メモショー);
}
private void createClearButtons() {// Backspace、CE、C などの 3 つのボタンを作成するメソッド
JButton[] クリアボタン = 新しい JButton[3];
String[] clearbuttontext = { "バックスペース"、"CE"、"C" };
for (int i = 0; i < 3; i++) {
クリアボタン[i] = 新しい JButton();
クリアボタン[i].setText(クリアボタンテキスト[i]);
clearbutton[i].sethorizontalAlignment(SwingConstants.CENTER);
clearbutton[i].setMargin(new Insets(0, 0, 0, 0));
clearbutton[i].setFont(new java.awt.Font("Arial", 0, 9));
クリアボタン[i].setForeground(Color.blue);
クリアボタン[i].setBounds(48 + i * 68, 30, 63, 22);
クリアボタン[i].setForeground(Color.red);
c.add(クリアボタン[i]);
}
clearbutton[0].addActionListener(new ActionListener() {//Backspace ボタンのリスナーを追加します
@オーバーライド
public void actionPerformed(ActionEvent e) {
if (number1.toString().equals("")) {// 入力がなかった場合
showNumber(numbershow, number1);//number1 を表示
} else if (operator.toString().equals("")) {//number1 のみが入力された場合
number1.deleteCharAt(number1.toString().length() - 1); //number1 の最後の文字を削除します。
showNumber(numbershow, number1);//number1 を表示
} else if (number2.toString().equals("")) {//number1 と演算子のみが入力された場合
showNumber(numbershow, number1);//処理なし、number1 を表示します
} else {//number1、演算子、number2 が入力された場合
number2.deleteCharAt(number2.toString().length() - 1); //number2 の最後の文字を削除します。
showNumber(numbershow, number2);//number2 を表示
}
}
});
clearbutton[1].addActionListener(new ActionListener() {//CE ボタンのリスナーを追加します
@オーバーライド
public void actionPerformed(ActionEvent e) {
if (number1.toString().equals("")) {// 入力がなかった場合
showNumber(numbershow, number1);//number1 を表示
} else if (operator.toString().equals("")) {//number1 のみが入力された場合
number1.setLength(0);//number1 をクリア
showNumber(numbershow, number1);//number1 を表示
} else if (number2.toString().equals("")) {//number1 と演算子が入力された場合
showNumber(numbershow,number2);//処理なし、number2 を表示します
} else {//number1、演算子、number2 が入力された場合
number2.setLength(0);//number2 をクリア
showNumber(numbershow, number2);//number2 を表示
}
}
});
clearbutton[2].addActionListener(new ActionListener() {//C ボタンのリスナーを追加します
@オーバーライド
public void actionPerformed(ActionEvent e) {// すべてのストレージをクリアします
数値1.setLength(0);
数値2.setLength(0);
オペレーター.setLength(0);
数値ショー.setText("0.");
result.setLength(0);
}
});
}
private void createButtonArea() {//デジタルボタン領域を作成するメソッド
JPanel ButtonArea = new JPanel();
ButtonArea.setBounds(5, 55, 245, 125);
ButtonArea.setLayout(new GridLayout(4, 6, 5, 5));
c.add(ボタンエリア);
JButton[] 番号ボタン = 新しい JButton[24];
String[]numberbuttontext = { "MC"、"7"、"8"、"9"、"/"、"sqrt"、"MR"、
「4」、「5」、「6」、「*」、「%」、「MS」、「1」、「2」、「3」、「-」、「1/X」、「M+」、
「0」、「+/-」、「.」、「+」、「= };
for (int i = 0; i < 24; i++) {// ループを使用してこれらの 24 個のボタンにラベルを追加します
数値ボタン[i] = 新しい JButton(数値ボタンテキスト[i]);
ButtonArea.add(numberbutton[i]);
if (i % 6 == 0 || i % 6 == 4 || i == 23) {// オペレータ ボタンが赤に設定されています
numberbutton[i].sethorizontalAlignment(SwingConstants.CENTER);
numberbutton[i].setMargin(new Insets(0, 0, 0, 0));
numberbutton[i].setFont(new java.awt.Font("Arial", 0, 9));
numberbutton[i].setForeground(Color.red);
} else {//その他の設定は青色です
numberbutton[i].sethorizontalAlignment(SwingConstants.CENTER);
numberbutton[i].setMargin(new Insets(0, 0, 0, 0));
numberbutton[i].setFont(new java.awt.Font("Arial", 0, 9));
numberbutton[i].setForeground(Color.blue);
}
}
int[]数値 = { 19, 13, 14, 15, 7, 8, 9, 1, 2, 3 };//この配列内の数値は、それぞれ、numberbuttontext 配列内の数値 0 ~ 9 のシリアル番号を表します。
for (int i = 0; i <= 9; i++) { // ループを使用して、0 ~ 9 の 10 個の数字ボタンのリスナーを追加します
最終文字列 str = String.valueOf(i);
numberbutton[numbers[i]].addActionListener(new ActionListener() {//ボタン 0 ~ 9 のリスナーを追加します
@オーバーライド
public void actionPerformed(ActionEvent e) {
if (operator.toString().equals("")) {// 演算子が入力される前
add(number1, str); //number1 の値のみを設定します。
showNumber(numbershow,number1);//number1 の値のみを表示します
} else {// 演算子入力後
add(number2, str);//number2 の値のみを設定します
showNumber(numbershow,number2);//number2 の値のみを表示します
}
}
});
}
numberbutton[20].addActionListener(new ActionListener() { //「+/-」ボタンのリスナーを追加
@オーバーライド
public void actionPerformed(ActionEvent e) {
if (operator.toString().equals("")) {// 演算子が入力される前
add(number1, "+/-");//number1の値のみを設定します
showNumber(numbershow,number1);//number1 の値のみを表示します
} else {// 演算子入力後
add(number2, "+/-");//number2の値のみを設定します
showNumber(numbershow,number2);//number2 の値のみを表示します
}
}
});
numberbutton[21].addActionListener(new ActionListener() { //「.」ボタンのリスナーを追加します
@オーバーライド
public void actionPerformed(ActionEvent e) {
if (operator.toString().equals("")) {// 演算子を入力する前は、number1 の値のみが表示されます
add(数値1, ".");
showNumber(numbershow,number1);
} else {// 演算子を入力すると、number2 の値のみが表示されます
add(数値2, ".");
showNumber(numbershow,number2);
}
}
});
numberbutton[22].addActionListener(new ActionListener() { //「+」ボタンのリスナーを追加
@オーバーライド
public void actionPerformed(ActionEvent e) {
オペレータ.setLength(0);
演算子.append("+");
}
});
numberbutton[16].addActionListener(new ActionListener() { //「-」ボタンのリスナーを追加
@オーバーライド
public void actionPerformed(ActionEvent e) {
オペレーター.setLength(0);
演算子.append("-");
}
});
numberbutton[10].addActionListener(new ActionListener() { //「*」ボタンのリスナーを追加
@オーバーライド
public void actionPerformed(ActionEvent e) {
オペレータ.setLength(0);
演算子.append("*");
}
});
numberbutton[4].addActionListener(new ActionListener() { //「/」ボタンのリスナーを追加
@オーバーライド
public void actionPerformed(ActionEvent e) {
オペレータ.setLength(0);
演算子.append("/");
}
});
numberbutton[23].addActionListener(new ActionListener() { //「=」ボタンのリスナーを追加
@オーバーライド
public void actionPerformed(ActionEvent e) {
if (number1.toString().equals("")) {//number1 が空の場合
showNumber(numbershow,number1);
} else if (operator.toString().equals("")) {//number1 が空ではなく、operator が空の場合
showNumber(numbershow,number1);
} else if (number2.toString().equals("")) {//number1 と演算子が空ではないが、number2 が空の場合
スイッチ (operator.toString()) {
ケース (「+」): {
number2.append(number1.toString());
double d = Double.parseDouble(number1
.toString())
+ Double.parseDouble(number2.toString());
result.setLength(0);
result.append(d);
showNumber(数値表示, 結果);
数値1.setLength(0);
数値1.append(d);
}
壊す;
場合 ("-"): {
number2.append(number1.toString());
double d = Double.parseDouble(number1
.toString())
- Double.parseDouble(number2.toString());
result.setLength(0);
result.append(d);
showNumber(数値表示, 結果);
数値1.setLength(0);
数値1.append(d);
}
壊す;
場合 ("*"): {
number2.append(number1.toString());
double d = Double.parseDouble(number1
.toString())
* Double.parseDouble(number2.toString());
result.setLength(0);
result.append(d);
showNumber(数値表示, 結果);
数値1.setLength(0);
数値1.append(d);
}
壊す;
場合 ("/"): {
number2.append(number1.toString());
double d = Double.parseDouble(number1
.toString())
/Double.parseDouble(number2.toString());
result.setLength(0);
result.append(d);
showNumber(数値表示, 結果);
数値1.setLength(0);
数値1.append(d);
}
壊す;
}
} else {//number1、演算子、number2 が空でない場合
スイッチ (operator.toString()) {
ケース (「+」): {
double d = Double.parseDouble(number1
.toString())
+ Double.parseDouble(number2.toString());
result.setLength(0);
result.append(d);
showNumber(数値表示, 結果);
数値1.setLength(0);
数値1.append(d);
}
壊す;
場合 ("-"): {
double d = Double.parseDouble(number1
.toString())
- Double.parseDouble(number2.toString());
result.setLength(0);
result.append(d);
showNumber(数値表示, 結果);
数値1.setLength(0);
数値1.append(d);
}
壊す;
場合 ("*"): {
double d = Double.parseDouble(number1
.toString())
* Double.parseDouble(number2.toString());
result.setLength(0);
result.append(d);
showNumber(数値表示, 結果);
数値1.setLength(0);
数値1.append(d);
}
壊す;
場合 ("/"): {
double d = Double.parseDouble(number1
.toString())
/Double.parseDouble(number2.toString());
result.setLength(0);
result.append(d);
showNumber(数値表示, 結果);
数値1.setLength(0);
数値1.append(d);
}
壊す;
}
}
}
});
numberbutton[17].addActionListener(new ActionListener() { //「1/x」ボタンのリスナーを追加
@オーバーライド
public void actionPerformed(ActionEvent e) {
if (number1.toString().equals("")) {//number1 が入力されていない場合
numbershow.setText("除数をゼロにすることはできません");
} else if (operator.toString().equals("")) {//number1 が入力されましたが、演算子が入力されませんでした
if (Double.parseDouble(number1.toString()) == 0) {//number1 の値が 0 の場合
numbershow.setText("除数をゼロにすることはできません");
} else {//number1 の値がゼロでない場合
double d = 1 / (Double.parseDouble(number1
.toString()));
数値1.setLength(0);
number1.append(d);//number1 の値を開いて保存します
showNumber(numbershow,number1);
}
} else if (number2.toString().equals("")) {//number1 と演算子は入力されていますが、number2 は入力されていません
double d = 1 / (Double.parseDouble(number1
.toString()));
number2.append(d);//number1 の値を開いて保存します
showNumber(numbershow,number2);
} else {//数値 1、演算子、数値 2 を入力
double d = 1 / (Double.parseDouble(number2
.toString()));
数値2.setLength(0);
number2.append(d);//number2 の値を開いて保存します
showNumber(numbershow,number2);
}
}
});
numberbutton[11].addActionListener(new ActionListener() { //「%」ボタンのリスナーを追加
@オーバーライド
public void actionPerformed(ActionEvent e) {
// 一時的に空いています
}
});
numberbutton[5].addActionListener(new ActionListener() { //「sqrt」ボタンのリスナーを追加
@オーバーライド
public void actionPerformed(ActionEvent e) {
if (number1.toString().equals("")) {//number1 が入力されていない場合
showNumber(numbershow,number1);
} else if (operator.toString().equals("")) {//number1 が入力されましたが、演算子が入力されませんでした
if (Double.parseDouble(number1.toString()) < 0) {//number1 は 0 未満です
numbershow.setText("関数の入力が無効です");
} else {// number1 は 0 より大きいです
double d = Math.sqrt(Double.parseDouble(number1
.toString()));
数値1.setLength(0);
number1.append(d);//number1 の値を開いて保存します
showNumber(numbershow,number1);
}
} else if (number2.toString().equals("")) {//number1 と演算子は入力されていますが、number2 は入力されていません
double d = Math.sqrt(Double.parseDouble(number1
.toString()));
number2.append(d);//number1 の値を開いて保存します
showNumber(numbershow,number2);
} else {//数値 1、演算子、数値 2 を入力
double d = Math.sqrt(Double.parseDouble(number2
.toString()));
数値2.setLength(0);
number2.append(d);//number2 の値を開いて保存します
showNumber(numbershow,number2);
}
}
});
}
public void add(StringBuilder s1, String s2) {// ボタン入力後にデジタル文字列を変更するメソッドを定義
if (s2.equals("+/-")) {// "+/-" を入力した後のデジタル文字列の変更を定義します
if (s1.toString().equals("") || s1.toString().equals("0")) {// 数値文字列が空または 0 の場合、変更は行われません
s1.append("");
} else {// 数値文字列が空でも 0 でもない場合は、数値文字列の前に「-」文字を追加または削除します
if (s1.toString().startsWith("-")) {
s1.deleteCharAt(0);
} それ以外 {
s1.insert(0, "-");
}
}
}
if (s2.equals(".")) {// 「.」入力後のデジタル文字列の変更を定義します。
if (s1.toString().indexOf(".") == -1) {// 数値文字列に「.」文字が含まれているかどうかを確認し、含まれていない場合は次のコードを実行します
if (s1.toString().equals("")) {// 数値文字列が空の場合は、数値文字列を「0」に設定します。
s1.setLength(0);
s1.append("0.");
} それ以外 {
s1.append(".");
}
} else {// 存在する場合、変化は起こりません
s1.append("");
}
}
if (s2.equals("0")) {// 「0」入力後のデジタル文字列の変更を定義
if (s1.toString().equals("0")) {// 数値文字列が「0」の場合は変化しません
s1.append("");
} else {// 数値文字列が「0」の場合、文字列の後ろに「0」を追加します
s1.append("0");
}
}
for (int i = 1; i < 10; i++) {//ループを通じて、1 ~ 9 を入力した後のデジタル文字列の変更を定義します
文字列 str = String.valueOf(i);
if (s2.equals(str)) {// 1~9を入力した後のデジタル文字列の変更を定義
if (s1.toString().equals("0")) {
s1.setLength(0);
s1.append(str);
} それ以外
s1.append(str);
}
}
}
public void showNumber(JTextField j, StringBuilder s) {//数値表示領域に数値文字列を表示する方法を定義するメソッド
if (s.toString().equals("") == true || s.toString().equals("0") == true) {
j.setText("0.");
else if (s.toString().indexOf(".") == -1) {
j.setText(s.toString() + ".");
} それ以外 {
j.setText(s.toString());
}
}
}