java计算器添加显示器_软帝学院教你用java编写计算器(二)

软帝学院教你用java编写计算器(二)

import java.awt.BorderLayout;

import java.awt.GridBagLayout;

import java.awt.GridLayout;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.JTextField;

public class Calculator extends JFrame implements ActionListener {

JTextField result;

int calculate_type=0;

Calculator(){

JPanel jp;

JButton jb;

jp= new JPanel();

jp.setLayout(new BorderLayout());

result = new JTextField();

result.setEditable(false);

jp.add(result,BorderLayout.NORTH);//窗口中间添加数字按钮、清空、退格、小数点按钮

JPanel keyPanel = new JPanel();

keyPanel.setLayout(new GridLayout(5,3));

jb = new JButton("1");

keyPanel.add(jb);

jb.addActionListener(this);

jb = new JButton("2");

keyPanel.add(jb);

jb.addActionListener(this);

jb = new JButton("3");

keyPanel.add(jb);

jb.addActionListener(this);

jb = new JButton("4");

keyPanel.add(jb);

jb.addActionListener(this);

jb = new JButton("5");

keyPanel.add(jb);

jb.addActionListener(this);

jb = new JButton("6");

keyPanel.add(jb);

jb.addActionListener(this);

jb = new JButton("7");

keyPanel.add(jb);

jb.addActionListener(this);

jb = new JButton("8");

keyPanel.add(jb);

jb.addActionListener(this);

jb = new JButton("9");

keyPanel.add(jb);

jb.addActionListener(this);

jb = new JButton("0");

keyPanel.add(jb);

jb.addActionListener(this);

jb = new JButton("C");

keyPanel.add(jb);

jb.addActionListener(this);

jb = new JButton("退格");

keyPanel.add(jb);

jb.addActionListener(this);

jb = new JButton(".");

keyPanel.add(jb);

jb.addActionListener(this);

jb = new JButton("=");

keyPanel.add(jb);

jb.addActionListener(this);

jb = new JButton("CE");

keyPanel.add(jb);

jb.addActionListener(this);

jp.add(keyPanel,BorderLayout.CENTER);

JPanel operatorpJPanel = new JPanel();

operatorpJPanel.setLayout(new GridLayout(4,1));

jb = new JButton("+");

operatorpJPanel.add(jb);

jb.addActionListener(this);

jb = new JButton("-");

operatorpJPanel.add(jb);

jb.addActionListener(this);

jb = new JButton("*");

operatorpJPanel.add(jb);

jb.addActionListener(this);

jb = new JButton("/");

operatorpJPanel.add(jb);

jb.addActionListener(this);

jp.add(operatorpJPanel,BorderLayout.EAST);

setContentPane(jp);

setTitle("计算器");

setSize(340,260);

setVisible(true);

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

}

public void  actionPerformed(ActionEvent e){

String cmd =e.getActionCommand();

String c =result.getText();

if (cmd.equals("C")) {

result.setText("");

}

else if (cmd.equals("退格")) {

if (c.length()>0) {

String slast = c.substring(c.length() -1);

if (slast.equals("+") || slast.equals("-") || slast.equals("*")  || slast.equals("/")) {

calculate_type = 0;//如果删除了运算符,将计算类型恢复为未确定状态

}

result.setText(c.substring(0,c.length() -1));

}

else if (cmd.compareTo("0")>=0 && cmd.compareTo("9")<=0) {

result.setText(c+cmd);

}

else if (cmd.equals(".")) {

result.setText(c+cmd);

}

else if (cmd.equals("+") || cmd.equals("-") || cmd.equals("*") || cmd.equals("/") ) {

if (calculate_type ==0) {

result.setText(c+cmd);

judgeCalculateType(cmd);//判断计算类型

}

else {//自上次计算完成后,第二次点击运算符,触发计算

calculate();

result.setText(result.getText()+cmd);

judgeCalculateType(cmd);//判断计算类型

}

}

else if (cmd.equals("=")) {//点击=进行计算

try {

} catch (Exception exp) {

JOptionPane.showMessageDialog(this, "输入错误,请检查输出或重新启动程序");

}

}

}

}

//判断计算类型

private void judgeCalculateType(String cmd) {

if (cmd.equals("+"))

calculate_type =1;//记录运算类型

else if (cmd.equals("-"))

calculate_type =2;

else if(cmd.equals("*"))

calculate_type =3;

else

calculate_type =4;

}

//完成计算功能

private void calculate() {

double rt,op1,op2;

String c = result.getText();

int pos;

char ops[] ={'+','-','*','/'};//查找运算符位置

pos =c.indexOf(ops[calculate_type-1]);//以运算符位置为分界点,分离出两个待计算的数

op1 = Double.parseDouble(c.substring(0,pos));

op2 = Double.parseDouble(c.substring(pos+1));

switch (calculate_type) {

case 1:

rt = op1+op2;

break;

case 2:

rt = op1-op2;

break;

case 3:

rt = op1*op2;

break;

case 4:

rt = op1/op2;

break;

default:

rt =0;

}

result.setText("" +rt);//显示计算结果

calculate_type =0;//准备记录下次计算的类型

}

public static void main(String[] args) {

new Calculator();

}

}

3092dfca28a6f3915d05d3640210c35f.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值