计算器源码

来源:互联网 发布:cfd软件 应用 编辑:程序博客网 时间:2024/04/30 21:48
import java.awt.*; import java.awt.event.*; import javax.swing.*; //测试类 class jishuan { //程序入口 public static void main(String args[]) { try{ DemoFrame frm=new DemoFrame(); frm.show(); } catch(Exception e) { System.err.println("异常:" +e ); } } } //窗体类,设置窗体属性,并加载面板类 class DemoFrame extends JFrame { public DemoFrame() { try{ setTitle("计算器"); setBounds(400,300,330,250); setResizable(false); this.getContentPane().add(new DemoPanel()); setDefaultCloseOperation(this.EXIT_ON_CLOSE); } catch(Exception e) { System.err.println("异常:" +e); } } } //面板类,设置布局,并加载轻量组件 class DemoPanel extends JPanel implements ActionListener { //定义变量,存储运算数据 int x1,x2; boolean b; char yunshuan; //定义引用变量 JTextField txtNum; JButton btn[]; JButton jia; JButton jian; JButton shen; JButton chu; JButton bs; JButton ce; JButton c; JButton mc; JButton ms; JButton mr; JButton mj; JButton dian; JButton den; JButton zf; JButton sqr; JButton mo; JButton cx; JButton nu; GridBagLayout gb; GridBagConstraints gbc; public DemoPanel() { //gb=new GridBagLayout(); //setLayout(gb); //gbc=new GridBagConstraints(); txtNum=new JTextField("0.",25); //用于计算器显示文本域 txtNum.setHorizontalAlignment(JTextField.RIGHT); //设置为居右对齐 txtNum.setEditable(false); //将文本域设为不可编辑 txtNum.setBackground(Color.white); //设置文本域背景色为白色 //实例化轻量组件 jia=new JButton("+"); jian=new JButton("-"); shen=new JButton("*"); chu=new JButton("/"); bs=new JButton("Backspace"); ce=new JButton(" CE "); c=new JButton(" C "); mc=new JButton("MC"); ms=new JButton("MS"); mr=new JButton("MR"); mj=new JButton("M+"); dian=new JButton("."); den=new JButton("= "); zf=new JButton("+/-"); sqr=new JButton("sqrt"); mo=new JButton(" % "); cx=new JButton("1/x "); nu=new JButton(" "); btn=new JButton[10]; for(int i=0;i<10;i++) { btn[i]=new JButton(Integer.toString(i)); } //gbc.fill=GridBagConstraints.NONE; //将组件添加到面板对象中 add(txtNum); add(nu); add(bs); add(ce); add(c); add(mc); add(btn[7]); add(btn[8]); add(btn[9]); add(chu); add(sqr); add(mr); add(btn[4]); add(btn[5]); add(btn[6]); add(shen); add(mo); add(ms); add(btn[1]); add(btn[2]); add(btn[3]); add(jian); add(cx); add(mj); add(btn[0]); add(zf); add(dian); add(jia); add(den); //注册监听器 for(int i=0;i<10;i++) { btn[i].addActionListener(this); } dian.addActionListener(this); jia.addActionListener(this); jian.addActionListener(this); shen.addActionListener(this); chu.addActionListener(this); den.addActionListener(this); zf.addActionListener(this); ce.addActionListener(this); c.addActionListener(this); bs.addActionListener(this); } //没有用的布局方式 /* public void addComponent(Component c,int row,int col,int nrow,int ncol) { gbc.gridx=col; gbc.gridy=row; gbc.gridwidth=nrow; gbc.gridheight=nrow; gb.setConstraints(c,gbc); this.add(c); } */ //实现监听器类接口的方法 public void actionPerformed(ActionEvent e) { if(txtNum.getText().equals("格式非法")) { txtNum.setText("0."); } String s=e.getActionCommand(); //取出事件源文本 //计算器CE功能实现 if(s.equals(" CE ")) { txtNum.setText("0."); return; } //计算器C功能实现 if(s.equals(" C ")) { txtNum.setText("0."); yunshuan=' '; x1=0; return; } //设置数据正负实现 if(s.equals("+/-")) { String temp=txtNum.getText(); if(temp.indexOf("-")>=0) { txtNum.setText(temp.substring(temp.indexOf("-")+1)); }else{ txtNum.setText("-" + txtNum.getText()); } return; } //数据清除实现 if(s.equals("Backspace")) { txtNum.setText(txtNum.getText().substring(0,txtNum.getText().length()-1)); if(txtNum.getText().equals("")) { txtNum.setText("0."); } return; } //数据最终结果计算 if(s.equals("= ")) { //根据运算符选择不同操作 switch(yunshuan) { case '+': txtNum.setText(Integer.toString(x1 + Integer.parseInt(txtNum.getText()))); yunshuan=' '; break; case '-': txtNum.setText(Integer.toString(x1 - Integer.parseInt(txtNum.getText()))); yunshuan=' '; break; case '*': txtNum.setText(Integer.toString(x1 * Integer.parseInt(txtNum.getText()))); yunshuan=' '; break; case '/': if(txtNum.getText().equals("0")) { txtNum.setText("格式非法"); break; } txtNum.setText(Integer.toString(x1 / Integer.parseInt(txtNum.getText()))); yunshuan=' '; break; default: break; } b=false; return; } //处理数据的输入,有0~9及+、-、*、/ switch(s.charAt(0)) { case '1': if(txtNum.getText().equals("0.") && b==false) { txtNum.setText("1"); }else{ txtNum.setText(txtNum.getText()+"1"); } break; case '2': if(txtNum.getText().equals("0.") && b==false) { txtNum.setText("2"); }else{ txtNum.setText(txtNum.getText()+"2"); } break; case '3': if(txtNum.getText().equals("0.") && b==false) { txtNum.setText("3"); }else{ txtNum.setText(txtNum.getText()+"3"); } break; case '4': if(txtNum.getText().equals("0.") && b==false) { txtNum.setText("4"); }else{ txtNum.setText(txtNum.getText()+"4"); } break; case '5': if(txtNum.getText().equals("0.") && b==false) { txtNum.setText("5"); }else{ txtNum.setText(txtNum.getText()+"5"); } break; case '6': if(txtNum.getText().equals("0.") && b==false) { txtNum.setText("6"); }else{ txtNum.setText(txtNum.getText()+"6"); } break; case '7': if(txtNum.getText().equals("0.") && b==false) { txtNum.setText("7"); }else{ txtNum.setText(txtNum.getText()+"7"); } break; case '8': if(txtNum.getText().equals("0.") && b==false) { txtNum.setText("8"); }else{ txtNum.setText(txtNum.getText()+"8"); } break; case '9': if(txtNum.getText().equals("0.") && b==false) { txtNum.setText("9"); }else{ txtNum.setText(txtNum.getText()+"9"); } break; case '0': if(txtNum.getText().equals("0.") && b==false) { txtNum.setText("0"); }else{ txtNum.setText(txtNum.getText()+"0"); } break; case '.': if(b==true) { break; } if(txtNum.getText().equals("0.")) { txtNum.setText("0."); }else{ if(txtNum.getText().indexOf("0")==0 && txtNum.getText().length()>1) { txtNum.setText("格式非法"); return; }else{ txtNum.setText(txtNum.getText() + "."); } } b=true; break; case '+': if(txtNum.getText().equals("0.")) { x1=0; }else{ x1=Integer.parseInt(txtNum.getText()); } txtNum.setText("0."); yunshuan='+'; b=false; break; case '-': if(txtNum.getText().equals("0.")) { x1=0; }else{ x1=Integer.parseInt(txtNum.getText()); } txtNum.setText("0."); yunshuan='-'; b=false; break; case '*': if(txtNum.getText().equals("0.")) { x1=0; }else{ x1=Integer.parseInt(txtNum.getText()); } txtNum.setText("0."); yunshuan='*'; b=false; break; case '/': if(txtNum.getText().equals("0.")) { x1=0; }else{ x1=Integer.parseInt(txtNum.getText()); } txtNum.setText("0."); yunshuan='/'; b=false; break; default: break; } } }
原创粉丝点击