importjava.awt.*;
importjava.awt.event.*;
importjavax.swing.*;
importjavax.swing.border.*;
importjava.util.LinkedList;
importjava.text.NumberFormat;
publicclassComputerPadextendsFrameimplementsActionListener
{
NumberButton numberButton[];
OperationButton oprationButton[];
Button 小数点按钮,正负号按钮,退格按钮,
求倒数按钮,等号按钮,清零按钮;
Panel panel;
JTextField resultShow;
String 运算符号[]={"+","-","*","/"};
LinkedList 链表;
boolean是否按下等号=false;
publicComputerPad()
{
super("计算器");
链表=newLinkedList();
numberButton=newNumberButton[10];
for(inti=0;i<=9;i++)
{
numberButton[i]=newNumberButton(i);
numberButton[i].addActionListener(this);
}
oprationButton=newOperationButton[4];
for(inti=0;i<4;i++)
{
oprationButton[i]=newOperationButton(运算符号[i]);
oprationButton[i].addActionListener(this);
}
小数点按钮=newButton(".");
正负号按钮 =newButton("+/-");
等号按钮=newButton("=");
求倒数按钮=newButton("1/x");
退格按钮=newButton("退格");
清零按钮=newButton("C");
清零按钮.setForeground(Color.red);
退格按钮.setForeground(Color.red);
等号按钮.setForeground(Color.red);
求倒数按钮.setForeground(Color.blue);
正负号按钮.setForeground(Color.blue);
小数点按钮.setForeground(Color.blue);
退格按钮.addActionListener(this);
清零按钮.addActionListener(this);
等号按钮.addActionListener(this);
小数点按钮.addActionListener(this);
正负号按钮.addActionListener(this);
求倒数按钮.addActionListener(this);
resultShow=newJTextField(10);
resultShow.setHorizontalAlignment(JTextField.RIGHT);
resultShow.setForeground(Color.blue);
resultShow.setFont(newFont("TimesRoman",Font.PLAIN,14));
resultShow.setBorder(newSoftBevelBorder(BevelBorder.LOWERED));
resultShow.setBackground(Color.white);
resultShow.setEditable(false);
panel=newPanel();
panel.setLayout(newGridLayout(4,5));
panel.add(numberButton[1]);
panel.add(numberButton[2]);
panel.add(numberButton[3]);
panel.add(oprationButton[0]);
panel.add(清零按钮);
panel.add(numberButton[4]);
panel.add(numberButton[5]);
panel.add(numberButton[6]);
panel.add(oprationButton[1]);
panel.add(退格按钮);
panel.add(numberButton[7]);
panel.add(numberButton[8]);
panel.add(numberButton[9]);
panel.add(oprationButton[2]);
panel.add(求倒数按钮);
panel.add(numberButton[0]);
panel.add(正负号按钮);
panel.add(小数点按钮);
panel.add(oprationButton[3]);
panel.add(等号按钮);
add(panel,BorderLayout.CENTER);
add(resultShow,BorderLayout.NORTH);
addWindowListener(newWindowAdapter()
{publicvoidwindowClosing(WindowEvent e)
{
System.exit(0);
}
});
setVisible(true);
setBounds(100,50,240,180);
setResizable(false);
validate();
}
publicvoidactionPerformed(ActionEvent e)
{
if(e.getSource()instanceofNumberButton)
{
NumberButton b=(NumberButton)e.getSource();
if(链表.size()==0)
{
intnumber=b.getNumber();
链表.add(""+number);
resultShow.setText(""+number);
是否按下等号=false;
}
elseif(链表.size()==1&&是否按下等号==false)
{
intnumber=b.getNumber();
String num=(String)链表.getFirst();
String s=num.concat(""+number);
链表.set(0,s);
resultShow.setText(s);
}
elseif(链表.size()==1&&是否按下等号==true)
{
intnumber=b.getNumber();
链表.removeFirst();
链表.add(""+number);
是否按下等号=false;
resultShow.setText(""+number);
}
elseif(链表.size()==2)
{
intnumber=b.getNumber();
链表.add(""+number);
resultShow.setText(""+number);
}
elseif(链表.size()==3)
{
intnumber=b.getNumber();
String num=(String)链表.getLast();
String s=num.concat(""+number);
链表.set(2,s);
resultShow.setText(s);
}
}
elseif(e.getSource()instanceofOperationButton)
{
OperationButton b=(OperationButton)e.getSource();
if(链表.size()==1)
{
String fuhao=b.get运算符号();
链表.add(fuhao);
}
elseif(链表.size()==2)
{
String fuhao=b.get运算符号();
链表.set(1,fuhao);
}
elseif(链表.size()==3)
{
String fuhao=b.get运算符号();
String number1=(String)链表.getFirst();
String number2=(String)链表.getLast();
String 运算符号=(String)链表.get(1);
try
{
doublen1=Double.parseDouble(number1);
doublen2=Double.parseDouble(number2);
doublen=0;
if(运算符号.equals("+"))
{
n=n1+n2;
}
elseif(运算符号.equals("-"))
{
n=n1-n2;
}
elseif(运算符号.equals("*"))
{
n=n1*n2;
}
elseif(运算符号.equals("/"))
{
n=n1/n2;
}
链表.clear();
链表.add(""+n);
链表.add(fuhao);
resultShow.setText(""+n);
}
catch(Exception ee)
{
}
}
}
elseif(e.getSource()==等号按钮)
{
是否按下等号=true;
if(链表.size()==1||链表.size()==2)
{
String num=(String)链表.getFirst();
resultShow.setText(""+num);
}
elseif(链表.size()==3)
{
String number1=(String)链表.getFirst();
String number2=(String)链表.getLast();
String 运算符号=(String)链表.get(1);
try
{
doublen1=Double.parseDouble(number1);
doublen2=Double.parseDouble(number2);
doublen=0;
if(运算符号.equals("+"))
{
n=n1+n2;
}
elseif(运算符号.equals("-"))
{
n=n1-n2;
}
elseif(运算符号.equals("*"))
{
n=n1*n2;
}
elseif(运算符号.equals("/"))
{
n=n1/n2;
}
resultShow.setText(""+n);
链表.set(0,""+n);
链表.removeLast();
链表.removeLast();
}
catch(Exception ee)
{
}
}
}
elseif(e.getSource()==小数点按钮)
{
if(链表.size()==0)
{
是否按下等号=false;
}
elseif(链表.size()==1)
{
String dot=小数点按钮.getLabel();
String num=(String)链表.getFirst();
String s=null;
if(num.indexOf(dot)==-1)
{
s=num.concat(dot);
链表.set(0,s);
}
else
{
s=num;
}
链表.set(0,s);
resultShow.setText(s);
}
elseif(链表.size()==3)
{
String dot=小数点按钮.getLabel();
String num=(String)链表.getLast();
String s=null;
if(num.indexOf(dot)==-1)
{
s=num.concat(dot);
链表.set(2,s);
}
else
{
s=num;
}
resultShow.setText(s);
}
}
elseif(e.getSource()==退格按钮)
{
if(链表.size()==1)
{
String num=(String)链表.getFirst();
if(num.length()>=1)
{
num=num.substring(0,num.length()-1);
链表.set(0,num);
resultShow.setText(num);
}
else
{
链表.removeLast();
resultShow.setText("0");
}
}
elseif(链表.size()==3)
{
String num=(String)链表.getLast();
if(num.length()>=1)
{ num=num.substring(0,num.length()-1);
链表.set(2,num);
resultShow.setText(num);
}
else
{
链表.removeLast();
resultShow.setText("0");
}
}
}
elseif(e.getSource()==正负号按钮)
{
if(链表.size()==1)
{
String number1=(String)链表.getFirst();
try
{
doubled=Double.parseDouble(number1);
d=-1*d;
String str=String.valueOf(d);
链表.set(0,str);
resultShow.setText(str);
}
catch(Exception ee)
{
}
}
elseif(链表.size()==3)
{
String number2=(String)链表.getLast();
try
{
doubled=Double.parseDouble(number2);
d=-1*d;
String str=String.valueOf(d);
链表.set(2,str);
resultShow.setText(str);
}
catch(Exception ee)
{
}
}
}
elseif(e.getSource()==求倒数按钮)
{
if(链表.size()==1||链表.size()==2)
{
String number1=(String)链表.getFirst();
try
{
doubled=Double.parseDouble(number1);
d=1.0/d;
String str=String.valueOf(d);
链表.set(0,str);
resultShow.setText(str);
}
catch(Exception ee)
{
}
}
elseif(链表.size()==3)
{
String number2=(String)链表.getLast();
try
{
doubled=Double.parseDouble(number2);
d=1.0/d;
String str=String.valueOf(d);
链表.set(0,str);
resultShow.setText(str);
}
catch(Exception ee)
{
}
}
}
elseif(e.getSource()==清零按钮)
{
是否按下等号=false;
resultShow.setText("0");
链表.clear();
}
}
publicstaticvoidmain(String args[])
{
newComputerPad();
}
}