JavaExp8:利用GUI实现简易计算器
Posted 咳咳n
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaExp8:利用GUI实现简易计算器相关的知识,希望对你有一定的参考价值。
JavaExp8:利用GUI实现简易计算器
package EXP2020.exp8;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
/**
* @author JMChen
* @date 2020/4/28
*/
/**创建计算器类继承窗口框架,同时实现ActionListener接口*/
class Calculator extends JFrame implements ActionListener
private final String[] str =
"7", "8", "9", "/",
"4", "5", "6", "*",
"1", "2", "3", "+",
"0", ".", "=", "-"
;
JButton[] buttons = new JButton[str.length]; //设置数字数字和操作符的按钮
JButton clear = new JButton("clear"); //以及重置按键
JTextField showResult = new JTextField("0"); //显示结果
//定义构造函数设计出计算器框架
public Calculator()
super("EasyCalculator");
Font font = new Font("Console", Font.BOLD, 20);
//设置头部面板
JPanel pnlHead = new JPanel(new BorderLayout());
pnlHead.add(showResult, BorderLayout.CENTER);
pnlHead.add(clear, BorderLayout.EAST);
showResult.setFont(font);
clear.setFont(font);
//设置中间的面板部分
JPanel pnlBody = new JPanel(new GridLayout(4, 4));
//将按钮组件加入面板
for (int i = 0; i < str.length; i++)
buttons[i] = new JButton(str[i]);
buttons[i].setFont(font);
pnlBody.add(buttons[i]);
//将头部显示计算结果的面板和中下部装数字/操作符按钮的面板加到一个大容器中
getContentPane().setLayout(new BorderLayout());
getContentPane().add("North", pnlHead);
getContentPane().add("Center", pnlBody);
//注册监听器
for (int i = 0; i < str.length; i++)
buttons[i].addActionListener(this);
clear.addActionListener(this);
showResult.addActionListener(this);
//设置窗口属性
setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
setSize(400, 600);
setLocation(1000, 300);
setVisible(true);
//重写接口的方法,分别调用处理按键为清空、数字、操作符的方法
public void actionPerformed(ActionEvent e)
Object target = e.getSource();//得到事件发生的对象源
String cmd = e.getActionCommand();
String patten = "0123456789.";
if (target == clear) handleClear();
else if (patten.indexOf(cmd) > 0)
handleNumber(cmd);
else
handleOperation(cmd);
boolean isFirstDigit = true; //按完按钮后的状态
double result = 0; //记录下当前结果
String operation = "="; //记录上次运算的符号
//如果是对=按钮的点击操作,则我们需要得到上次动作命令的信息,
// 因为本次事件中只能得到按钮标签的信息= 和 按钮动作命令名称=,
// 无法得到上次执行的到底是+还是-还是*还是/操作,所以我们需要单独定义一个属性用来记录动作命令名称的信息
//处理数字
public void handleNumber(String cmd)
//如果是第一次输入数字,就把数字显示出来
if (isFirstDigit)
showResult.setText(cmd);
//否则把面板已经有的加上当前的
else if (!cmd.equals("."))
showResult.setText(showResult.getText() + cmd);
//如果输入的是小数点,且原来的没有小数点,就把小数点加到显示面板上去
else if (showResult.getText().indexOf(".") < 0)
showResult.setText(showResult.getText() + ".");
isFirstDigit = false;
//处理清空
public void handleClear()
showResult.setText("0");
isFirstDigit = true;
operation = "0";
result = 0;
//处理操作符
public void handleOperation(String cmd)
//把字符串转化为实数计算
double number = Double.valueOf(showResult.getText());
if (operation.equals("+"))
result += number;
else if (operation.equals("-"))
result -= number;
else if (operation.equals("*"))
result *= number;
else if (operation.equals("/"))
result /= number;
else if (operation.equals("="))
result = number;
//显示结果
showResult.setText(String.valueOf(result));
operation = cmd; //记录下上一个结果
isFirstDigit = true; //准备接受一个新的数字的状态
/**
* 主测试类
*/
public class MyCalculator
public static void main(String[] args)
Calculator calculator = new Calculator();
基本的四则运算功能是可以实现的,但是不够完善,还是有些缺陷。
以上是关于JavaExp8:利用GUI实现简易计算器的主要内容,如果未能解决你的问题,请参考以下文章