Java GUI 计算器的实现

简介: Java GUI 计算器的实现

Windows系统自带计算器的简单实现
1.布局方式:

整体采用BorderLayout布局方式,分为NORTH和SOUTH两部分。


NORTH部分为一个文本域(JTextArea)。


SOUTH部分采用GridLayout布局,分成6行4列,用来添加按钮。


2.代码结构

代码分为GUI界面的实现和事件的处理两部分。

GUI界面重点为按钮的添加(采用循环方式,可减少代码量)。

事件处理重点是准确获取事件发生源和文本域字符串的获取和设置。


3.代码实现

GUI界面

package com.calculator.exer1;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Calculator extends JFrame {
    JButton jb;
    Calculator(){
        super("计算器");
        setResizable(false);    //设置窗口尺寸不能改变
//        setSize(365,650);
//        setLocation(1000,50);
        setBounds(1000,50,365,650);
        surface();
        setVisible(true);
    }
    public void surface(){
        setLayout(new BorderLayout());  //设置整体布局为BorderLayout
        //NORTH部分
        JPanel topPanel = new JPanel();
        JTextArea jt = new JTextArea("0",5,22);
        jt.setFont(new Font("宋体",Font.BOLD,30));
        jt.setEditable(false);
        topPanel.add(jt);
        add(topPanel,BorderLayout.NORTH);
        //SOUTH部分
        JPanel bottomPanel = new JPanel();
        bottomPanel.setLayout(new GridLayout(6,4,6,6));
        String[] strs = {
                "%","CE","C","Del",
                "1/x","x²","√x","/",
                "7","8","9","*",
                "4","5","6","-",
                "1", "2","3","+",
                "+/_","0",".","="
        };
        Event event = new Event(jt);    //监听器的创建
        for(int i =0;i < strs.length; i++){
            if(strs[i].equals("=")){
                jb = new JButton(strs[i]);
                jb.setBackground(Color.blue);     //设置背景颜色
                jb.setForeground(Color.white);    //设置字体颜色
                jb.setFont(new Font("宋体",Font.BOLD,30));//设置字体参数
                bottomPanel.add(jb);
                jb.addActionListener(event);
            }else{
                jb = new JButton(strs[i]);
                jb.setBackground(Color.white);
                jb.setFont(new Font("宋体",Font.BOLD,20));
                bottomPanel.add(jb);
                jb.addActionListener(event);
            }
        }
        add(bottomPanel);
    }
    public static void main(String[] args) {
        new Calculator();
    }
}

事件处理

package com.calculator.exer1;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class Event implements ActionListener {
    JTextArea jt = new JTextArea();
    StringBuffer sb = new StringBuffer();
    Event(JTextArea jt){
        this.jt = jt;
    }
    @Override
    public void actionPerformed(ActionEvent e) {
        String command = e.getActionCommand();  //返回与此动作相关的命令字符串。
        String temp = jt.getText();
        switch (command){
            case "1": case "2": case "3": case "4": case "5":
            case "6": case "7": case "8": case "9": case "0":
            case "+": case "-": case "*": case "/": case ".":
                sb.append(command);
                jt.setText(sb.toString());
                break;
            case "%": case "CE": case "C":
                sb.setLength(0);
                jt.setText("0");
                break;
            case "Del":
                sb.deleteCharAt(sb.length()-1);
                jt.setText(temp.substring(0,temp.length()-1));  //返回该字符串的子字符串(去除原字符串尾部的一位,从而达到删除最后一位的目的)
                break;
            case "1/x":
                double ans1 = Double.valueOf(jt.getText());
                jt.setText(String.valueOf(1 / ans1));
                sb.setLength(0);
                break;
            case "x²":
                double ans2 = Double.valueOf(jt.getText());
                jt.setText(String.valueOf(Math.pow(ans2,2)));
                sb.setLength(0);
                break;
            case "√x":
                double ans3 = Double.valueOf(jt.getText());
                jt.setText(String.valueOf(Math.pow(ans3,0.5)));
                sb.setLength(0);
                break;
            case "=":
                if (temp.contains("+")) {
                    String[] string = temp.split("\\+"); //分隔字符串
                    double num1 = Double.valueOf(string[0]);
                    double num2 = Double.valueOf(string[1]);
                    jt.setText(String.valueOf(num1 + num2));
                    sb.setLength(0);
                } else if (temp.contains("-")) {
                    String[] string = temp.split("-");
                    double num1 = Double.valueOf(string[0]);
                    double num2 = Double.valueOf(string[1]);
                    jt.setText(String.valueOf(num1 - num2));
                    sb.setLength(0);
                } else if (temp.contains("*")) {
                    String[] string = temp.split("\\*");
                    double num1 = Double.valueOf(string[0]);
                    double num2 = Double.valueOf(string[1]);
                    jt.setText(String.valueOf(num1 * num2));
                    sb.setLength(0);
                } else if (temp.contains("/")) {
                    String[] string = temp.split("\\/");
                    double num1 = Double.valueOf(string[0]);
                    double num2 = Double.valueOf(string[1]);
                    jt.setText(String.valueOf(num1 / num2));
                    sb.setLength(0);
                }
                break;
        }
    }
}

4.最终呈现
64bfc60761274354b10a3fb2f95c470c.png

相关文章
|
1月前
|
小程序 Java 知识图谱
Java 学习笔记 —— BMI & BMR 计算器
这是一个使用 Java 编写的 BMI 与 BMR 计算器小程序,可输入年龄、性别、身高和体重,计算身体质量指数(BMI)和基础代谢率(BMR),并输出健康评估结果。通过该项目,掌握了 Java 的输入处理、数据验证、条件判断、数学运算及格式化输出等基础知识,是 Java 初学者的理想练习项目。
|
前端开发 Oracle Java
Java中的GUI应用开发技术选型
Java中的GUI应用开发技术选型
|
Java Apache Android开发
Java中的GUI界面设计与用户体验优化
Java中的GUI界面设计与用户体验优化
|
前端开发 Java 开发工具
Java GUI编程:跨平台应用的设计与开发
Java GUI编程:跨平台应用的设计与开发
|
Java 数据安全/隐私保护 容器
Java详解:GUI容器组件 | 功能组件
Java详解:GUI容器组件 | 功能组件
225 0
|
Java 容器
Java详解:GUI图形用户界面设计—容器组件及面板布局方式
Java详解:GUI图形用户界面设计—容器组件及面板布局方式
379 0
|
前端开发 Java 开发工具
Java GUI编程:跨平台应用的设计与开发
Java GUI编程:跨平台应用的设计与开发
逆波兰计算器(java)
逆波兰计算器(java)
|
IDE Java 开发工具
Java GUI Testing - JFCUnit Introduce
Java GUI Testing - JFCUnit Introduce
79 0
|
存储 前端开发 Java
Java一分钟之-Java GUI设计原则与模式
本文介绍了Java GUI开发的核心设计原则和模式,包括分层架构(MVC)、组件复用、用户体验和代码示例。强调了MVC模式以提高代码可维护性,组件化设计以增强复用性,以及响应式和简洁界面以提升用户体验。同时,提出了常见问题的避免策略,如布局管理、资源释放和国际化支持,建议开发者遵循这些原则以提升GUI应用质量。
452 3