微信号:CyuyanAn

介绍:C语言C++;JAVA安卓系统软件编程,C语言编译器,C语言函数手册,C语言编程技巧,C语言视频教学,C语言考试,C语言软件开发设计,

【新手】计算器(二)

2018-03-14 15:52 C语言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();
}
}




新手:计算器(一)


微信:跳一跳辅助


常量、变量和数据类型



 
C语言JAVA软件编程设计 更多文章 【新手制作】字符串的精华案例 微信:跳一跳辅助 常量、变量和数据类型 深入Unity 1.x依赖注入容器之一:入门 【Win32开发入门】 关于C++的几个要点
猜您喜欢 搬运自YouTube的一些不错的Swift语言视频教程 【R每日一贴】R获取有交互项的线性回归? 如何教机器绘画? ES6 有什么新东西? 十年,从网管到首席架构师,我的成长感悟