




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、計(jì)算器項(xiàng)目?jī)?nèi)容:編寫一個(gè)Applet,模仿windows附件所帶計(jì)算器的功能,可以幫助用戶完成計(jì)算功能,具體如下圖所示。項(xiàng)目要求:使用圖形的方式借助窗口、菜單、按鈕等標(biāo)準(zhǔn)界面元素和鼠標(biāo)操作,來幫助用戶方便地向計(jì)算機(jī)系統(tǒng)發(fā)出命令,啟動(dòng)操作,并將系統(tǒng)運(yùn)行的結(jié)果同樣以圖形的方式顯示給用戶,這樣更加直觀和生動(dòng); 1. Applet容器中組件的添加與設(shè)置,包括面板以及菜單的使用; 2. 容器中組件的布局管理; 3. Java核心包中數(shù)組、數(shù)學(xué)計(jì)算類的使用; 4. 異常的處理; 5. 事件處理模型中的三類對(duì)象的使用: 1. Event-事件,用戶對(duì)界面操作在java語言上的描述,以類的形式出現(xiàn),例如鍵盤操
2、作對(duì)應(yīng)的事件類是KeyEvent。 2. Event Source-事件源,事件發(fā)生的場(chǎng)所,通常就是各個(gè)組件,例如按鈕Button。 3. Event handler-事件處理者,接收事件對(duì)象并對(duì)其進(jìn)行處理的對(duì)象。 6. 程序中事件處理的流程:1. 計(jì)算流程的細(xì)化 參考代碼:import java.awt.*;import java.lang.*;import javax.swing.*;import javax.swing.event.*;import java.awt.event.*;import java.text.DecimalFormat;public class Calculato
3、r implements ActionListener /導(dǎo)入動(dòng)作監(jiān)聽接口 /設(shè)計(jì)面板中的單位 JFrame frame; JTextField textAnswer; JPanel panel, panel1, panel2, panel3; JMenuBar mainMenu; JTextField textMemory; JLabel labelMemSpace; /labelMemSpace單純做擺設(shè),控制面板的形狀 JButton buttonBk, b
4、uttonCe, buttonC; JButton button; JButton buttonMC, buttonMR, buttonMS, buttonMAdd; JButton buttonDot, buttonAddAndSub, buttonAdd, buttonSub, buttonMul, buttonDiv, buttonMod; JButton buttonSqrt, buttonDao, buttonEqual; JMenu editMenu, viewM
5、enu, helpMenu; JMenuItem copyItem, pasteItem, tItem, sItem, numberGroup, topHelp, aboutCal; DecimalFormat df; /設(shè)置數(shù)據(jù)輸出精度 boolean clickable; /控制當(dāng)前能否按鍵 double memoryd; /使用內(nèi)存中存儲(chǔ)的數(shù)字 int memoryi; double vard, answerd; /用來保存double型數(shù)據(jù)的中間值(vard)和最后結(jié)果(answerd) short k
6、ey = -1, prekey = -1; /key用來保存當(dāng)前進(jìn)行何種運(yùn)算,prekey用來保存前次進(jìn)行何種運(yùn)算 String copy; /做復(fù)制用 JTextArea help; /幫助 JScrollPane scrollHelp; /構(gòu)造函數(shù) public Calculator() clickable = true; answerd = 0; frame = new JFrame("計(jì)算器");&
7、#160; df = new DecimalFormat("0.#"); /設(shè)置數(shù)據(jù)輸出精度(對(duì)于double型值) textAnswer = new JTextField(15); textAnswer.setText(""); textAnswer.setEditable(false); textAnswer.setBackground(new Color(255, 255, 255)
8、; panel = new JPanel(); frame.getContentPane().add(panel); panel1 = new JPanel(); panel2 = new JPanel(); panel.setLayout(new BorderLayout(); /設(shè)計(jì)整個(gè)面板 mainMenu = new JMenuBar()
9、; editMenu = new JMenu("編輯(E)"); viewMenu = new JMenu("查看(V)"); helpMenu = new JMenu("幫助(H)"); copyItem = new JMenuItem(" 復(fù)制(C) Ctrl+C"); copyItem.addActionLi
10、stener(this); pasteItem = new JMenuItem(" 粘貼(V) Ctrl+V"); pasteItem.addActionListener(this); editMenu.add(copyItem); editMenu.add(pasteItem); tItem = new JMenuItem("標(biāo)準(zhǔn)型(T)");
11、0; tItem.addActionListener(this); sItem = new JMenuItem(" 科學(xué)型(S)"); sItem.addActionListener(this); numberGroup = new JMenuItem(" 數(shù)字分組(I)"); numberGroup.addActionListener(th
12、is); viewMenu.add(tItem); viewMenu.add(sItem); viewMenu.add(numberGroup); topHelp = new JMenuItem(" 幫助主題(H)"); topHelp.addActionListener(this); help = new JTextArea(5, 20
13、); scrollHelp = new JScrollPane(help); help.setEditable(false); help.append("執(zhí)行簡(jiǎn)單計(jì)算n"); help.append("1. 鍵入計(jì)算的第一個(gè)數(shù)字。n"); help.append("2. 單擊“+”執(zhí)行加、“-”執(zhí)行減、“*”執(zhí)行乘或“/”執(zhí)行除。n"
14、); help.append("3. 鍵入計(jì)算的下一個(gè)數(shù)字。n"); help.append("4. 輸入所有剩余的運(yùn)算符和數(shù)字。n"); help.append("5. 單擊“=”。n"); aboutCal = new JMenuItem(" 關(guān)于計(jì)算器(A)"); abou
15、tCal.addActionListener(this); helpMenu.add(topHelp); helpMenu.add(aboutCal); mainMenu.add(editMenu); mainMenu.add(viewMenu); mainMenu.add(helpMenu); panel.add(mainMenu, BorderLayout.NORTH);
16、60; panel.add(textAnswer, BorderLayout.CENTER); panel.add(panel1, BorderLayout.SOUTH); panel1.setLayout(new BorderLayout(); textMemory = new JTextField(3); textMemory.setEditable(false); textMemory.
17、setBackground(new Color(217, 217, 217); labelMemSpace = new JLabel(" "); buttonBk = new JButton("Backspace"); buttonBk
18、.setForeground(new Color(255, 0, 0); buttonCe = new JButton("CE"); buttonCe.setForeground(new Color(255, 0, 0); buttonC = new JButton("C"); buttonC.setForeground(new Color(255, 0, 0); button
19、Bk.addActionListener(this); buttonCe.addActionListener(this); buttonC.addActionListener(this); panel1.add(panel2, BorderLayout.NORTH); panel2.setLayout(new FlowLayout(FlowLayout.RIGHT); panel2.add(textMemory);&
20、#160; panel2.add(labelMemSpace); panel2.add(buttonBk); panel2.add(buttonCe); panel2.add(buttonC); panel3 = new JPanel(); panel1.add(panel3, BorderLayout.CENTER); button = new JButt
21、on10; for (int i = 0; i < button.length; i+) buttoni = new JButton(Integer.toString(i); buttoni.setForeground(new Color(0, 0, 255); buttonMC = new JButton("MC");
22、0; buttonMC.setForeground(new Color(255, 0, 0); buttonMR = new JButton("MR"); buttonMR.setForeground(new Color(255, 0, 0); buttonMS = new JButton("MS"); buttonMS.setForeground(new Color(255, 0, 0);
23、; buttonMAdd = new JButton("M+"); buttonMAdd.setForeground(new Color(255, 0, 0); buttonDot = new JButton("."); buttonDot.setForeground(new Color(0, 0, 255); buttonAddAndSub = new JButton("+/-
24、"); buttonAddAndSub.setForeground(new Color(0, 0, 255); buttonAdd = new JButton("+"); buttonAdd.setForeground(new Color(255, 0, 0); buttonSub = new JButton("-"); buttonSub.setForeground
25、(new Color(255, 0, 0); buttonMul = new JButton("*"); buttonMul.setForeground(new Color(255, 0, 0); buttonDiv = new JButton("/"); buttonDiv.setForeground(new Color(255, 0, 0); buttonMod = new
26、 JButton("%"); buttonMod.setForeground(new Color(0, 0, 255); buttonSqrt = new JButton("sqrt"); buttonSqrt.setForeground(new Color(0, 0, 255); buttonDao = new JButton("1/x"); button
27、Dao.setForeground(new Color(0, 0, 255); buttonEqual = new JButton("="); buttonEqual.setForeground(new Color(255, 0, 0); /將所有行為與監(jiān)聽綁定 panel3.setLayout(new GridLayout(4, 6); panel3.add(buttonMC);
28、160; buttonMC.addActionListener(this); panel3.add(button7); button7.addActionListener(this); panel3.add(button8); button8.addActionListener(this); panel3.add(button9); button9.addActionL
29、istener(this); panel3.add(buttonDiv); buttonDiv.addActionListener(this); panel3.add(buttonSqrt); buttonSqrt.addActionListener(this); panel3.add(buttonMR); buttonMR.addActionListener(this);
30、0; panel3.add(button4); button4.addActionListener(this); panel3.add(button5); button5.addActionListener(this); panel3.add(button6); button6.addActionListener(this); panel3.add(butt
31、onMul); buttonMul.addActionListener(this); panel3.add(buttonMod); buttonMod.addActionListener(this); panel3.add(buttonMS); buttonMS.addActionListener(this); panel3.add(button1);
32、60; button1.addActionListener(this); panel3.add(button2); button2.addActionListener(this); panel3.add(button3); button3.addActionListener(this); panel3.add(buttonSub); buttonSub.addActionListe
33、ner(this); panel3.add(buttonDao); buttonDao.addActionListener(this); panel3.add(buttonMAdd); buttonMAdd.addActionListener(this); panel3.add(button0); button0.addActionListener(this);
34、0; panel3.add(buttonAddAndSub); buttonAddAndSub.addActionListener(this); panel3.add(buttonDot); buttonDot.addActionListener(this); panel3.add(buttonAdd); buttonAdd.addActionListener(this);
35、0; panel3.add(buttonEqual); buttonEqual.addActionListener(this); frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE); frame.pack(); frame.show(); /設(shè)置各個(gè)按鈕行為 public void actionPerformed(ActionEvent event)
36、 boolean sign = false; /判斷是否是double型數(shù)參與運(yùn)算,是為true,不是為false Object temp = event.getSource(); try /如果按下數(shù)據(jù)按鈕,將按下的按鈕代表的數(shù)據(jù)插入的當(dāng)前文本框字符串之后 for (int i = 0; i <= 9; i+) &
37、#160; if (temp = buttoni && clickable = true) textAnswer.setText(textAnswer.getText() + Integer.toString(i); /按下'.'按鈕時(shí),判斷當(dāng)前文本框內(nèi)字符串中含不含'.',如果已含,則不允許再插入'.'&
38、#160; if (temp = buttonDot && clickable = true) boolean isDot = false; if (textAnswer.getText().length() = 0) isDot = true;
39、 for (int i = 0; i < textAnswer.getText().length(); i+) if ('.' = textAnswer.getText().charAt(i) isDot = true;
40、0; break; if (isDot = false) textAnswer.setText(textAnswer.getText() + ".");
41、60; if ( (temp = buttonAdd | temp = buttonSub | temp = buttonMul | temp = buttonDiv) && clickable = true) /'+'操作
42、160; if (temp = buttonAdd) switch (prekey) case 0: answerd += Double.parseDouble(textAns
43、wer.getText(); break; case 1: answerd -= Double.parseDouble(textAnswer.getText
44、(); break; case 2: answerd *= Double.parseDouble(textAnswer.getText();
45、160; break; case 3: if (Double.parseDouble(textAnswer.getText() = 0)
46、60; textAnswer.setText("除數(shù)不能為零"); clickable = false;
47、60; else answerd /= Double.parseDouble(textAnswer.getText();
48、 break; default: answerd = Double.parseDouble(textAnswer.getText();
49、0; textAnswer.setText(""); prekey = key = 0; /'-'操作 if (temp = buttonSub)
50、60; switch (prekey) case 0: answerd += Double.parseDouble(textAnswer.getText();
51、0; break; case 1: answerd -= Double.parseDouble(textAnswer.getText();
52、60; break; case 2: answerd *= Double.parseDouble(textAnswer.getText();
53、160; break; case 3: if (Double.parseDouble(textAnswer.getText() = 0)
54、60; textAnswer.setText("除數(shù)不能為零"); clickable = false;
55、60; else answerd /= Double.parseDouble(textAnswer.getText(); break;
56、; default: answerd = Double.parseDouble(textAnswer.getText(); textAnswer.setText("&q
57、uot;); prekey = key = 1; /'*'操作 if (temp = buttonMul) sw
58、itch (prekey) case 0: answerd += Double.parseDouble(textAnswer.getText(); bre
59、ak; case 1: answerd -= Double.parseDouble(textAnswer.getText(); break;
60、160; case 2: answerd *= Double.parseDouble(textAnswer.getText(); break; &
61、#160; case 3: if (Double.parseDouble(textAnswer.getText() = 0) textAnswer.setText("除
62、數(shù)不能為零"); clickable = false; else
63、0; answerd /= Double.parseDouble(textAnswer.getText(); break; default:
64、160; answerd = Double.parseDouble(textAnswer.getText(); textAnswer.setText("");
65、 prekey = key = 2; /'/'操作 if (temp = buttonDiv) switch (prekey)
66、0; case 0: answerd += Double.parseDouble(textAnswer.getText(); break;
67、60; case 1: answerd -= Double.parseDouble(textAnswer.getText(); break;
68、160; case 2: answerd *= Double.parseDouble(textAnswer.getText(); break;
69、case 3: if (Double.parseDouble(textAnswer.getText() = 0) textAnswer.setText("除數(shù)不能為零");
70、; clickable = false; else
71、0; answerd /= Double.parseDouble(textAnswer.getText(); break; default:
72、160; answerd = Double.parseDouble(textAnswer.getText(); textAnswer.setText(""); prekey = key = 3;
73、 /'='操作 if (temp = buttonEqual && clickable = true) /如果連續(xù)按'=',則進(jìn)行連續(xù)運(yùn)算 if (p
74、rekey = 5) if (key = 0) answerd += vard; textAnswer.setText(df.format(answerd);
75、60; if (key = 1) answerd -= vard; textAnswer.setText(df.format(answerd);
76、0; if (key = 2) answerd *= vard; textAnswer.setText(df.format(answerd);
77、; if (key = 3) if (Double.parseDouble(textAnswer.getText() = 0)
78、 textAnswer.setText("除數(shù)不能為零"); clickable = false; else
79、 answerd /= vard; textAnswer.setText(df.format(answerd);
80、60; else vard = Double.parseDouble(textAnswer.getText(); if (key = 0)
81、; prekey = -1; answerd += Double.parseDouble(textAnswer.getText(); textAnswer.setText(df.format(answerd);
82、60; if (key = 1) prekey = -1; answerd -= Double.parseDouble(textAnswer.getText();&
83、#160; textAnswer.setText(df.format(answerd); if (key = 2) prekey
84、 = -1; answerd *= Double.parseDouble(textAnswer.getText(); textAnswer.setText(df.format(answerd);
85、0; if (key = 3) prekey = -1; if (Double.parseDouble(textAnswer.getText() = 0)
86、; textAnswer.setText("除數(shù)不能為零"); clickable = false; else
87、 answerd /= Double.parseDouble(textAnswer.getText(); textAnswer.setText(df.format(answerd);
88、0; prekey = 5; /'%'操作,對(duì)第二個(gè)操作數(shù)除以100 if (temp = bu
89、ttonMod && clickable = true) if (answerd = 0) String s = textAnswer.getText(); textAnswer.setText(s);
90、60; else boolean isDot = false; for (int i = 0; i < textAnswer.getText().length(); i+)
91、; if ('.' = textAnswer.getText().charAt(i) isDot = true; break;
92、 /如果是double數(shù),除100 if (isDot = true) double dtemp = Double.parseDouble(textAnswer.getText();
93、60; dtemp = dtemp / 100.0; textAnswer.setText(Double.toString(dtemp); else
94、160; /如果是int數(shù)但能被100整除,則去掉末尾兩個(gè)零 if (Integer.parseInt(textAnswer.getText() % 100 = 0) int itemp = Integer.parseInt(
95、textAnswer.getText(); itemp /= 100; textAnswer.setText(Integer.toString(itemp);
96、; /如果是int數(shù),但不能被100整除,則按double數(shù)處理 else double dtemp = Double.parseDouble(textAnswer.getTe
97、xt(); dtemp = dtemp / 100.0; textAnswer.setText(Double.toString(dtemp);
98、 /開根號(hào)運(yùn)算 if (temp = buttonSqrt && clickable = true) String s = text
99、Answer.getText(); if (s.charAt(0) = '-') textAnswer.setText("負(fù)數(shù)不能開根號(hào)"); clickable = false;
100、; else textAnswer.setText(Double.toString(java.lang.Math.sqrt(Double. parseDouble(textAnswer.getText();
101、0; /倒數(shù)運(yùn)算 if (temp = buttonDao && clickable = true) if (textAnswer.getText().charAt(0) = '0' && textA
102、nswer.getText().length() = 1) textAnswer.setText("零不能求倒數(shù)"); clickable = false; else
103、 boolean isDec = true; int i, j, k; String s = Double.toString(1 / Double.parseDouble(textAnswer.getText(); &
104、#160; for (i = 0; i < s.length(); i+) if (s.charAt(i) = '.') break; for (j = i + 1; j
105、 < s.length(); j+) if (s.charAt(j) != '0') isDec = false; break;
106、160; if (isDec = true) String stemp = "" f
107、or (k = 0; k < i; k+) stemp += s.charAt(k); textAnswer.setText(stemp);
108、0; else textAnswer.setText(s); /按下'+/-'按鈕時(shí)處理 if (temp = buttonAddAnd
109、Sub && clickable = true) boolean isNumber = true; String s = textAnswer.getText(); for (int i = 0; i < s.length(); i+)
110、160; if (! (s.charAt(i) >= '0' && s.charAt(i) <= '9' | s.charAt(i) = '.' | s.charAt(i) = '-')
111、0; isNumber = false; break; if (isNumber = true) /如果當(dāng)前字符串首字母有'-'號(hào),代表
112、現(xiàn)在是個(gè)負(fù)數(shù),再按下時(shí),則將首符號(hào)去掉 if (s.charAt(0) = '-') textAnswer.setText(""); for (int i = 1; i < s.len
113、gth(); i+) char a = s.charAt(i); textAnswer.setText(textAnswer.getText() + a);
114、; /如果當(dāng)前字符串第一個(gè)字符不是符號(hào),則添加一個(gè)符號(hào)在首字母處 else textAnswer.setText('-' +
115、 s); /計(jì)算器有關(guān)內(nèi)存操作 /'MC'的操作,將內(nèi)存清0 if (temp = buttonMC && clickable = true) memor
116、yd = memoryi = 0; textMemory.setText(""); /'MS'的操作,將當(dāng)前文本框內(nèi)容保存入內(nèi)存,顯示'M' if (temp = buttonMS && clickable = true) boolean isDot = false; textMemory.setText(" M"); for (int i = 0; i < textAnswer.getText().length(); i+)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度購(gòu)房意向金保險(xiǎn)合同
- 二零二五年度車輛事故理賠與車輛維修保養(yǎng)保險(xiǎn)協(xié)議
- 二零二五年度房屋出售居間委托合同(含房產(chǎn)交易風(fēng)險(xiǎn)評(píng)估)
- 2025年度網(wǎng)絡(luò)安全責(zé)任保險(xiǎn)合作協(xié)議書
- 二零二五年度鋼結(jié)構(gòu)維修保養(yǎng)安全責(zé)任書
- 夫妻婚內(nèi)忠誠(chéng)協(xié)議二零二五年度情感維系合同
- 浙江國(guó)企招聘2024嘉興南湖新豐鎮(zhèn)下屬國(guó)資公司招聘3人筆試參考題庫附帶答案詳解
- 九江富和建設(shè)投資集團(tuán)有限公司2024年紀(jì)檢專干招聘筆試參考題庫附帶答案詳解
- 2025廣東汕尾市水務(wù)集團(tuán)有限公司招聘人員8人筆試參考題庫附帶答案詳解
- 交通安全與事故預(yù)防知到智慧樹章節(jié)測(cè)試課后答案2024年秋山東理工大學(xué)
- 中科大《無機(jī)化學(xué)》課件1氣體、液體和溶液的性質(zhì)
- 復(fù)婚合同協(xié)議書模板
- U8-EAI二次開發(fā)說明
- 2006 年全國(guó)高校俄語專業(yè)四級(jí)水平測(cè)試試卷
- 浙江省勞動(dòng)保障監(jiān)察員培訓(xùn)監(jiān)察執(zhí)法程序(林琳)
- 新人教版數(shù)學(xué)四年級(jí)下冊(cè)全冊(cè)表格式教案
- 閩教版(2020版)六年級(jí)下冊(cè)信息技術(shù)整冊(cè)教案
- ad-hoc第二章-ad-hoc網(wǎng)絡(luò)中的MAC協(xié)議
- 二手房買賣合同正式版空白
- 食品銷售經(jīng)營(yíng)者食品安全管理制度(零售)
- 通信電源-概述ppt課件
評(píng)論
0/150
提交評(píng)論