一、实例目的
本实例通过创建计算器,使读者熟悉界面的布局和事件处理,同时练习编写程序逻辑。目标是实现一个能进行数据四则运算的简单计算器。
二、界面设计
三、主要算法
- 判断数据的输入和完成情况。
- 判断符号位的输入。
- 判断等号,输出计算结果。
四、代码实现
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class Calc extends JFrame implements ActionListener {
int i;
// 设置数值的标志位
boolean isFirstDigit = true; // 第一个数值
double number = 0.0;
// 将计算器上的数字和符号加入到数组中
private final String[] str = {"7", "8", "9", "/", "4", "5",
"6", "*", "1", "2", "3", "-", ".", "0", "=", "+"};
// 创建Button数组
JButton[] buttons = new JButton[str.length];
// For cancel or reset.
JButton reset = new JButton("CE");
// 结果显示的文本框
JTextField result = new JTextField("0");
public Calc() {
super("简易计算器");
// 界面上添加第一个面板,并设置为网格布局
JPanel panel1 = new JPanel(new GridLayout(4, 4));
for (int i = 0; i < str.length; i++) {
buttons[i] = new JButton(str[i]);
buttons[i].setFont(new Font("Serif", Font.BOLD, 18));
panel1.add(buttons[i]);//按钮加入到面板1中
}
reset.setFont(new Font("Serif", Font.BOLD, 18));
result.setFont(new Font("Serif", Font.BOLD, 24));
// 界面上添加第2个面板
JPanel panel2 = new JPanel(new BorderLayout());
panel2.add("Center", result);
panel2.add("East", reset);
// 两个面板在JFrame上的布局
this.getContentPane().setLayout(new BorderLayout());
this.getContentPane().add("North", panel2);
this.getContentPane().add("Center", panel1);
// 为所有按钮添加事件监听器
for (int i = 0; i < str.length; i++) {
buttons[i].addActionListener(this);
}
// 为“重置”按钮添加事件监听器
reset.addActionListener(this);
// 为“显示”按钮添加事件监听器
result.addActionListener(this);
// 窗口增加关闭按钮
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
// 设置窗口大小
this.setBounds(400, 400, 400, 400);
this.setResizable(false);
// 使窗口居中
this.setVisible(true);
}
public void actionPerformed(ActionEvent e) {
Object OB = e.getSource();
String command = e.getActionCommand();// 获得事件源上的文字
if (OB == reset) {
ChuliReset();// 处理reset事件的方法
} else if ("0123456789.".indexOf(command) > 0) {
ChuliNumber(command);// 处理数字按钮事件的方法
} else {
ChuliOperator(command);// 处理符号事件的方法
}
}
public void ChuliNumber(String value) {
if (isFirstDigit) {
result.setText(value);
} else if ((value.equals(".")) && (result.getText().indexOf(".") < 0)) {
result.setText(result.getText() + ".");
} else if (!value.equals(".")) {
result.setText(result.getText() + value);
}
isFirstDigit = false;
}
// 重置计算器
public void ChuliReset() {
result.setText("0");
number = 0.0;
isFirstDigit = true;
}
String operator = "";
// 处理运算符
public void ChuliOperator(String value) {
if (value.equals("+")) {
String text = result.getText().trim();
if (!text.isEmpty()) {
number = Double.valueOf(result.getText());
operator = "+";
isFirstDigit = false;
result.setText("");
}else {
try {
// 提示用户输入有效数字
JOptionPane.showMessageDialog(null, "请输入有效数字");
}finally {
result.setText("0");
}
}
} else if (value.equals("-")) {
String text = result.getText().trim();
if (!text.isEmpty()) {
number = Double.valueOf(result.getText());
operator = "-";
isFirstDigit = false;
result.setText("");
}else {
try {
// 提示用户输入有效数字
JOptionPane.showMessageDialog(null, "请输入有效数字");
}finally {
result.setText("0");
}
}
} else if (value.equals("*")) {
String text = result.getText().trim();
if (!text.isEmpty()) {
number = Double.valueOf(result.getText());
operator = "*";
isFirstDigit = false;
result.setText("");
}else {
try {
// 提示用户输入有效数字
JOptionPane.showMessageDialog(null, "请输入有效数字");
}finally {
result.setText("0");
}
}
} else if (value.equals("/")) {
String text = result.getText().trim();
if (!text.isEmpty()) {
number = Double.valueOf(result.getText());
operator = "/";
isFirstDigit = false;
result.setText("");
}else {
try {
// 提示用户输入有效数字
JOptionPane.showMessageDialog(null, "请输入有效数字");
}finally {
result.setText("0");
}
}
} else if (value.equals("=")) {
String text = result.getText().trim();
if (!text.isEmpty()){
double secondNumber = Double.valueOf(text);
if (operator.equals("+")) {
number += Double.valueOf(result.getText());
}
if (operator.equals("-")) {
number -= Double.valueOf(result.getText());
}
if (operator.equals("*")) {
number *= Double.valueOf(result.getText());
}
if (operator.equals("/")) {
number /= Double.valueOf(result.getText());
}
result.setText(String.valueOf(number));
}else {
try {
// 提示用户输入有效数字
JOptionPane.showMessageDialog(null, "请输入有效数字");
}finally {
result.setText("0");
}
}
isFirstDigit = true;
}
}
public static void main(String[] args) {
new Calc();
}
}
result.setText("0");
}
}
isFirstDigit = true;
}
}
public static void main(String[] args) {
new Calc();
}
}
此Java程序通过Swing库实现了一个简单的图形化计算器,具备基本的四则运算功能,通过对按钮点击事件的处理来实现相应的计算逻辑。