废话不说,直接上界面原图
接下来就是源码,大家直接复制粘贴就可以运行的了。
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();
}
}
如果大家还有什么不懂,可以私聊问我。