java编写的简单的计算器程序文件_第1页
java编写的简单的计算器程序文件_第2页
java编写的简单的计算器程序文件_第3页
java编写的简单的计算器程序文件_第4页
java编写的简单的计算器程序文件_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、计算器项目容: 编写一个 Applet ,模仿 windows 附件所带计算器的功能,可以帮助用户完成计 算功能,具体如下图所示。项目要求: 使用图形的方式借助窗口、菜单、按钮等标准界面元素和鼠标操作,来帮助用 户方便地向计算机系统发出命令, 启动操作, 并将系统运行的结果同样以图形的方式显示给 用户,这样更加直观和生动;1. Applet 容器中组件的添加与设置,包括面板以及菜单的使用;2. 容器中组件的布局管理;3. Java 核心包中数组、数学计算类的使用;4. 异常的处理;5. 事件处理模型中的三类对象的使用:1. Event- 事件,用户对界面操作在 java 语言上的描述,以类的形

2、式出现,例如键盘操作 对应的事件类是 KeyEvent 。2. Event Source- 事件源,事件发生的场所,通常就是各个组件,例如按钮 Button3. Event handler- 事件处理者,接收事件对象并对其进行处理的对象。6. 程序中事件处理的流程:1. 计算流程的细化参考代码:import java.awt.*;import java.lang.*;import javax.swing.*;import javax.swing.event.*;import java.awt.event.*;import java.text.DecimalFormat;public class

3、 Calculatorimplements ActionListener / 导入动作监听接口/ 设计面板中的单位JFrame frame;JTextField textAnswer;JPanel panel, panel1, panel2, panel3;JMenuBar mainMenu;单纯做摆设,控制面板的形状JTextField textMemory;JLabel labelMemSpace; /labelMemSpaceJButton buttonBk, buttonCe, buttonC;JButton button;JButton buttonMC, buttonMR, but

4、tonMS, buttonMAdd;JButton buttonDot, buttonAddAndSub, buttonAdd, buttonSub, buttonMul, buttonDiv, buttonMod;JButton buttonSqrt, buttonDao, buttonEqual;JMenu editMenu, viewMenu, helpMenu;JMenuItem copyItem, pasteItem, tItem, sItem, numberGroup, topHelp, aboutCal;DecimalFormat df; /设置数据输出精度boolean cli

5、ckable; /控制当前能否按键double memoryd; /使用存中存储的数字int memoryi;double vard, answerd; /用来保存 double 型数据的中间值 (vard) 和最后结果 (answerd)short key = -1, prekey = -1; /key用来保存当前进行何种运算 ,prekey 用来保存前次进行何种运String copy; / 做复制用JTextArea help; / 帮助JScrollPane scrollHelp;/ 构造函数public Calculator() clickable = true;answerd =

