JAVA GUI实现简单计算器

实现思路

  1. 初始化窗口
  2. 实现计算器页面布局
  3. 添加各组件
  4. 添加数字按钮监听事件
  5. 添加操作符按钮监听事件
  6. 添加等号按钮监听事件
  7. 添加监听事件实现复位

计算器截图

在这里插入图片描述

代码

导入包

import java.awt.*;
import javax.swing.*;
import java.awt.event.*;

主函数

public class Main {
    public static void main(String[] args) {
        CalputerFrame calputerFrame=new CalputerFrame();
        calputerFrame.setFrame();
    }
}

界面布局

public class CalputerFrame extends Frame{

    String logic; //操作符状态
    String num1="",num2=""; //存储两位操作数

    //定义
    Panel panel1 = new Panel(new GridLayout(1,1));
    Panel panel2 = new Panel(new GridLayout(4,4));
    JTextField jTextField = new JTextField("0");
    Button button0 = new Button("0");
    Button button1 = new Button("1");
    Button button2 = new Button("2");
    Button button3 = new Button("3");
    Button button4 = new Button("4");
    Button button5 = new Button("5");
    Button button6 = new Button("6");
    Button button7 = new Button("7");
    Button button8 = new Button("8");
    Button button9 = new Button("9");
    Button buttonA = new Button("+");
    Button buttonB = new Button("-");
    Button buttonC = new Button("*");
    Button buttonD = new Button("/");
    Button buttonE = new Button("=");
    Button buttonF = new Button("C");

