111111111111111111111111111111111111111111111111111111111111111111111 import java.awt.BorderLayout; import java.awt.Button; import java.awt.Color; import java.awt.Font; import java.awt.Frame; import java.awt.GridLayout; import java.awt.Panel; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.awt.event.WindowListener; import java.rmi.server.Operation; import java.text.NumberFormat; import java.util.LinkedList; import javax.naming.LinkLoopException; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JTextField; import javax.swing.border.BevelBorder; import javax.swing.border.SoftBevelBorder; public class ComputerPad extends Frame implements ActionListener{ NumberButton numberButton[]; //数字按钮数组 OperationButton operationButton[]; //运算符号按钮数组 JTextField resultShow; //小数点按钮,正负号按钮,退格按钮,求倒数按钮,等号按钮,清零按钮 JButton btn_point,btn_symbol,btn_quit,btn_lastCount,btn_equal,btn_clear; //按钮 LinkedList linkedList =new LinkedList();//负责存储数据的对象 String operation[]={"+","-","*","/"};//运算发号数组 boolean flag=false; //是否按下等号 public void f(){ JFrame frame=new JFrame("计算器"); frame.setBounds(200,100,320,250); JPanel panel=new JPanel(); JPanel panel1=new JPanel(); numberButton=new NumberButton[10];//共有十个数字按钮 for (int i = 0; i < 10 ;i++) { numberButton[i]=new NumberButton(i); numberButton[i].addActionListener(this); } operationButton =new OperationButton[4]; for (int i = 0; i <4; i++) { operationButton[i]=new OperationButton(operation[i]); operationButton[i].addActionListener( this); } btn_point=new JButton(".");//小数点 btn_symbol=new JButton("+/-");//正负号 btn_equal=new JButton("=");//等号 btn_quit=new JButton("退格");//退格 btn_lastCount=new JButton("1/x");//倒数 btn_clear=new JButton("c");//清空 btn_clear.setForeground(Color.red); btn_quit.setForeground(Color.red); btn_equal.setForeground(Color.red); btn_lastCount.setForeground(Color.blue); btn_symbol.setForeground(Color.blue); btn_point.setForeground(Color.blue); btn_clear.addActionListener(this); btn_equal.addActionListener(this); btn_lastCount.addActionListener(this); btn_point.addActionListener(this); btn_quit.addActionListener(this); btn_symbol.addActionListener(this); resultShow=new JTextField(20); resultShow.setHorizontalAlignment(JTextField.RIGHT); resultShow.setForeground(Color.blue); resultShow.setFont(new Font("TimesRoman",Font.PLAIN,14)); resultShow.setBorder(new SoftBevelBorder(BevelBorder.LOWERED)); resultShow.setBackground(Color.white); resultShow.setEditable(false); panel1.add(resultShow); panel.setLayout(new GridLayout(4,5));//面板中的第一行 panel.add(numberButton[1]); panel.add(numberButton[2]); panel.add(numberButton[3]); panel.add(operationButton[0]); panel.add(btn_clear); //面板第二行 panel.add(numberButton[4]); panel.add(numberButton[5]); panel.add(numberButton[6]); panel.add(operationButton[1]); panel.add(btn_quit); //面板中的第三行 panel.add(numberButton[7]); panel.add(numberButton[8]); panel.add(numberButton[9]); panel.add(operationButton[2]); panel.add(btn_lastCount); //面板中的第四行 panel.add(numberButton[0]); panel.add(btn_symbol); panel.add(btn_point); panel.add(operationButton[3]); panel.add(btn_equal); frame.add(panel1, BorderLayout.NORTH); frame.add(panel,BorderLayout.CENTER); addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { System.exit(0); } }); frame.setVisible(true); setResizable(false); validate(); } @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub if(e.getSource() instanceof NumberButton)//如果数遍单击数字按钮 { NumberButton b=(NumberButton) e.getSource(); if (linkedList.size()==0) {//如果链表中没有节点 int number=b.getNumber();//获取按钮上的数字 linkedList.add(""+number);//将数据添加到链表 resultShow.setText(""+number);//将两个数字收尾相接 flag=false; } else if(linkedList.size()==1&&flag==false){ int number=b.getNumber(); String num=(String) linkedList.getFirst(); String s=num.concat(""+number); linkedList.set(0, s); resultShow.setText(s); } else if(linkedList.size()==1&&flag==true){ int number=b.getNumber(); linkedList.removeFirst(); linkedList.add(""+number); //将数据添加到链表 flag=false; resultShow.setText(""+number); } else if(linkedList.size()==2){//链表中已有2个节点 int number=b.getNumber();//获取按钮上数字 linkedList.add(""+number);//链表添加第三个节点,注意:第二个节点是运算符号。 resultShow.setText(""+number); } else if(linkedList.size()==3){//链表中已有3个节点 int number=b.getNumber(); String num=(String) linkedList.getLast(); String s=num.concat(""+number);//与链表第3个节点中的数字收尾相接 linkedList.set(2, s); resultShow.setText(s); } } else if(e.getSource() instanceof OperationButton){//如果单击运算符号按钮 OperationButton b=(OperationButton) e.getSource(); if(linkedList.size()==1){ String fuhao=b.getOperator(); linkedList.add(fuhao); } else if(linkedList.size()==2){ String fuhao=b.getOperator(); linkedList.set(1, fuhao); } else if(linkedList.size()==3){ String fuhao=b.getOperator(); String number1=(String) linkedList.getFirst(); String number2=(String) linkedList.getLast(); String yunsuanfuhao=(String) linkedList.get(1); try { double n1=Double.parseDouble(number1); double n2=Double.parseDouble(number2); double n=0; if(yunsuanfuhao.equals("+")){ n=n1+n2; } else if(yunsuanfuhao.equals("-")){ n=n1-n2; } else if(yunsuanfuhao.equals("*")){ n=n1*n2; } else if(yunsuanfuhao.equals("/")){ n=n1/n2; } linkedList.clear();//根据链表内已有的数进行运算,其结果作为新的运算数值 linkedList.add(""+n); linkedList.add(fuhao); resultShow.setText(""+n); } catch (Exception e2) { // TODO: handle exception } } } //(1) else if(e.getSource()==btn_equal){ flag=true; if(linkedList.size()==1||linkedList.size()==2){ String num=(String) linkedList.getFirst(); resultShow.setText(""+num); } else if(linkedList.size()==3){ String number1=(String) linkedList.getFirst(); String number2=(String) linkedList.getLast(); String yunsuanfuhao=(String) linkedList.get(1); try { double n1=Double.parseDouble(number1); double n2=Double.parseDouble(number2); double n=0; if(yunsuanfuhao.equals("+")){ n=n1+n2; } else if(yunsuanfuhao.equals("-")){ n=n1-n2; } else if(yunsuanfuhao.equals("*")){ n=n1*n2; } else if(yunsuanfuhao.equals("/")){ n=n1/n2; } resultShow.setText(""+n); linkedList.set(0,""+n); linkedList.removeLast();//将链表中的第二个运算数删除 linkedList.removeLast();//再将运算符号删除 } catch (Exception e2) { // TODO: handle exception } } } //(2) else if(e.getSource()==btn_point){ if(linkedList.size()==0){ flag=false; } else if(linkedList.size()==1) { String dot=btn_point.getLabel();//获取按钮上的小数点 String num=(String) linkedList.getFirst(); String s=null; if(num.indexOf(dot)==-1){//嫁娶数字中不含小数点 s=num.concat(dot); linkedList.set(0, s); } else{ s=num; } linkedList.set(0, s); resultShow.setText(s); } else if(linkedList.size()==3){ String dot=btn_point.getLabel();//获取按钮上的小数点 String num=(String) linkedList.getLast(); String s=null; if(num.indexOf(dot)==-1){ s=num.concat(dot); linkedList.set(2, s); } else{ s=num; } resultShow.setText(s); } } //(3) else if(e.getSource()==btn_quit){ if(linkedList.size()==1){ String num=(String) linkedList.getFirst(); if(num.length()>=1){ num=num.substring(0,num.length()-1); linkedList.set(0, num); resultShow.setText(num); }else{ linkedList.removeLast(); resultShow.setText("0"); } } else if(linkedList.size()==3){ String num=(String) linkedList.getLast(); if(num.length()>=1){ num=num.substring(0, num.length()-1); linkedList.set(2, num); } else{ linkedList.removeLast(); resultShow.setText("0"); } } } //(4) else if(e.getSource()==btn_symbol){ if(linkedList.size()==1){ String number1=(String) linkedList.getFirst(); try { double d=Double.parseDouble(number1); d=-1*d; String str=String.valueOf(d); linkedList.set(0, str); resultShow.setText(str); } catch (Exception e2) { // TODO: handle exception } } else if(linkedList.size()==3){ String number2=(String) linkedList.getLast(); try { double d=(Double) linkedList.getLast(); d=-1*d; String str=String.valueOf(d); linkedList.set(2, str); resultShow.setText(str); } catch (Exception e2) { // TODO: handle exception } } } //(5) else if(e.getSource()==btn_lastCount){ if(linkedList.size()==1||linkedList.size()==2){ String number1=(String) linkedList.getFirst(); try { double d=Double.parseDouble(number1); d=1.0/d; String str=String.valueOf(d); linkedList.set(0, str); resultShow.setText(str); } catch (Exception e2) { // TODO: handle exception } } else if(linkedList.size()==3){ String number2=(String) linkedList.getLast(); try { double d=Double.parseDouble(number2); d=1.0/d; String str=String.valueOf(d); linkedList.set(0, str); } catch (Exception e2) { // TODO: handle exception } } } //(6) else if(e.getSource()==btn_clear){ flag=false; resultShow.setText("0"); linkedList.clear(); } } public static void main(String[] args) { ComputerPad c=new ComputerPad(); c.f(); } } 2222222222222222222222222222222222222222222222222222222 import java.awt.Button; import java.awt.Color; import java.awt.GraphicsEnvironment; import java.awt.HeadlessException; public class NumberButton extends Button{ int number; public NumberButton(int number) { super(" "+number);// public Button(String label) throws HeadlessException { GraphicsEnvironment.checkHeadless();this.label = label; } 构造一个带指定标签的按钮。 this.number=number; setForeground(Color.blue); } public int getNumber() { return number; } } 3333333333333333333333333333333333333333333333333333333333333 import java.awt.Button; import java.awt.Color; public class OperationButton extends Button{ String operator; public OperationButton(String s){ super(s); operator=s; setForeground(Color.red); } public String getOperator(){ return operator; } }