6、0;frame = new JFrame( 计算器 );df = new DecimalFormat(0.#); /设置数据输出精度 ( 对于 double 型值 )textAnswer = new JTextField(15);textAnswer.setText();textAnswer.setEditable(false);textAnswer.setBackground(new Color(255, 255, 255);panel = new JPanel();frame.getContentPane().add(panel);panel1 = new JPanel();panel2

7、= new JPanel();panel.setLayout(new BorderLayout();/ 设计整个面板mainMenu = new JMenuBar();editMenu = new JMenu(编辑 (E);viewMenu = new JMenu(查看 (V);helpMenu = new JMenu(帮助 (H);copyItem = new JMenuItem(复制 (C) Ctrl+C);copyItem.addActionListener(this);pasteItem = new JMenuItem(粘贴 (V) Ctrl+V);pasteItem.addActio

8、nListener(this);editMenu.add(copyItem);editMenu.add(pasteItem);tItem = new JMenuItem(标准型 (T);tItem.addActionListener(this);sItem = new JMenuItem(科学型 (S);sItem.addActionListener(this);numberGroup = new JMenuItem(数字分组 (I);numberGroup.addActionListener(this);viewMenu.add(tItem);viewMenu.add(sItem);view

9、Menu.add(numberGroup);topHelp = new JMenuItem(帮助主题 (H);topHelp.addActionListener(this); help = new JTextArea(5, 20); scrollHelp = new JScrollPane(help); help.setEditable(false);help.append(执行简单计算 n);help.append(1.键入计算的第一个数字。 n);help.append(2.单击“ +执”行加、 “-”执行减、 “ *执”行乘或 “ /执”行除。 n);help.append(3.键入计算

10、的下一个数字。 n);help.append(4.输入所有剩余的运算符和数字。 n);help.append(5.单击“ =。”n);aboutCal = new JMenuItem( 关于计算器 (A);aboutCal.addActionListener(this); helpMenu.add(topHelp); helpMenu.add(aboutCal); mainMenu.add(editMenu); mainMenu.add(viewMenu); mainMenu.add(helpMenu); panel.add(mainMenu, BorderLayout.NORTH); pan

11、el.add(textAnswer, BorderLayout.CENTER); panel.add(panel1, BorderLayout.SOUTH); panel1.setLayout(new BorderLayout(); textMemory = new JTextField(3); textMemory.setEditable(false); textMemory.setBackground(new Color(217, 217, 217); labelMemSpace = new JLabel( ); buttonBk = new JButton(Backspace); but

12、tonBk.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); buttonBk.addActionListener(this); buttonCe.addActionListener(this);buttonC.addActionListener(this);panel1.add(panel2,

13、 BorderLayout.NORTH); panel2.setLayout(new FlowLayout(FlowLayout.RIGHT); panel2.add(textMemory);panel2.add(labelMemSpace);panel2.add(buttonBk);panel2.add(buttonCe);panel2.add(buttonC);panel3 = new JPanel();panel1.add(panel3, BorderLayout.CENTER);button = new JButton10;for (int i = 0; i button.length

14、; i+) buttoni = new JButton(Integer.toString(i); buttoni.setForeground(new Color(0, 0, 255);buttonMC = new JButton(MC); 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,

15、 0, 0); buttonMAdd = new JButton(M+); buttonMAdd.setForeground(new Color(255, 0, 0); buttonDot = new JButton(.);buttonDot.setForeground(new Color(0, 0, 255); buttonAddAndSub = new JButton(+/-); buttonAddAndSub.setForeground(new Color(0, 0, 255); buttonAdd = new JButton(+);buttonAdd.setForeground(new

16、 Color(255, 0, 0); buttonSub = new JButton(-);buttonSub.setForeground(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 JButton(%);buttonMod.setForeground(new Color(0

17、, 0, 255); buttonSqrt = new JButton(sqrt);buttonSqrt.setForeground(new Color(0, 0, 255); buttonDao = new JButton(1/x);buttonDao.setForeground(new Color(0, 0, 255); buttonEqual = new JButton(=);buttonEqual.setForeground(new Color(255, 0, 0);/ 将所有行为与监听绑定panel3.setLayout(new GridLayout(4, 6); panel3.ad

18、d(buttonMC);buttonMC.addActionListener(this); panel3.add(button7);button7.addActionListener(this); panel3.add(button8);button8.addActionListener(this);panel3.add(button9); button9.addActionListener(this); panel3.add(buttonDiv); buttonDiv.addActionListener(this); panel3.add(buttonSqrt); buttonSqrt.ad

19、dActionListener(this); panel3.add(buttonMR); buttonMR.addActionListener(this);panel3.add(button4);button4.addActionListener(this);panel3.add(button5);button5.addActionListener(this);panel3.add(button6);button6.addActionListener(this);panel3.add(buttonMul); buttonMul.addActionListener(this); panel3.a

20、dd(buttonMod); buttonMod.addActionListener(this); panel3.add(buttonMS); buttonMS.addActionListener(this); panel3.add(button1);button1.addActionListener(this);panel3.add(button2);button2.addActionListener(this);panel3.add(button3); button3.addActionListener(this); panel3.add(buttonSub); buttonSub.add

21、ActionListener(this); panel3.add(buttonDao);buttonDao.addActionListener(this);panel3.add(buttonMAdd);buttonMAdd.addActionListener(this);panel3.add(button0);button0.addActionListener(this);panel3.add(buttonAddAndSub);buttonAddAndSub.addActionListener(this);panel3.add(buttonDot);buttonDot.addActionLis

22、tener(this);panel3.add(buttonAdd);buttonAdd.addActionListener(this);panel3.add(buttonEqual);buttonEqual.addActionListener(this); frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);frame.pack();frame.show();/ 设置各个按钮行为public void actionPerformed(ActionEvent event) boolean sign = false; /判断是否是 double

23、型数参与运算,是为 true ,不是为 falseObject temp = event.getSource();try / 如果按下数据按钮,将按下的按钮代表的数据插入的当前文本框字符串之后for (int i = 0; i = 9; i+)if (temp = buttoni & clickable = true) textAnswer.setText(textAnswer.getText() + Integer.toString(i);/ 按下.按钮时,判断当前文本框字符串中含不含 . ,如果已含,则不允许再插入 .if (temp = buttonDot & clickable = t

24、rue) boolean isDot = false;if (textAnswer.getText().length() = 0)isDot = true;for (int i = 0; i textAnswer.getText().length(); i+)if (. = textAnswer.getText().charAt(i) isDot = true;break;if (isDot = false)textAnswer.setText(textAnswer.getText() + .);if ( (temp = buttonAdd | temp = buttonSub | temp

25、= buttonMul | temp = buttonDiv) & clickable = true) /+ 操作if (temp = buttonAdd) switch (prekey) case 0:answerd += Double.parseDouble(textAnswer.getText(); break;case 1:answerd -= Double.parseDouble(textAnswer.getText(); break;case 2:answerd *= Double.parseDouble(textAnswer.getText(); break;case 3:if

26、(Double.parseDouble(textAnswer.getText() = 0) textAnswer.setText( 除数不能为零 );clickable = false;elseanswerd /= Double.parseDouble(textAnswer.getText();break;default:answerd = Double.parseDouble(textAnswer.getText();textAnswer.setText();prekey = key = 0;/- 操作if (temp = buttonSub) switch (prekey) case 0:

27、answerd += Double.parseDouble(textAnswer.getText(); break;case 1:answerd -= Double.parseDouble(textAnswer.getText(); break;case 2:answerd *= Double.parseDouble(textAnswer.getText(); break;case 3:if (Double.parseDouble(textAnswer.getText() = 0) textAnswer.setText( 除数不能为零 );clickable = false;elseanswe

28、rd /= Double.parseDouble(textAnswer.getText(); break;default:answerd = Double.parseDouble(textAnswer.getText();textAnswer.setText();prekey = key = 1;/* 操作if (temp = buttonMul) switch (prekey) case 0:answerd += Double.parseDouble(textAnswer.getText(); break;case 1:answerd -= Double.parseDouble(textAn

29、swer.getText(); break;case 2:answerd *= Double.parseDouble(textAnswer.getText(); break;case 3:if (Double.parseDouble(textAnswer.getText() = 0) textAnswer.setText( 除数不能为零 );clickable = false;elseanswerd /= Double.parseDouble(textAnswer.getText(); break;default:answerd = Double.parseDouble(textAnswer.

30、getText();textAnswer.setText();prekey = key = 2;/ 操作if (temp = buttonDiv) switch (prekey) case 0:answerd += Double.parseDouble(textAnswer.getText(); break;case 1:answerd -= Double.parseDouble(textAnswer.getText(); break;case 2:answerd *= Double.parseDouble(textAnswer.getText(); break;case 3:if (Doub

31、le.parseDouble(textAnswer.getText() = 0) textAnswer.setText( 除数不能为零 );clickable = false;elseanswerd /= Double.parseDouble(textAnswer.getText(); break;default:answerd = Double.parseDouble(textAnswer.getText();textAnswer.setText();prekey = key = 3;/= 操作if (temp = buttonEqual & clickable = true) / 如果连续

32、按 =, 则进行连续运算if (prekey = 5) if (key = 0) answerd += vard;textAnswer.setText(df.format(answerd);if (key = 1) answerd -= vard;textAnswer.setText(df.format(answerd);if (key = 2) answerd *= vard;textAnswer.setText(df.format(answerd);if (key = 3) if (Double.parseDouble(textAnswer.getText() = 0) textAnswe

33、r.setText( 除数不能为零 ); clickable = false;else answerd /= vard;textAnswer.setText(df.format(answerd);else vard = Double.parseDouble(textAnswer.getText();if (key = 0) prekey = -1;answerd += Double.parseDouble(textAnswer.getText();textAnswer.setText(df.format(answerd);if (key = 1) prekey = -1;answerd -=

34、Double.parseDouble(textAnswer.getText();textAnswer.setText(df.format(answerd);if (key = 2) prekey = -1;answerd *= Double.parseDouble(textAnswer.getText();textAnswer.setText(df.format(answerd);if (key = 3) prekey = -1;if (Double.parseDouble(textAnswer.getText() = 0) textAnswer.setText( 除数不能为零 );click

35、able = false;else answerd /= Double.parseDouble(textAnswer.getText();textAnswer.setText(df.format(answerd);prekey = 5;/% 操作,对第二个操作数除以 100if (temp = buttonMod & clickable = true) if (answerd = 0) String s = textAnswer.getText();textAnswer.setText(s);else boolean isDot = false;for (int i = 0; i textAn

36、swer.getText().length(); i+)if (. = textAnswer.getText().charAt(i) isDot = true;break;/ 如果是 double 数,除 100if (isDot = true) double dtemp = Double.parseDouble(textAnswer.getText(); dtemp = dtemp / 100.0;textAnswer.setText(Double.toString(dtemp);else / 如果是 int 数但能被 100 整除,则去掉末尾两个零if (Integer.parseInt(

37、textAnswer.getText() % 100 = 0) int itemp = Integer.parseInt(textAnswer.getText();itemp /= 100;textAnswer.setText(Integer.toString(itemp);/ 如果是 int 数,但不能被 100 整除,则按 double 数处理 else double dtemp = Double.parseDouble(textAnswer.getText(); dtemp = dtemp / 100.0;textAnswer.setText(Double.toString(dtemp)

38、;/ 开根号运算if (temp = buttonSqrt & clickable = true) String s = textAnswer.getText();if (s.charAt(0) = -) textAnswer.setText( 负数不能开根号 );clickable = false;elsetextAnswer.setText(Double.toString(java.lang.Math.sqrt(Double. parseDouble(textAnswer.getText();/ 倒数运算if (temp = buttonDao & clickable = true) if

39、 (textAnswer.getText().charAt(0) = 0 &textAnswer.getText().length() = 1) textAnswer.setText( 零不能求倒数 );clickable = false;else boolean isDec = true;int i, j, k;String s = Double.toString(1 / Double.parseDouble(textAnswer.getText();for (i = 0; i s.length(); i+)if (s.charAt(i) = .)break;for (j = i + 1;

40、j s.length(); j+)if (s.charAt(j) != 0) isDec = false;break;if (isDec = true) String stemp = ;for (k = 0; k i; k+)stemp += s.charAt(k);textAnswer.setText(stemp);elsetextAnswer.setText(s);/ 按下 +/- 按钮时处理if (temp = buttonAddAndSub & clickable = true) boolean isNumber = true;String s = textAnswer.getText

41、();for (int i = 0; i = 0 & s.charAt(i) = 9 | s.charAt(i) = . |s.charAt(i) = -) isNumber = false;break;if (isNumber = true) / 如果当前字符串首字母有 - 号 ,代表现在是个负数 ,再按下时 ,则将首符号去掉if (s.charAt(0) = -) textAnswer.setText();for (int i = 1; i s.length(); i+) char a = s.charAt(i);textAnswer.setText(textAnswer.getText(

42、) + a);/ 如果当前字符串第一个字符不是符号,则添加一个符号在首字母处elsetextAnswer.setText(- + s);/ 计算器有关存操作/MC 的操作,将存清 0if (temp = buttonMC & clickable = true) memoryd = memoryi = 0;textMemory.setText();/MS 的操作,将当前文本框容保存入存,显示 Mif (temp = buttonMS & clickable = true) boolean isDot = false;textMemory.setText( M);for (int i = 0; i

43、 textAnswer.getText().length(); i+)if (. = textAnswer.getText().charAt(i) isDot = true;break;/ 如果是 double, 则存入 memoryd(double 存储器 ) if (isDot = true) memoryd = Double.parseDouble(textAnswer.getText(); memoryi = 0; /保证存储器中存放最新的值/ 如果是 int, 则存入 memoryi(int 存储器 )else memoryi = Integer.parseInt(textAnswe

44、r.getText(); memoryd = 0; / 保证存储器中存放最新的值/MR 的操作,将存储器中的信息输出if (temp = buttonMR & clickable = true) if (memoryd != 0) textAnswer.setText(Double.toString(memoryd);if (memoryi != 0) textAnswer.setText(Integer.toString(memoryi);/M+ 的功能,将当前文本框里的数据和存储器中数据相加后,再存入存储器if (temp = buttonMAdd & clickable = true) boolean isDot = false;for (int i = 0; i textAnswer.getText().len

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论