案例7:图形界面计算器
以下是一个Java图形界面计算器的案例,它展示了如何使用Java Swing库来创建一个简单的计算器应用程序。这个计算器具有基本的加减乘除功能,以及开平方和清零功能。
一、设计目标
实现简单的加、减、乘、除等双目运算。
实现开平方等单目运算。
提供清零功能,用于清空文本框。
二、界面设计
创建一个主窗口(JFrame)。
在窗口中添加一个文本框(JTextField),用于显示输入和计算结果。
在窗口中添加一个面板(JPanel),并使用GridLayout布局管理器来排列按钮。
在面板上添加数字按钮(0-9)、运算符按钮(+、-、*、/)、开平方按钮(sqrt)、小数点按钮(.)和等号按钮(=),以及清零按钮(C)。
三、功能实现
- 创建主窗口和组件:
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Calculator extends JFrame implements ActionListener {
private JTextField textField; // 输入文本框 private JPanel panel; // 面板 private JButton[] buttons; // 按钮数组 public Calculator() { setTitle("计算器"); setSize(300, 400); setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setLocationRelativeTo(null); // 窗口居中 textField = new JTextField(); textField.setEditable(false); // 禁止直接编辑文本框 textField.setHorizontalAlignment(JTextField.RIGHT); // 文本右对齐 textField.setFont(new Font("Arial", Font.BOLD, 20)); // 设置字体 panel = new JPanel(); panel.setLayout(new GridLayout(5, 4, 5, 5)); // 5行4列,间距5 String[] buttonLabels = { "7", "8", "9", "/", "4", "5", "6", "*", "1", "2", "3", "-", "0", ".", "sqrt", "+", "C", "=", "", "" // C为清零,=为等号,后两个空位用于布局 }; buttons = new JButton[buttonLabels.length]; for (int i = 0; i < buttonLabels.length; i++) { buttons[i] = new JButton(buttonLabels[i]); buttons[i].addActionListener(this); // 添加事件监听器 panel.add(buttons[i]); } add(textField, BorderLayout.NORTH); // 文本框放在北边 add(panel, BorderLayout.CENTER); // 面板放在中间 }- 实现事件处理:
@Override
public void actionPerformed(ActionEvent e) { String command = e.getActionCommand(); StringBuilder input = new StringBuilder(textField.getText()); switch (command) { case "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ".": input.append(command); break; case "+", "-", "*", "/", "sqrt": if (!input.toString().trim().isEmpty()) { input.append(" ").append(command).append(" "); } else { input.append(command).append(" "); // 开平方前需要空格以区分单目运算 } break; case "C": input.setLength(0); // 清空输入 break; case "=": try { String result = evaluate(input.toString()); textField.setText(result); } catch (Exception ex) { textField.setText("错误: " + ex.getMessage()); } input.setLength(0); // 清空输入以便下次计算 break; } textField.setText(input.toString()); } // 计算表达式的结果 private String evaluate(String expression) throws Exception { // 简单的表达式解析和计算逻辑,这里使用栈来处理 // 注意:这个实现仅用于演示,并未处理所有可能的错误情况 String[] tokens = expression.split(" "); Stack<Double> stack = new Stack<>(); for (String token : tokens) { if (!token.isEmpty()) { if (isOperator(token)) { double b = stack.pop(); double a = stack.pop(); stack.push(calculate(a, b, token)); } else if (token.equals("sqrt")) { double a = stack.pop(); stack.push(Math.sqrt(a)); } else { stack.push(Double.parseDouble(token)); } } } return stack.pop().toString(); } // 判断是否为运算符 private boolean isOperator(String token) { return token.equals("+") || token.equals("-") || token.equals("*") || token.equals("/"); } // 执行基本的算术运算 private double calculate(double a, double b, String operator) throws Exception { switch (operator) { case "+": return a + b; case "-": return a - b; case "*": return a * b; case "/": if (b == 0) throw new Exception("被除数不能为0"); return a / b; default: throw new Exception("未知运算符: " + operator); } }- 启动应用程序:
public static void main(String[] args) {
SwingUtilities.invokeLater(() -> { Calculator calculator = new Calculator(); calculator.setVisible(true); }); }}
四、功能测试
运行程序,确保窗口正常显示。
输入数字和运算符,点击等号查看计算结果。
测试开平方功能。
测试清零功能。
这个案例展示了如何使用Java Swing库来创建一个基本的图形界面计算器。你可以根据需要进一步扩展和完善这个计算器,例如添加更多的数学函数、改进错误处理、优化用户界面等。
