package gui; import java.awt.*; import java.awt.event.*; import javax.swing.*; /** * Windows操作系统自带的计算器是个很方便的小工具, * 利用Java的GUI编程, * 实现一个Java GUI计算器应用程序界面, * 窗口标题为“计算器”,窗口布局如下图所示,在此计算器应用程序中实现“+、-、*、/”运算操作。 * * @since 2010-9-20 * @start 1:02 * @end 2:27 * * * */ public class Three_Caculator { public static void main(String[] args){ Caculator calc=new Caculator(); calc.init(); calc.start(); } } class Caculator extends JFrame implements ActionListener{ JButton num0=new JButton("0"), num1=new JButton("1"), num2=new JButton("2"), num3=new JButton("3"), num4=new JButton("4"), num5=new JButton("5"), num6=new JButton("6"), num7=new JButton("7"), num8=new JButton("8"), num9=new JButton("9"), plus=new JButton("+"), minus=new JButton("-"), times=new JButton("*"), devid=new JButton("/"), calc=new JButton("="), clear=new JButton("Clear"); JTextArea text=new JTextArea(); JPanel panel1=new JPanel(), panel2=new JPanel(), panel4=new JPanel(), panel3=new JPanel(); String str=""; double input=0; double output=0; double sum=0; int mark=0; public void init(){ this.getContentPane().setLayout(new GridLayout(5,1)); this.setBounds(100,100,300,400); this.getContentPane().add(text); GridLayout mgr=new GridLayout(1,4); panel1.setLayout(mgr); panel2.setLayout(mgr); panel3.setLayout(mgr); panel4.setLayout(mgr); this.getContentPane().add(panel1); this.getContentPane().add(panel2); this.getContentPane().add(panel3); this.getContentPane().add(panel4); panel1.add(num7); panel1.add(num8); panel1.add(num9); panel1.add(plus); panel2.add(num4); panel2.add(num5); panel2.add(num6); panel2.add(minus); panel3.add(num1); panel3.add(num2); panel3.add(num3); panel3.add(times); panel4.add(num0); panel4.add(clear); panel4.add(calc); panel4.add(devid); num0.addActionListener(this); num1.addActionListener(this); num2.addActionListener(this); num3.addActionListener(this); num4.addActionListener(this); num5.addActionListener(this); num6.addActionListener(this); num7.addActionListener(this); num8.addActionListener(this); num9.addActionListener(this); plus.addActionListener(this); minus.addActionListener(this); times.addActionListener(this); clear.addActionListener(this); devid.addActionListener(this); calc.addActionListener(this); this.setVisible(true); this.validate(); } public void start(){ text.setEditable(false); } @Override public void actionPerformed(ActionEvent e) { if(e.getSource().equals(num0)){ str+=0; try{ input=Double.parseDouble(str); } catch(Exception exp){ text.setText("Input error!"); return; } } if(e.getSource().equals(num1)){ str+=1; try{ input=Double.parseDouble(str); } catch(Exception exp){ text.setText("Input error!"); return; } } if(e.getSource().equals(num2)){ str+=2; try{ input=Double.parseDouble(str); } catch(Exception exp){ text.setText("Input error!"); return; } } if(e.getSource().equals(num3)){ str+=3; try{ input=Double.parseDouble(str); } catch(Exception exp){ text.setText("Input error!"); return; } } if(e.getSource().equals(num4)){ str+=4; try{ input=Double.parseDouble(str); } catch(Exception exp){ text.setText("Input error!"); return; } } if(e.getSource().equals(num5)){ str+=5; try{ input=Double.parseDouble(str); } catch(Exception exp){ text.setText("Input error!"); return; } } if(e.getSource().equals(num6)){ str+=6; try{ input=Double.parseDouble(str); } catch(Exception exp){ text.setText("Input error!"); return; } } if(e.getSource().equals(num7)){ str+="7"; try{ input=Double.parseDouble(str); } catch(Exception exp){ text.setText("Input error!"); return; } } if(e.getSource().equals(num8)){ str+=8; try{ input=Double.parseDouble(str); } catch(Exception exp){ text.setText("Input error!"); return; } } if(e.getSource().equals(num9)){ str+=9; try{ input=Double.parseDouble(str); } catch(Exception exp){ text.setText("Input error!"); return; } } if(e.getSource().equals(num0)){ str+=0; try{ input=Double.parseDouble(str); } catch(Exception exp){ text.setText("Input error!"); return; } } if(e.getSource().equals(plus)){ this.calc(); mark=1; } if(e.getSource().equals(minus)){ this.calc(); mark=2; } if(e.getSource().equals(times)){ this.calc(); mark=3; } if(e.getSource().equals(devid)){ this.calc(); mark=4; } if(e.getSource().equals(clear)){ mark=0; input=0; str=""; output=0; } if(e.getSource().equals(calc)){ this.calc(); } this.display(); } public void calc(){ if(mark==0){ output=input; } if(mark==1){ output=output+input; } if(mark==2){ output=output-input; } if(mark==3){ output=output*input; } if(mark==4){ if(input!=0){ output=output/input; } } input=0; str=""; } public void display(){ StringBuffer sb=new StringBuffer(); sb.append("Input:"); sb.append(input); sb.append("/r/n"); sb.append("State:"); if(mark==1){ sb.append("+"); } if(mark==2){ sb.append("-"); } if(mark==3){ sb.append("*"); } if(mark==4){ sb.append("/"); } sb.append("/r/n"); sb.append(output); sb.append("/r/n"); text.setText(sb.toString()); } }