廢話不說,直接上界面原圖
接下來就是源碼,大家直接複製粘貼就可以運行的了。
package calculator;
import java.awt.BorderLayout;
import java.awt.Font;
import java.awt.GridLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
/**
* 實現一個簡易的計算器
* 二數四則運算
* @author 不忘初心
*
*/
public class Calculator extends JFrame implements ActionListener {
// 定義界面上的按鈕控件
final String JButtonName[] = { "7", "8", "9", "+", "4", "5", "6", "-", "1", "2", "3", "×", ".", "0", "=", "÷" };
// 定義字體內容
Font font = new Font("宋體", Font.PLAIN, 17);
// 定義面板,有二個面板 ,第一個就是 輸入框和ce ,第二個就是下面的操作的按鈕
JPanel p1, p2;
// 創建按鈕數組
JButton Jb[] = new JButton[JButtonName.length];
// 創建CE
JButton ce;
// 創建輸入框
JTextField tf;
// 創建構造方法,使用繼承了JFrame後,界面的初始化是需要在無參構造方法中實現
public Calculator() {
// 爲每一個按鈕進行點擊事件
for (int i = 0; i < JButtonName.length; i++) {
// 實例化並聲明按鈕名稱
Jb[i] = new JButton("" + JButtonName[i]);
// 設置字體
Jb[i].setFont(font);
// 設置按鈕透明
Jb[i].setContentAreaFilled(false);
Jb[i].addActionListener(this);
}
// 設置成4X4的布 局 網格佈局
p1 = new JPanel(new GridLayout(4, 4));
// 把按鈕添加到網格佈局中
for (int i = 0; i < JButtonName.length; i++) {
p1.add(Jb[i]);
}
// 設置第2個面板
p2 = new JPanel(new BorderLayout());
// 爲ce按鈕賦值
ce = new JButton("CE");
ce.setContentAreaFilled(false);
// 爲CE按鈕設置監聽器
ce.addActionListener(this);
// 輸入框
tf = new JTextField("0");
tf.setFont(font);
p2.add(ce, "East");
p2.add(tf, "Center");
this.add(p2, BorderLayout.NORTH);
this.add(p1, BorderLayout.CENTER);
this.setVisible(true);
this.setTitle("簡易計算器");
//使窗口居中
int windowsWedth = 280;
int windowsHeight = 300;
int width = Toolkit.getDefaultToolkit().getScreenSize().width;
int height = Toolkit.getDefaultToolkit().getScreenSize().height;
this.setBounds((width - windowsWedth) / 2,
(height - windowsHeight) / 2, windowsWedth, windowsHeight);
}
public void actionPerformed(ActionEvent e) {
// 返回的是按的按鈕名
String label = e.getActionCommand();
if (e.getSource() == ce)
Reset();
else if ("0123456789.".indexOf(label) >= 0)
RunNumber(label);
else
RunOperator(label);
}
// 是否是第一次按數字
boolean isFirstDigit = true;
public void RunNumber(String key) {
if (isFirstDigit)
tf.setText(key);// 如果是第一次按數字,覆蓋文本框的內容
else if ((key.equals(".")) && (tf.getText().indexOf(".") < 0))// 按了點並且文本框中之前沒有點
tf.setText(tf.getText() + ".");//如果按了多個".",只顯示一個
else if (!key.equals("."))
tf.setText(tf.getText() + key);// 疊加顯示在文本框中
isFirstDigit = false;
}
double number = 0.0;
String operator = "=";
public void Reset() {// 重置
tf.setText("0");
isFirstDigit = true;
operator = "=";
}
public void RunOperator(String key) {
if (operator.equals("+"))
// 將文本框中的字符串強制轉化爲Double類型
number += Double.valueOf(tf.getText());
else if (operator.equals("-"))
number -= Double.valueOf(tf.getText());
else if (operator.equals("×"))
number *= Double.valueOf(tf.getText());
else if (operator.equals("÷")) {
number /= Double.valueOf(tf.getText());
} else if (operator.equals("="))
number = Double.valueOf(tf.getText());
tf.setText(String.valueOf(number));
operator = key;
isFirstDigit = true;
}
public static void main(String[] args) {
new Calculator();
}
}
如果大家還有什麼不懂,可以私聊問我。