進口?Java . awt . *;//AWT核心包
進口?Java . awt . event . *;//提供事件類和偵聽器
公共?班級?櫃臺?延伸?框架?器物?動作監聽器
{
文本字段?t =新?TextField(" ");
面板?p 1 =新建?panel();//新增壹個面板,用於存儲數字鍵和符號鍵。
面板?p2 =新?panel();//新建壹個面板,用於存儲根鍵、方鍵和清除鍵。
按鈕[]?b =新?按鈕[10];//創建對象按鈕
按鈕?bAdd=new?按鈕(“加號”);//實例化按鈕對象
按鈕?bSub=new?按鈕(“減號”);
按鈕?bMul=new?按鈕(“乘法”);
按鈕?bPoint=new?按鈕(“.”);
按鈕?bDiv=new?按鈕(“除以”);
按鈕?bEqual=new?按鈕(“等於”);
按鈕?bSqrt=new?按鈕(“處方”);
按鈕?bPow=new?按鈕(“方形”);
按鈕?bNull=new?按鈕(“清除”);
字符串?str 1 = " ";?//str1和str2存儲兩個輸入數。
字符串?str2 =
字符串?運算符= null?//存儲加、減、乘、除和平方根的符號。
布爾?first = true//檢查輸入是否是第壹個數字。
int?count oper = 0;//累加輸入符號的個數,這些符號將用於加減等運算。
雙倍?結果= 0.0;//臨時存儲結果
雙倍?num1=0.0,num2 = 0.0//兩個輸入數運算時,轉換成雙存儲。
布爾?錯誤=假;?//檢查除數是否為0。
//構造方法
公共?計數器()
{
超級(“計算器”);
t . set editable(false);
for(int?I = 0;我& lt10;I++)//使用for循環向p1添加數字鍵。
{
b[I]=新?button(string . value of(I));
p 1 . add(b[I]);
b[i]。setActionCommand(" number ");
b[i]。addActionListener(this);//調用addActionListener()方法註冊事件偵聽器。
}
p 1 . add(bPoint);
bpoint . setactioncommand(" number ");
p 1 . add(bAdd);?//數字鍵和符號鍵放在面板的p1中。
p 1 . add(bSub);
p 1 . add(bMul);
p 1 . add(bDiv);
p 1 . add(be qual);
p2 . add(bSqrt);root鍵、square鍵和clear鍵放在面板的p2。
p2 . add(bPow);
p2 . add(b null);
badd . setactioncommand(" oper ");
bsub . setactioncommand(" oper ");
bmul . setactioncommand(" oper ");
bdiv . setactioncommand(" oper ");
badd . addactionlistener(this);//調用addActionListener()方法註冊事件偵聽器。
bsub . addactionlistener(this);
bmul . addactionlistener(this);
bdiv . addactionlistener(this);
bpoint . addactionlistener(this);
be qual . addactionlistener(this);
bsqrt . addactionlistener(this);
b null . addactionlistener(this);
p1.setLayout(新?GridLayout(4,4,5,5));//網格布局管理器根據行數和列數將容器分成大小相同的單元。
//每個單元格可以容納壹個組件,這個組件會填充網格單元格,無法控制。
//控制它占據的網格大小。4,4是網格的行數和列數。5,5是編隊之間。
//間距
p2.setLayout(新?FlowLayout());//使用FlowLayout布局管理器設置默認播放布局,默認間距為5個像素。
add(t,“北”);//框架的北面放置輸入框,面板放置在中間和南面。
add(p1,"中心");//將p1加到中間。
加(p2,“南”);//向南添加p2。
setLocation(400,200);//設計按鈕大小
setSize(200,200);//設計窗口大小
setBackground(新?Color(20,200,10));//設置框架的背景,默認為白色。
set visible(true);//將框架設置為可見
addWindowListener(新?WindowAdapter(){?//關閉窗口功能
公共?作廢?窗口關閉(WindowEvent?e)
{
system . exit(0);
}
});
}
//實現接口ActionListener
公共?作廢?actionPerformed(ActionEvent?e)
{
按鈕?temp =(Button)e . getsource();
if(e.getActionCommand()。等於("數字"))
{
如果(第壹)
{
str 1 = str 1+temp . get label();
t . settext(str 1);//在文本框中顯示輸入的str1。
}
其他
{
str 2 = str 2+temp . get label();
t . settext(str 2);//在文本框中顯示輸入的str2。
}
}
不然呢?if(e.getActionCommand()。等於(" oper "))
{
If(str1=="")//如果還沒有輸入數字,點擊運算符執行If。
{
count oper = 0;//如果是,則清除計數。
first = true
}
其他
{
count oper++;//計算輸入符號的數量
if(count oper & gt;1)//如果輸入多個符號,可以計算。
{
getResult();
}
operator = temp . get label();//存儲加減乘除、開平方的符號。
first = false
}
}
不然呢?If(e.getActionCommand()。等於(“處方”))
{
雙倍?d = math . sqrt(double . parse double(str 1));
str 1 = string . value of(d);//將計算結果再次傳遞給str1,為繼續計算做準備。
t . settext(string . value of(d));//將計算結果傳遞給文本框。
first = false//設置為false,即已經輸入了第壹個數字。
}
不然呢?If(e.getActionCommand()。等於("平方"))
{
雙倍?f = math . pow(double . parse double(str 1),2);
str 1 = string . value of(f);
t . settext(string . value of(f));
first = false
}
不然呢?If(e.getActionCommand()。等於("清除"))
{
str 1 = " ";//空的
str2 =
t . settext(" ");//清空文本框。
count oper = 0;//將密鑰計數器清零。
first = true
錯誤=假;
}
不然呢?If(e.getActionCommand()。等於(“等於”))
{
if((str1=="")||(str2== " "))?//如果沒有輸入全部兩個數,單擊等號,執行if。
{
count oper = 0;//將密鑰計數器清零。
first = true
}
其他
{
getResult();
count oper = 0;
}
}
}
//計算結果的方法
公共?作廢?getResult()
{
num 1 = double . parse double(str 1);
num 2 = double . parse double(str 2);
If(operator.equals ("plus "))
{
result = num 1+num 2;
}
不然呢?If(運算符. equals("減號"))
{
result = num 1-num 2;
}
不然呢?If(operator.equals ("times "))
{
result = num 1 * num 2;
}
不然呢?If(operator.equals ("divide by "))
{
If(num2==0.0)//除數為0的處理方法
{
錯誤=真;
}
其他
{
result = num 1/num 2;
}
}
如果(錯誤)
{
t . settext(" error ");
}
其他
{
t . settext(string . value of(result));
str 1 = string . value of(result);//運算結束後,將結果放入str1,str2將被清零,為加減等運算做準備。
str2 =
}
}
//主方法
公共?靜電?作廢?main(String[]?參數)
{
新的?counter();//創建壹個對象“計算器”
}
}