import java.awt.event.*;
public class Counter extends Frame implements ActionListener
{
TextField t=new TextField("");
Panel p1=new Panel();
Panel p2=new Panel();
Button[] b=new Button[14];
Button bAdd=new Button("加");
Button bSub=new Button("減");
Button bMul=new Button("乘以");
Button bPoint=new Button(".");
Button bDiv=new Button("除以");
Button bEqual=new Button("等於");
Button bSqrt=new Button("開方");
Button bPow=new Button("平方");
Button bBinary=new Button("二進制");
Button bOctal=new Button("八進制");
Button bHex=new Button("十六進制");
Button bNull=new Button("清除");
String str1="";
String str2="";
String operator=null;
boolean first=true;
int countOper=0;
double result=0.0;
double num1=0.0,num2=0.0;
boolean error=false;
public Counter()
{
super("計算器 河北工程大學科信學院 ");
t.setEditable(false);
for(int i=0;i<10;i++)
{
b[i]=new Button(String.valueOf(i));
p1.add(b[i]);
b[i].setActionCommand("number");
b[i].addActionListener(this);
}
p1.add(bPoint);
bPoint.setActionCommand("number");
p1.add(bAdd);
p1.add(bSub);
p1.add(bMul);
p1.add(bDiv);
p1.add(bEqual);
p2.add(bSqrt);
p2.add(bPow);
p2.add(bBinary);
p2.add(bOctal);
p2.add(bHex);
p2.add(bNull);
bAdd.setActionCommand("oper");
bSub.setActionCommand("oper");
bMul.setActionCommand("oper");
bDiv.setActionCommand("oper");
bAdd.addActionListener(this);
bSub.addActionListener(this);
bMul.addActionListener(this);
bDiv.addActionListener(this);
bPoint.addActionListener(this);
bEqual.addActionListener(this);
bSqrt.addActionListener(this);
bBinary.addActionListener(this);
bOctal.addActionListener(this);
bHex.addActionListener(this);
bNull.addActionListener(this);
p1.setLayout(new GridLayout(4,4,5,5));
p2.setLayout(new GridLayout(1,6,5,5));
add(t,"North");
add(p1,"Center");
add(p2,"South");
setLocation(600,300);
setSize(600,300);
setBackground(new Color(200,20,100));
setVisible(true);
addWindowListener(new WindowAdapter(){
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
}
public void actionPerformed(ActionEvent e)
{
Button temp=(Button)e.getSource();
if(e.getActionCommand().equals("number"))
{
if(first)
{
str1=str1+temp.getLabel();
t.setText(str1);
}
else
{
str2=str2+temp.getLabel();
t.setText(str2);
}
}
else if(e.getActionCommand().equals("oper"))
{
if(str1=="")
{
countOper=0;
first=true;
}
else
{
countOper++;
if(countOper>1)
{
getResult();
}
operator=temp.getLabel();
first=false;
}
}
else if(e.getActionCommand().equals("開方"))
{
double d=Math.sqrt(Double.parseDouble(str1));
str1=String.valueOf(d);
t.setText(String.valueOf(d));
first=false;
}
else if(e.getActionCommand().equals("平方"))
{
double f=Math.pow(Double.parseDouble(str1),2);
str1=String.valueOf(f);
t.setText(String.valueOf(f));
first=false;
}
else if(e.getActionCommand().equals("二進制"))
{
int i=Integer.parseInt(str1);
String binStr=Long.toBinaryString(i);
str1=binStr;
t.setText(str1);
first=false;
}
else if(e.getActionCommand().equals("八進制"))
{
int i=Integer.parseInt(str1);
String octStr=Long.toOctalString(i);
str1=octStr;
t.setText(str1);
first=false;
}
else if(e.getActionCommand().equals("十六進制"))
{
int i=Integer.parseInt(str1);
String hexStr=Long.toHexString(i);
str1=hexStr;
t.setText(str1);
first=false;
}
else if(e.getActionCommand().equals("清除"))
{
str1="";//清空
str2="";
t.setText("");
countOper=0;
first=true;
error=false;
}
else if(e.getActionCommand().equals("等於"))
{
if((str1=="")||(str2==""))
{
countOper=0;
first=true;
}
else
{
getResult();
countOper=0;
}
}
}
public void getResult()
{
num1=Double.parseDouble(str1);
num2=Double.parseDouble(str2);
if(operator.equals("加"))
{
result=num1+num2;
}
else if(operator.equals("減"))
{
result=num1-num2;
}
else if(operator.equals("乘以"))
{
result=num1*num2;
}
else if(operator.equals("除以"))
{
if(num2==0.0)
{
error=true;
}
else
{
result=num1/num2;
}
}
if(error)
{
t.setText("error");
}
else
{
t.setText(String.valueOf(result));
str1=String.valueOf(result);
str2="";
}
}
public static void main(String[] args)
{
new Counter();
}
}