版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
計算器:
1、
界面基本上沒什么問題,再寫到運(yùn)算操作時候碰到問題了,當(dāng)捕獲運(yùn)算符操作,這時,由于這個時候只輸入了一種數(shù),不能進(jìn)行加減乘除運(yùn)算,(核心)因此先判斷運(yùn)算符,默認(rèn)為“=”,再定義一種字符變量來保存?zhèn)鬟M(jìn)來的運(yùn)算符,這樣就達(dá)成了,傳入一種運(yùn)算符的時候,進(jìn)行的是上一次傳進(jìn)來的運(yùn)算符的操作,并把成果保存在一種中間變量中。2、當(dāng)發(fā)現(xiàn)太多的if,else語句嵌套,不防把這些代碼定義為一種辦法3、在響應(yīng)事件的辦法中,如果有,采用調(diào)用辦法,來簡化響應(yīng)時間里面的代碼,并使思路更清晰,在計算器的程序中,加入了兩個boolean類型的變量來達(dá)成控制的目的4、怎么樣設(shè)計代碼,才干使擴(kuò)展性更強(qiáng)呢?現(xiàn)在懂得的只有:解耦,耦合度越低,能夠擴(kuò)張性就更強(qiáng)。[java]
\o"viewplain"viewplain\o"copy"copyimport
java.awt.BorderLayout;
import
java.awt.Color;
import
java.awt.GridLayout;
import
java.awt.event.ActionEvent;
import
java.awt.event.ActionListener;
import
javax.swing.JButton;
import
javax.swing.JFrame;
import
javax.swing.JPanel;
import
javax.swing.JTextField;
/**
*
一種計算器,與Windows附件自帶計算器的原則版功效、界面相仿。
但還不支持鍵盤操作。
*/
public
class
Calculator
extends
JFrame
implements
ActionListener
{
/**
計算器上的鍵的顯示名字
*/
private
final
String[]
KEYS
=
{
"7",
"8",
"9",
"/",
"sqrt",
"4",
"5",
"6",
"*",
"%",
"1",
"2",
"3",
"-",
"1/x",
"0",
"+/-",
".",
"+",
"="
};
/**
計算器上的功效鍵的顯示名字
*/
private
final
String[]
COMMAND
=
{
"Backspace",
"CE",
"C"
};
/**
計算器左邊的M的顯示名字
*/
private
final
String[]
M
=
{
"
",
"MC",
"MR",
"MS",
"M+"
};
/**
計算器上鍵的按鈕
*/
private
JButton
keys[]
=
new
JButton[KEYS.length];
/**
計算器上的功效鍵的按鈕
*/
private
JButton
commands[]
=
new
JButton[COMMAND.length];
/**
計算器左邊的M的按鈕
*/
private
JButton
m[]
=
new
JButton[M.length];
/**
計算成果文本框
*/
private
JTextField
resultText
=
new
JTextField("0");
//
標(biāo)志顧客按的與否是整個體現(xiàn)式的第一種數(shù)字,或者是運(yùn)算符后的第一種數(shù)字
private
boolean
firstDigit
=
true;
//
計算的中間成果。
private
double
resultNum
=
0.0;
//
現(xiàn)在運(yùn)算的運(yùn)算符
private
String
operator
=
"=";
//
操作與否正當(dāng)
private
boolean
operateValidFlag
=
true;
/**
*
構(gòu)造函數(shù)
*/
public
Calculator()
{
super();
//
初始化計算器
init();
//
設(shè)立計算器的背景顏色
this.setBackground(Color.LIGHT_GRAY);
this.setTitle("計算器");
//
在屏幕(500,
300)坐標(biāo)處顯示計算器
this.setLocation(500,
300);
//
不許修改計算器的大小
this.setResizable(false);
//
使計算器中各組件大小適宜
this.pack();
}
/**
*
初始化計算器
*/
private
void
init()
{
//
文本框中的內(nèi)容采用右對齊方式
resultText.setHorizontalAlignment(JTextField.RIGHT);
//
不允許修改成果文本框
resultText.setEditable(false);
//
設(shè)立文本框背景顏色為白色
resultText.setBackground(Color.white);
//
初始化計算器上鍵的按鈕,將鍵放在一種畫板內(nèi)
JPanel
calckeysPanel
=
new
JPanel();
//
用網(wǎng)格布局器,4行,5列的網(wǎng)格,網(wǎng)格之間的水平方向間隔為3個象素,垂直方向間隔為3個象素
calckeysPanel.setLayout(new
GridLayout(4,
5,
3,
3));
for
(int
i
=
0;
i
<
KEYS.length;
i++)
{
keys[i]
=
new
JButton(KEYS[i]);
calckeysPanel.add(keys[i]);
keys[i].setForeground(Color.blue);
}
//
運(yùn)算符鍵用紅色標(biāo)示,其它鍵用藍(lán)色表達(dá)
keys[3].setForeground(Color.red);
keys[8].setForeground(Color.red);
keys[13].setForeground(Color.red);
keys[18].setForeground(Color.red);
keys[19].setForeground(Color.red);
//
初始化功效鍵,都用紅色標(biāo)示。將功效鍵放在一種畫板內(nèi)
JPanel
commandsPanel
=
new
JPanel();
//
用網(wǎng)格布局器,1行,3列的網(wǎng)格,網(wǎng)格之間的水平方向間隔為3個象素,垂直方向間隔為3個象素
commandsPanel.setLayout(new
GridLayout(1,
3,
3,
3));
for
(int
i
=
0;
i
<
COMMAND.length;
i++)
{
commands[i]
=
new
JButton(COMMAND[i]);
commandsPanel.add(commands[i]);
commands[i].setForeground(Color.red);
}
//
初始化M鍵,用紅色標(biāo)示,將M鍵放在一種畫板內(nèi)
JPanel
calmsPanel
=
new
JPanel();
//
用網(wǎng)格布局管理器,5行,1列的網(wǎng)格,網(wǎng)格之間的水平方向間隔為3個象素,垂直方向間隔為3個象素
calmsPanel.setLayout(new
GridLayout(5,
1,
3,
3));
for
(int
i
=
0;
i
<
M.length;
i++)
{
m[i]
=
new
JButton(M[i]);
calmsPanel.add(m[i]);
m[i].setForeground(Color.red);
}
//
下面進(jìn)行計算器的整體布局,將calckeys和command畫板放在計算器的中部,
//
將文本框放在北部,將calms畫板放在計算器的西部。
//
新建一種大的畫板,將上面建立的command和calckeys畫板放在該畫板內(nèi)
JPanel
panel1
=
new
JPanel();
//
畫板采用邊界布局管理器,畫板里組件之間的水平和垂直方向上間隔都為3象素
panel1.setLayout(new
BorderLayout(3,
3));
panel1.add("North",
commandsPanel);
panel1.add("West",
calckeysPanel);
//
建立一種畫板放文本框
JPanel
top
=
new
JPanel();
top.setLayout(new
BorderLayout());
top.add("Center",
resultText);
//
整體布局
getContentPane().setLayout(new
BorderLayout(3,
5));
getContentPane().add("North",
top);
getContentPane().add("Center",
panel1);
getContentPane().add("West",
calmsPanel);
//
為各按鈕添加事件偵聽器
//
都使用同一種事件偵聽器,即本對象。本類的聲明中有implements
ActionListener
for
(int
i
=
0;
i
<
KEYS.length;
i++)
{
keys[i].addActionListener(this);
}
for
(int
i
=
0;
i
<
COMMAND.length;
i++)
{
commands[i].addActionListener(this);
}
for
(int
i
=
0;
i
<
M.length;
i++)
{
m[i].addActionListener(this);
}
}
/**
*
解決事件
*/
public
void
actionPerformed(ActionEvent
e)
{
//
獲取事件源的標(biāo)簽
String
label
=
e.getActionCommand();
if
(label.equals(COMMAND[0]))
{
//
顧客按了"Backspace"鍵
handleBackspace();
}
else
if
(label.equals(COMMAND[1]))
{
//
顧客按了"CE"鍵
resultText.setText("0");
}
else
if
(label.equals(COMMAND[2]))
{
//
顧客按了"C"鍵
handleC();
}
else
if
(".".indexOf(label)
>=
0)
{
//
顧客按了數(shù)字鍵或者小數(shù)點(diǎn)鍵
handleNumber(label);
//
handlezero(zero);
}
else
{
//
顧客按了運(yùn)算符鍵
handleOperator(label);
}
}
/**
*
解決Backspace鍵被按下的事件
*/
private
void
handleBackspace()
{
String
text
=
resultText.getText();
int
i
=
text.length();
if
(i
>
0)
{
//
退格,將文本最后一種字符去掉
text
=
text.substring(0,
i
-
1);
if
(text.length()
==
0)
{
//
如果文本沒有了內(nèi)容,則初始化計算器的多個值
resultText.setText("0");
firstDigit
=
true;
operator
=
"=";
}
else
{
//
顯示新的文本
resultText.setText(text);
}
}
}
/**
*
解決數(shù)字鍵被按下的事件
*
*
@param
key
*/
private
void
handleNumber(String
key)
{
if
(firstDigit)
{
//
輸入的第一種數(shù)字
resultText.setText(key);
}
else
if
((key.equals("."))
&&
(resultText.getText().indexOf(".")
<
0))
{
//
輸入的是小數(shù)點(diǎn),并且之前沒有小數(shù)點(diǎn),則將小數(shù)點(diǎn)附在成果文本框的背面
resultText.setText(resultText.getText()
+
".");
}
else
if
(!key.equals("."))
{
//
如果輸入的不是小數(shù)點(diǎn),則將數(shù)字附在成果文本框的背面
resultText.setText(resultText.getText()
+
key);
}
//
后來輸入的必定不是第一種數(shù)字了
firstDigit
=
false;
}
/**
*
解決C鍵被按下的事件
*/
private
void
handleC()
{
//
初始化計算器的多個值
resultText.setText("0");
firstDigit
=
true;
operator
=
"=";
}
/**
*
解決運(yùn)算符鍵被按下的事件
*
*
@param
key
*/
private
void
handleOperator(String
key)
{
if
(operator.equals("/"))
{
//
除法運(yùn)算
//
如果現(xiàn)在成果文本框中的值等于0
if
(getNumberFromText()
==
0.0)
{
//
操作不正當(dāng)
operateValidFlag
=
false;
resultText.setText("除數(shù)不能為零");
}
else
{
resultNum
/=
getNumberFromText();
}
}
else
if
(operator.equals("1/x"))
{
//
倒數(shù)運(yùn)算
if
(resultNum
==
0.0)
{
//
操作不正當(dāng)
operateValidFlag
=
false;
resultText.setText("零沒有倒數(shù)");
}
else
{
resultNum
=
1
/
resultNum;
}
}
else
if
(operator.equals("+"))
{
//
加法運(yùn)算
resultNum
+=
getNumberFromText();
}
else
if
(operator.equals("-"))
{
//
減法運(yùn)算
resultNum
-=
getNumberFromText();
}
else
if
(operator.equals("*"))
{
//
乘法運(yùn)算
resultNum
*=
getNumberFromText();
}
else
if
(operator.equals("sqrt"))
{
//
平方根運(yùn)算
resultNum
=
Math.sqrt(resultNum);
}
else
if
(operator.equals("%"))
{
//
百分號運(yùn)算,除以100
resultNum
=
resultNum
/
100;
}
else
if
(operator.equals("+/-"))
{
//
正數(shù)負(fù)數(shù)運(yùn)算
resultNum
=
resultNum
*
(-1);
}
else
if
(operator.equals("="))
{
//
賦值運(yùn)算
resultNum
=
getNumberFromText();
}
if
(operateVali
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 福建省漳州市十校聯(lián)盟2024-2025學(xué)年高一上學(xué)期11月期中考試 數(shù)學(xué) 含解析
- 城鄉(xiāng)給排水工程建設(shè)安全基礎(chǔ)管理、構(gòu)筑物、作業(yè)、設(shè)備管理、消防安全、隱患、事故預(yù)防技術(shù)服務(wù)報告模板
- 遼寧省鞍山市海城市某中學(xué)2024-2025學(xué)年九年級上學(xué)期開學(xué)考試數(shù)學(xué)試題(含答案)
- 文書模板-展覽會合同書
- 2024年07版小學(xué)5年級上冊英語第3單元寒假試卷
- 珠寶銷售企業(yè)要繳哪些稅費(fèi)-記賬實(shí)操
- 烴 單元復(fù)習(xí)-2024年高中化學(xué)講義(選擇性必修三)
- 2024年水果、堅果加工品項(xiàng)目資金需求報告代可行性研究報告
- 強(qiáng)化理論的運(yùn)用原理
- 【滬科】期中模擬卷A【21-23章】
- 大數(shù)據(jù)處理和分析服務(wù)合同
- 生物制劑在腎病綜合征中的應(yīng)用和思考
- 申請工程工期順延的函(聯(lián)系單)
- 《第二單元 影視金曲 眺望你的路途》教學(xué)設(shè)計教學(xué)反思-2023-2024學(xué)年初中音樂人音版七年級下冊
- 2024年支部書記廉潔談話記錄內(nèi)容篇
- 心肺復(fù)蘇+AED技術(shù)
- DL-T 1476-2023 電力安全工器具預(yù)防性試驗(yàn)規(guī)程
- 20S805-1 雨水調(diào)蓄設(shè)施-鋼筋混凝土雨水調(diào)蓄池
- 中華民族共同體概論課件專家版3第三講 文明初現(xiàn)與中華民族起源(史前時期)
- 消防安全 牢記心間
- 腳手架搭設(shè)及驗(yàn)收(匯編)
評論
0/150
提交評論