package?jisuanqi_new;
import?java.awt.*;
import?java.awt.event.*;
public?class?JiSuanQi_new?implements?ActionListener
{
Panel?p1;//聲明面板p1 TextField?t1;//聲明文本行t1 String[]?label?=?{"7","8","9","/","4","5","6","*","1","2","3","-","0",".","=","+"};//聲明標簽數組label1存放按鈕上的標簽 Button[]?b;//聲明按鈕數組存放16個按鈕 private?int?i;//聲明i以備後用 private?String?op1?=?"0";//運算數備用 private?String?operator?=?"+";//運算符備用 private?boolean?append?=?false;//備用public?JiSuanQi_new()//構造方法
{
t1=new?TextField();//初始化文本行t1 b?=?new?Button[label.length];//初始化按鈕數組bp1=new?Panel();//初始化面板p1
p1.setLayout(new?GridLayout(4,4,4,4));//使面板選擇網格布局管理器以備儲存16個按鈕(4行4列) for(int?i=0;i<b.length;i++)//利用for循環把標簽放在按鈕上,使每個按鈕添加事件監聽器,在面板p1上添加上16個按鈕 {b[i]?=?new?Button(label[i]);//把標簽依次放在16個按鈕上
b[i].addActionListener(this);//使每個按鈕添加動作事件監聽器
p1.add(b[i]);?//分別將按鈕添加到面板p1上}?
Frame?f=new?Frame("計算器1.0");//初始化窗口f,起名字計算器1.0 f.setLayout(new?BorderLayout());//為窗口選擇邊界布局管理器 f.add(BorderLayout.NORTH,t1);//把文本行他添加到窗口的北部 f.add(BorderLayout.CENTER,p1);//把面吧p1添加到窗口的中間 f.addWindowListener(new?WindowAdapter(){//給窗口f添加窗口事件監聽器 public?void?windowClosing(WindowEvent?eve){//運行窗口關閉方法System.exit(0);//退出程序
} }); f.setSize(250,?250);//設置窗口大小 f.setLocation(200,200); f.setVisible(true);//顯示窗口}
public?static?void?main(String?args[])
{
new?JiSuanQi_new();?//調用構造方法}
public?void?actionPerformed(ActionEvent?ae)?
{//按鈕被操作發生
String?comm?=?ae.getActionCommand();//返回與此動作相關的命令字符串,即:使用者第壹次點擊的按鈕是什麽。
if("0123456789".indexOf(comm)!=-1)//如果相關命令字符串為0~9之間的數字則執行
{
if(append){
String?temp?=?t1.getText();//新數字
t1.setText(temp+comm);
}else{?//因為此時append為false執行這個
t1.setText(comm);?//將文本行t1設置為相關命令字符串(妳按中的按鈕代碼)
append?=?true;//此時append=true若繼續按按鈕若繼續按數字的話1.第壹次的按話不會改變2.非第壹次按得話會覆蓋之前按得數字(即缺點:只能進行單個數字的計算)
}
}
else?if(("+-*/".indexOf(comm)!=-1))//如果相關命令字符串為+-*/之間的數字則執行
{
//保存
//t1.setText(comm);op1?=?t1.getText();//把第壹個數賦值給op1?
operator?=?comm;//把命令字符串賦值給operator
append?=?false;//此時append為false即若繼續按按鈕若按數字的話將重復上面的動作,按符號的話將覆蓋之前的符號
}
else?if("=".equals(comm))//如果按的是=號,則按條件進行下面的運算
{
String?op2?=?t1.getText();//op2第二個數
double?d1?=?Double.parseDouble(op1);
double?d2?=?Double.parseDouble(op2);
if(operator.equals("+")){
d1?=?d1?+?d2?;
}else?if(operator.equals("-")){
d1?=?d1?-?d2;
}else?if(operator.equals("*")){
d1?=?d1?*?d2;
}else?{
d1?=?d1?/?d2;
}
t1.setText(d1+"");//顯示計算結果
append?=?false;
}
else?if(".".equals(comm))//若是.號繼續按
{
String?temp?=?t1.getText();
if(temp.indexOf(".")==-1){
t1.setText(temp+".");
append?=?true;
}
}
}
}