概述
閑來無事,利用java awt庫寫個簡單的計算器玩玩。
實現
pom.xml
<dependencies><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.26</version></dependency></dependencies>
com.lovehena.MyCalculator
package com.lovehena;import cn.hutool.core.util.StrUtil;import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;public class MyCalculator {private static String firstNum;private static String operator;private static TextField textField;public static void main(String[] args) {// 1 構建窗口Frame frame = new Frame("計算器");frame.addWindowListener(new ExitWindowAdapter()); // 綁定窗口退出事件// 構建panel+textfieldPanel p1 = new Panel();textField = new TextField(30);p1.add(textField);// 構建網格布局的panel 網格3行5列 每一格中都是按鈕Panel p2 = new Panel();p2.setLayout(new GridLayout(4, 5, 10, 10));for (int i = 0; i < 10; i++) {Button btn = new Button(i + "");btn.addActionListener(new NumberActionListener());p2.add(btn);}initOperatorBtn(p2);// 2個 panel放入窗口中frame.add(p1, BorderLayout.NORTH); // frame默認是BorderLayoutframe.add(p2, BorderLayout.CENTER);// 寬高自適應frame.pack();frame.setVisible(true);}/*** 向panel中添加 + - * / clear = 6個按鈕 并綁定點擊事件*/private static void initOperatorBtn(Panel panel) {String[] otherBtns = {"clear", "="};String[] operators = {"+", "-", "*", "/"};//添加 clear = 2個按鈕到panel中 并綁定點擊事件for (int i = 0; i < otherBtns.length; i++) {Button btn = new Button(otherBtns[i]);if (otherBtns[i].equals("=")) {// = 號的點擊事件btn.addActionListener(new EqualsActionListener());} else if (otherBtns[i].equals("clear")) {// 清空按鈕點擊邏輯btn.addActionListener(new ClearActionListener());}panel.add(btn);}// + - * / 4個按鈕添加到panel中 并綁定點擊事件for (int i = 0; i < operators.length; i++) {Button btn = new Button(operators[i]);btn.addActionListener(new OperatorActionListener(operators[i]));panel.add(btn);}}private static class NumberActionListener implements ActionListener {@Overridepublic void actionPerformed(ActionEvent e) {textField.setText(textField.getText() + e.getActionCommand()); // e.getActionCommand()就是點擊的數字}}private static class OperatorActionListener implements ActionListener {private String currentOperator;public OperatorActionListener(String currentOperator) {this.currentOperator = currentOperator;}@Overridepublic void actionPerformed(ActionEvent e) {firstNum = textField.getText();operator = this.currentOperator;textField.setText("");}}private static class ClearActionListener implements ActionListener {@Overridepublic void actionPerformed(ActionEvent e) {firstNum = "";operator = "";textField.setText("");}}private static class EqualsActionListener implements ActionListener {@Overridepublic void actionPerformed(ActionEvent e) {// 獲取第二個數字String secondNumber = textField.getText();if (StrUtil.isBlank(firstNum) || StrUtil.isBlank(secondNumber)) return;try {double num1 = Double.parseDouble(firstNum);double num2 = Double.parseDouble(secondNumber);double result = 0;// 根據操作符執行計算switch (operator) {case "+":result = num1 + num2;break;case "-":result = num1 - num2;break;case "*":result = num1 * num2;break;case "/":result = num1 / num2;break;default:textField.setText("未知操作符");return;}// 顯示結果textField.setText(String.valueOf(result));} catch (NumberFormatException ex) {textField.setText("輸入錯誤");}// 重置狀態firstNum = "";operator = "";}}private static class ExitWindowAdapter extends WindowAdapter {@Overridepublic void windowClosing(WindowEvent e) {System.exit(0); // 點擊打開的窗口的右上角的x號時退出}}
}
代碼在這。
我就不過多講解了,源碼中寫了些注釋。
最后
好了,如果對你有幫助,歡迎點個免費的贊哦。