    public void setFrame(){
        //窗口初始化
        Frame frame = new Frame("Calculation");
        frame.setBounds(100,100,300,250); //设置位置及大小
        frame.setLayout(null); //布局
        frame.setVisible(true); //设置可见

        //panel
        /*
          页面分为上下两大部分
          输入输出框TextField
          按钮部分
         */
        panel1.setBounds(30,40,240,30);
        panel2.setBounds(10,90,280,150);
        frame.add(panel1); //添加面板
        frame.add(panel2);

        //TextField
        jTextField.setHorizontalAlignment(SwingConstants.RIGHT); //右对齐
        jTextField.setEditable(false); //设置只读
        panel1.add(jTextField);

        //数字区
        /*
          按钮区域使用GridLayout布局
          实现 4*4 网格页面
         */
        //设置颜色
        buttonF.setForeground(Color.blue);
        buttonE.setForeground(Color.blue);
        buttonA.setForeground(Color.red);
        buttonB.setForeground(Color.red);
        buttonC.setForeground(Color.red);
        buttonD.setForeground(Color.red);
        //添加按钮
        panel2.add(buttonF);
        panel2.add(button0);
        panel2.add(buttonE);
        panel2.add(buttonA);
        panel2.add(button1);
        panel2.add(button2);
        panel2.add(button3);
        panel2.add(buttonB);
        panel2.add(button4);
        panel2.add(button5);
        panel2.add(button6);
        panel2.add(buttonC);
        panel2.add(button7);
        panel2.add(button8);
        panel2.add(button9);
        panel2.add(buttonD);

        //数字监听
        NumActionListener numListener = new NumActionListener(this);
        button0.addActionListener(numListener);
        button1.addActionListener(numListener);
        button2.addActionListener(numListener);
        button3.addActionListener(numListener);
        button4.addActionListener(numListener);
        button5.addActionListener(numListener);
        button6.addActionListener(numListener);
        button7.addActionListener(numListener);
        button8.addActionListener(numListener);
        button9.addActionListener(numListener);

        //操作符监听
        OpActionListener opListener = new OpActionListener(this);
        buttonA.addActionListener(opListener);
        buttonB.addActionListener(opListener);
        buttonC.addActionListener(opListener);
        buttonD.addActionListener(opListener);

        //等号监听
        buttonE.addActionListener(new EqActionListener(this));

        //复位监听
        buttonF.addActionListener(new ResterListener(this));

        //关闭窗口
        frame.addWindowListener(new WindowAdapter() {
            @Override
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
    }
}

数字按钮监听事件

public class NumActionListener implements ActionListener {

    CalputerFrame calputerFrame;
    public NumActionListener(CalputerFrame calputerFrame){
        this.calputerFrame=calputerFrame;
    }

    /**
     * 数字按钮监听事件
     * 1.获取按钮label 即相应数字
     * 2.拼接字符串
     * 3.保存该数并显示在TextField中
     */
    @Override
    public void actionPerformed(ActionEvent e) {
        Button button = (Button) e.getSource();
        String btntext = button.getLabel();
        //第2位操作数
        if (calputerFrame.logic!=null&&!"".equals(calputerFrame.logic)) {
            calputerFrame.num2=calputerFrame.num2+btntext ; //拼接字符串
            int number = Integer.parseInt(calputerFrame.num2); //转换为数字
            calputerFrame.jTextField.setText(Integer.toString(number)); //显示TextField
        }
        //第1位操作数
        else {
            calputerFrame.num1= calputerFrame.num1+btntext ;
            calputerFrame.jTextField.setText(calputerFrame.num1);
            int number = Integer.parseInt(calputerFrame.num1);
            calputerFrame.jTextField.setText(Integer.toString(number));
        }
    }
}

操作符按钮监听事件

public class OpActionListener implements ActionListener {

    CalputerFrame calputerFrame;
    public OpActionListener(CalputerFrame calputerFrame) {
        this.calputerFrame = calputerFrame;
    }

    /**
     * 操作符按钮监听事件
     * 1.logic保存获取的操作符
     */
    @Override
    public void actionPerformed(ActionEvent e) {
        Button button = (Button) e.getSource();
        calputerFrame.logic = button.getLabel(); //获取并修改logic 保存操作符
    }
}

等号按钮监听事件

public class EqActionListener implements ActionListener {

    CalputerFrame calputerFrame;
    public EqActionListener(CalputerFrame calputerFrame) {
        this.calputerFrame = calputerFrame;
    }

    /**
     * 等号监听事件
     * 1.将操作数转换为数字
     * 2.判断运算符并作出运算
     * 3.设置TextField 显示结果
     * 4.清空操作符及操作数
     */
    @Override
    public void actionPerformed(ActionEvent e) {
        if (calputerFrame.num1!=null&&!"".equals(calputerFrame.num1)&&calputerFrame.num2!=null&&!"".equals(calputerFrame.num2)) {
            int number1 = Integer.parseInt(calputerFrame.num1); //两数不为空时转换为数字
            int number2 = Integer.parseInt(calputerFrame.num2);
            String sum = "";
            switch (calputerFrame.logic) {
                case "+":sum=number1+number2+"";break;
                case "-":sum=number1-number2+"";break;
                case "*":sum=number1*number2+"";break;
                case "/":sum= (double) number1 / (double) number2 +"";break; //(double)强制类型转换
                default:break;
            }
            calputerFrame.jTextField.setText(sum); //TextField显示结果
            calputerFrame.logic=""; //清空状态
            calputerFrame.num1="";
            calputerFrame.num2="";
        }
    }
}

复位按钮监听事件

public class ResterListener implements ActionListener {

    CalputerFrame calputerFrame;
    public ResterListener(CalputerFrame calputerFrame) {
        this.calputerFrame = calputerFrame;
    }

    /**
     * 复位监听事件
     * 1.TextField显示“0”
     * 2.设置各状态为初始状态
     */
    @Override
    public void actionPerformed(ActionEvent e) {
        calputerFrame.jTextField.setText("0");
        calputerFrame.logic="";
        calputerFrame.num1="";
        calputerFrame.num2="";
    }
}

// 代码仅作为本人记录,仅供参考
// 如有任何问题欢迎指正,有任何建议或分歧在不发生争吵的情况下欢迎提出。
// 语法等仅代表个人习惯,非专业人士,不习惯可选择看下一篇文章或仅参考思路,勿喷
// 感谢您的阅读

  • 4
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值