java-计算器实验报告
- 格式:doc
- 大小:178.50 KB
- 文档页数:17
java简易计算器实训报告(一)Java简易计算器实训报告实训目的通过编写一个简易的Java计算器,深入了解Java基础语法,并掌握对象的属性和行为。
实训过程本次实训采用Eclipse编写Java程序,具体过程如下:1.首先创建一个名为“Calaulator”的Java项目,再在其中创建一个名为“Calaulator”的类。
2.在Calaulator类中定义一个名为“calculate”的方法,此方法接收3个参数:一个char类型的操作符,两个double类型的操作数,返回值为double类型。
3.在方法体中根据传入的操作符进行相应的加、减、乘、除运算。
4.创建一个主函数,在其中调用calculate方法并输出结果。
实训收获通过本次实训,我掌握了Java的基础语法,并深入了解了对象的属性和行为。
同时,我还学会了如何使用Eclipse编写Java程序,提高了自己的编程水平。
实训总结Java语言作为一种强大而稳定的编程语言,具有广泛的应用场景。
通过本次实训,我深刻认识到Java的重要性,并希望能够在以后的学习中不断探索Java语言的更多使用方法。
实训反思在实训过程中,我发现自己对Java的基础语法了解不够深入,导致编写代码时遇到一些困难,需要不断查阅相关资料。
同时,在调试代码时也遇到了许多问题,发现自己对IDE的使用不够熟练,需要更多的实践和学习。
实训展望通过本次实训,我已经初步掌握了Java的基础语法和编程思想,但我认为这只是一个开始。
我需要不断地练习,深入了解Java的各种特性,将其应用到实际开发中。
未来,我希望能够成为一名优秀的Java工程师,为社会做出自己的贡献。
结语本次Java简易计算器实训让我收获颇丰,不仅加深了对Java的认识,也增强了自己的编程实践能力。
希望今后能够在Java的学习和实践中不断提高自己,取得更好的成果。
Java_计算器实验报告学校:成都理工大学学院:信心科学与技术学院专业:计算机科学与技术班级:2010级计科2班姓名:梁光祥学号:201005030218指导老师:冷小鹏目录一、实验目的 (3)二、类结构图(UML图) (3)三、总体设计 (3)四、详细设计 (4)五、程序截图 (4)六、总结 (8)一、实验目的1.熟悉掌握java GUI应用程序的开发设计2.了解计算器各个按钮及面板之间的结构关系3.熟悉计算器机制二、类结构图(UML图)三、总体设计程序中在PanelClass类中添加了四个面板,分别是:四、详细设计在PanelClass中,定义了三个监听器类和还有三个成员函数,分别是:1.InsertAction实现ActionListener中的actionPerformed(ActionEvent e)用于点击数字按钮时候的触发函数mandAction实现ActionListener中的actionPerformed(ActionEvent e),用于双目运算符是的触发函数。
3.S_CommadnAction实现ActionListener中的actionPerformed(ActionEvent e),用于单目运算符的触发函数。
4.public void calculate(double x),双目运算符实现函数5.public void calculate(),单目运算符实现函数6.和一个构造函数JFframe类中,定义一个构造函数,实现对主窗口的初始化及主面板的归附。
Cal_MainClass类中,定义一个main函数。
五、程序截图1.初始化截图2.简单运算截图实现7+9=16操作:键入7加入“+”键入9键入“=”3.缓冲区操作截图下面是实现,缓冲区8+9=17操作:清空缓冲区键入8将8保存至缓冲区键入9加入“M+”六、总结1.在设计计算器过程中,对容器、面板、布局及彼此间的联系和操作不熟悉。
Java计算器实验报告计算机032胡勇健030952182005年5月5日目录1.设计名称与要求2.各模块功能的介绍和实现3.系统的特色和不足4.参考书一. 实验名称及其要求:A)名称: java计算器的设计B)要求:1.实验目的:图形界面设计。
熟悉java.awt包中的组件,掌握图形界面设计方法,理解委托事件处理模型。
2.题意:请设计并实现Windows系统中“计算器”的窗口及功能。
3.实验要求:(1)设计图形界面添加菜单:窗口上添加各种组件及菜单,并处理组件及菜单的事件监听程序。
(2)运算:实现多种运算,保证运算正确性。
二.各模块功能的介绍和实现:A)GUI图形界面的组件:a)所用到的Java类库包:java.awt.*; 基本的图形界面组件来源于awt包。
java.awt.event.*; 事件的属性处理来源于awt.event包。
javax.swing.*; swing组件增加了awt包中所不具备的各种优越功能。
java.awt.datatransfer.*; 用于计算器与外部的程序进行复制粘贴。
b)所用的各部分图形组件的定义:Frame mainFrame; //主框架JTextField answerText; //显示计算结果JTextField memoryState; //显示计算器内存的使用情况MenuBar menuGroup; //菜单栏Menu editMenu,viewMenu,helpMenu; //编辑,查看,帮助菜单MenuItem copyItem,pasteItem; //复制,粘贴MenuItem standardModel; //标准型CheckboxMenuItem numGroup; //数字分组MenuItem aboutCal; //关于计算器Button buttonBackSpace,buttonCE,buttonC; //退格,清除,清空按钮Button buttonMC,buttonMR,buttonMS,buttonMADD; //内存操作按钮Button buttonNum[]; //数字按钮Button buttonAdd,buttonSub,buttonMul,buttonDiv; //+,-,*,/Button buttonDot,buttonSign,buttonEqual; //. +/- =Button buttonSqrt,buttonMod,buttonReciprocal; //sqrt % 1/xc)组件的初始化以及对界面的排版对主框架的初始化操作void initMainFrame()函数是对主框架进行初始化,设置其框架大小270*250,初始位置270*250,背景颜色Color.lightGray,是否显示true,能否改变窗口大小false,以及增加了addWindowListener委托事件,当关闭窗口时调用System.exit(0) 系统指令,结束程序。
实验:计算器java程序班级:XXXXXXX 姓名:XXXXX学号:XXXXXXXX 实验地点:XXXXX一、实验目的:通过制作一个计算器让我们了解到组件的运用以及如何制作一个窗口,怎么样使用各种布局管理器,怎么样注册事件的监听,以及怎么样设置按钮或者说组件的监听程序,学会使用java语言的语法规则,掌握接口的使用,了解组建的背景颜色的设置等方法。
二、实验要求:1.编写一个java计算器程序;2. 运用组件的方法来布局窗口,运用接口,事件监听程序来完成计算器的功能。
三,实验步骤1、新建一个类,注册各种组件;2、获取窗格;设置布局管理器;3、为各个组件注册监听程序;4、设置组件的事件监听程序;5、运行程序,对结果进行截图;四,设计思路:1.界面设置布置模块:使用了awt,swing的类里面的方法来完成界面的布置。
其中,容器布置选择了BorderLayout方法来布置面板,选择了GirdLayout方法来布置按钮。
文本区域接收字符从数字按钮的监听中获得。
按钮是常规思路添加到面板上。
并为按钮注册监听。
2.监听程序思路:使用tf.getText()+"n"来实现获得文本区域显示按钮字符串,n等于所设置监听的数字按钮。
tf.setText()来保存并输出获得的字符串。
使用Double.parseDouble()实现文本区域字符串转换成Double 型数据来完成计算。
把ft.setText()中的字符转换成数字。
使用biaozhi==n。
的方法来获得启发值。
完成运算符按钮的监听。
构造方法,运用biaozhi=n,来完成加减乘除小数点的不同运算。
运算后获得结果flag3。
ft.setText()获得值显示在文本区域上3.数字按钮输入使用循环会更加简单,减少了十个数字按钮的逐个输入,添加,注册监听for (int i=0;i<=9;i++){btn[i]=new Button(String.valueOf(i));centerPanel.add(btn[i]);btn[i].addActionListener();}五,程序实现:package yyy;import java.awt.BorderLayout;//导入边界布局管理器类import java.awt.Button;import java.awt.GridLayout;//导入网格布局管理器类import java.awt.TextField;//导入文本区域类import java.awt.event.ActionEvent;//导入事件类import java.awt.event.ActionListener;//导入事件监听者类import javax.swing.JButton;//导入按钮类import javax.swing.JFrame;//导入窗体import javax.swing.JPanel;//导入面板public class jisuanqi8{//新建对象,在构造函数中进行初始化JFrame f;//新建窗体对象JButton buttonzero,buttondot,buttonequal;//新建按钮“0”“.”“=”JButton buttonplus,buttonminus,buttonmultiple,buttondevision, buttontozero;//新建按钮“+”“-”“*”“/”和归零按钮JPanel panelwest,panelcenter,paneleast,centerPanel;//新建三个面板 TextField tf;//新建文本区域对象private Button[] btn=new Button[15];public jisuanqi8(){//初始化对象tf=new TextField(30);//构造空文本字段,字符宽度为30f =new JFrame("简单计算器");//构造窗体对象,名称为“简单计算器”panelcenter=new JPanel();//构造面板,放到窗体中央panelwest=new JPanel();//构造面板,放到窗体西边paneleast=new JPanel();//构造面板,放到窗体东边Handle h=new Handle();//新建Handle类对象,Handle类为事件监听类//构造按钮“0”“.”“=”,注册事件监听器,设置1行3列的布局,添加到到西边的面板buttonzero=new JButton("0");buttondot=new JButton(".");buttonequal=new JButton("=");buttonzero.addActionListener(h);buttondot.addActionListener(h);buttonequal.addActionListener(h);panelwest.setLayout(new GridLayout(3,1));panelwest.add(buttonzero);panelwest.add(buttondot);panelwest.add(buttonequal);//构造操作按钮“+”“-”“*”“/”“sin”“>0”,其中“>0”为归零按钮buttonplus=new JButton("+");buttonminus=new JButton("-");buttonmultiple=new JButton("*");buttondevision=new JButton("/");buttontozero=new JButton("归零");paneleast.setLayout(new GridLayout(3,1));//设置西边的布局为3行1列//将操作按钮“+”“-”“*”“/”“sin”“>0”添加到西边的面板中paneleast.add(buttonplus);paneleast.add(buttonminus);paneleast.add(buttonmultiple);paneleast.add(buttondevision);paneleast.add(buttontozero);//为操作按钮“+”“-”“*”“/”“sin”“>0”注册监听器buttonplus.addActionListener(h);buttonminus.addActionListener(h);buttonmultiple.addActionListener(h);buttondevision.addActionListener(h);buttontozero.addActionListener(h);f.setLayout(new BorderLayout());//设置窗体为边界布局f.add(paneleast,"East");//将东边面板paneleast添加到窗体的东边f.add(tf,BorderLayout.NORTH); //将tf文本区域添加到窗体的北边,即顶部f.add(panelwest,BorderLayout.WEST);//将panelwest面板添加到窗体西边f.add(panelcenter,BorderLayout.CENTER);//将panelcenter面板添加到窗体中间f.pack();//设置窗体大小,适合其子组件的首选大小和布局f.setLocation(500,500);//设置窗体显示位置为(500,500)f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置布局窗体默认关闭方式f.setVisible(true);//设置窗体可见for (int i=0;i<=9;i++){btn[i]=new Button(String.valueOf(i));centerPanel.add(btn[i]);btn[i].addActionListener(h);}}public static void main(String[] args) {new jisuanqi7();//主方法中新建对象}class Handle implements ActionListener{//实现动作监听器类int biaozhi=0;//此标志标志加减乘除操作double flag1=0,flag2=0,flag3=0;//flag1、flag2为两个操作数,flag3为结果@Overridepublic void actionPerformed(ActionEvent e) { //方法重写try{//此处可能会产生异常,用try、catch捕捉异常,不用处理if(e.getSource()==buttondot){//小数点tf.setText(tf.getText()+".");}if(e.getSource()==buttontozero){//归零操作tf.setText("");}else if(e.getSource()==btn){//按键9操作tf.setText(tf.getText()+"i");flag1=Double.parseDouble(tf.getText());}if(e.getSource()==buttonplus){//加法操作tf.setText("");flag2=flag1;biaozhi=0;}if(e.getSource()==buttonminus){//减法操作tf.setText("");flag2=flag1;biaozhi=1;}if(e.getSource()==buttonmultiple){//乘法操作tf.setText("");flag2=flag1;biaozhi=2;}if(e.getSource()==buttondevision){//除法操作tf.setText("");flag2=flag1;biaozhi=3;}if(e.getSource()==buttonequal){//等号操作,利用biaozhi判断进行相应加减乘除操作if(biaozhi==0){flag3=flag1+flag2;}if(biaozhi==1){flag3=flag1-flag2;}if(biaozhi==2){flag3=flag1*flag2;}if(biaozhi==3){flag3=flag1/flag2;}tf.setText(flag3+"");}}catch(Exception ex){ }}}}六、实验结果截图输入5555:使用除法。
一、目標:通過Java程序開發實訓使學生掌握《面向對象程序設計(Java)》課堂講授の內容,靈活運用到Java程序の開發與設計中。
二、要求:按時參加Java程序開發實訓訓練,不得遲到和早退;獨立完成程序設計;按要求撰寫實踐報告。
三、詳細內容:使用《面向對象程序設計(Java)》課程講授內容,編寫一個簡單の計算器,要求實現如下功能:1.進行圖形界面設計通過圖形界面設計,掌握Frame類、Panel類、5種布局管理器、文本框、標簽及按鈕の使用方法。
2.實現計算器の基本功能包括加減乘除四則運算、清除結果等功能。
3.實現計算器の存儲計算功能包括清空、使用清零、退格。
和基本運算4.類の屬性及所用到の方法布局布局:整個界面(Frame)采用BorderLayout布局P1組件添加到Frameの南部P1采用默認の流式布局添加文本框P2組件添加到Frameの中部P2采用網格布局四行五列放各種按鈕用到の類:mycalKeyAdapterWindowAdapterMyCal類:mycal類の屬性:b[];按鈕數組保存各種按鍵以後放到Panel2中tf;文本匡顯示輸入及運算結果num1,num2,jieguo運算數char c,ch;運算符號,ch為輸入の運算符號,c保存ch輸入の“+-*/”Panel p1,p2;//兩個組件p1放文本匡p2放按鈕P2の布局為網格布局5行4列mycal類の方法:1.構造方法:設置標題;設置文本框;文本框中添加匿名內置類(KeyAdapter)實現鍵盤の輸入和運算;將各種組件添加到容器,設置各種按鍵の顏色;添加WindowListenr監聽器設置關閉按鈕;2.Main方法:新建一個mycal類;4.actionPerformed 方法:設置按鈕の輸入和運算,當按下運算數將其顯示在文本匡中如果之前清零則將零去除當按下運算符將其保存在c中並將文本匡內容清空當按下等號判斷字符cの符號進行相應の運算並將結果顯示在文本框中。
课程设计报告实验内容:综合课程设计相关课程: Java程序设计学期: 2009-2010学年第2学期学时学分: 48学时 3学分专业班级: xxxxxxxx学号: xxxxxxxxxxx 姓名: xxxxxxx 指导老师: xxx 提交日期: xxxx年 xx月xx日题目JAVA课程设计一、实验目的通过课程设计,主要要达到两个目的,一是检验和巩固专业知识、二是提高综合素质和能力。
信科0821班学生的课程设计主要是Java语言程序设计的实现。
通过该课程设计,可以将学生课堂上掌握的理论知识与处理数据的业务相结合,以检验我们同学们掌握知识的宽度、深度及对知识的综合运用能力。
二、实验环境硬件环境CPU:AMD5000+ 双核主板:华硕M2N-X 显示器:1024x768/256色操作系统:Windows XP;JDK:jdk-6u18-windows-i586;运行环境以及调试软件:JCreator Pro三、实验内容内容一:设计一个计算器,利用它可以进行简单的四则运算(加、减、乘、除、开方)等,但仅限于十进制下,此外还可以进行(八进制,十进制,十六进制)之间的相互转换。
内容二:设计一个记事本,菜单中要求有文件,编辑,和帮助。
文件中有新建、打开、保存和退出;编辑中有剪切、复制和粘贴;帮助中显示开发人和版本信息。
内容三:编写tic-tac-toe游戏程序。
即 3*3的9个方格子,每人下一次看谁先连成一行3个四、算法分析、设计与描述1.算法分析和设计内容(1)算法分析:首先,设计对输入数字的进行转换,不进行转换操作则默认为十进制,然后进行符号转换操作以及正弦函数等,接着可以进行加减乘除等运算,添加“C”、“CE”按钮进行退格和清空操作,清空操作显示“0”,最后在帮助中显示开发人信息。
功能及界面设计:功能1:按下数字键在液晶平上会显示数字,这时计算器最基本的功能。
功能2:输入数字后,点击进制转换,可转换成二、八进制;按“exp”“log”键,则进行e次幂运算和自然对数运算;按“tan”“cos”“sin”则进行三角函数运算。
java计算器实验报告面向对象编程(Java)综合实验检查单教师:*** 学期:学生信息学号姓名 2009110 ***院系计算机与信息工程学院年级 09级软件工程实验说明制作简易计算器实验名称:设计计算器描述(包括设计思想、实现步骤):一(计算器基本设计概述:一.设计包涵基本功能的计算器,功能包括:1. 基本的加减乘除运算。
2. 数据记忆保存清楚功能。
3. 鼠标、键盘的监听操作。
二(设计计算器面板,按钮包括:1.0到9十个基本数字按钮。
2.加减乘除运算符等号按钮,和小数点按钮。
3.Backspace按钮(后退) CE按钮(清零键)C按钮(归零键),MC按钮(清除内存) MS按钮(记忆数据),MR按钮(读取记忆数据),+/-按钮(正负)。
二(计算器程序设计步骤:1(设计public class Calculator extends JFrame implements ActionListener,KeyListener主类,主类继承JFrame,监听接口ActionListener,KeyListenerPanel型:Panel1 = new JPanel(),放置文本Panel2 = new JPanel() 放置按钮JTextField型:tfResult = new JTextField() 文本域用于显示计算过程及结果String型:recentNum = null; 保存最近运算数recentOperation = null保存最近运算符memory 保存记忆数据Boolean型:isNew 用于判断继续输入还是接着输入flag 用于判断是否存在记忆数据包涵public void addButton (Container c, String s)方法添加需要的按钮并实现监听,设置按钮字体,背景,并添加主类中继承的监听器public void actionPerformed(ActionEvent e)方法实现按键事件,string s 用于得到按键的字符else if(s.equals("=")) 调用void equalaction(ActionEvent e)实现数字运算按键M 将当前运算数赋给memoy,并改变flag状态按键m 将当前文本域设置为记忆memory中数据按键Q 将当前memory清除,并改变flag为初始状态void equalaction(ActionEvent e)方法处理数据运算,double last,now分别表示运算结果和当前运算数Double.parseDouble(recentNum)转换数据类型判断运算符号实现+,-,*,/,运算保存于last中,并显示在结果文本域中public Calculator()方法构造实现计算器的图形界面,实现窗口关闭。
C语言程序设计实训报告书班级惠普测试142学号 1408090213姓名闫伟明指导教师庞志永实训项目名称:支持表达式求值的计算器的设计与实现1.实训目的所设计的计算器可以进行简单的表达式求值,并支持括号运算。
通过该课程设计,了解数组的使用,学会用函数实现栈等操作。
2.实训要求(1)应用所学知识,完成实训目标。
(2)程序能够正常运行,运算结果正确,满足设计要求。
3.功能描述要求程序具有输入界面,该输入界面至少有一个文本框和一个按钮。
用户在文本输入框内输入需要计算的表达式,并单击按钮后,程序可以计算出该表达式的值。
用户输入的表达式可能是符合数学规则的表达式,也可能是不符合数学规则的表达式。
如果输入的表达式正确,则计算器能够给出正确结果,否则,程序输出错误信息,并尽可能指出错误的位置及错误的类型。
4.总体设计5.程序实现及相关描述前缀表达式(前缀记法、波兰式)前缀表达式的运算符位于操作数之前。
前缀表达式的计算机求值:从右至左扫描表达式,遇到数字时,将数字压入堆栈,遇到运算符时,弹出栈顶的两个数,用运算符对它们做相应的计算(栈顶元素op 次顶元素),并将结果入栈;重复上述过程直到表达式最左端,最后运算得出的值即为表达式的结果。
例如前缀表达式“- × + 3 4 5 6”:(1) 从右至左扫描,将6、5、4、3压入堆栈;(2) 遇到+运算符,因此弹出3和4(3为栈顶元素,4为次顶元素,注意与后缀表达式做比较),计算出3+4的值,得7,再将7入栈;(3) 接下来是×运算符,因此弹出7和5,计算出7×5=35,将35入栈;(4) 最后是-运算符,计算出35-6的值,即29,由此得出最终结果。
可以看出,用计算机计算前缀表达式的值是很容易的。
将中缀表达式转换为前缀表达式:遵循以下步骤:<br/>* (1) 初始化两个栈:运算符栈S1和储存中间结果的栈S2;<br/>* (2) 从右至左扫描中缀表达式;<br/>* (3) 遇到操作数时,将其压入S2;<br/>* (4) 遇到运算符时,比较其与S1栈顶运算符的优先级:<br/>* (4-1) 如果S1为空,或栈顶运算符为右括号“)”,则直接将此运算符入栈;* (4-2) 否则,若优先级比栈顶运算符的较高或相等,也将运算符压入S1;<br/> * (4-3) 否则,将S1栈顶的运算符弹出并压入到S2中,再次转到(4-1)与S1中新的栈顶运算符相比较;<br/>* (5) 遇到括号时:<br/>* (5-1) 如果是右括号“)”,则直接压入S1;<br/>* (5-2) 如果是左括号“(”,则依次弹出S1栈顶的运算符,并压入S2,直到遇到右括号为止,此时将这一对括号丢弃;<br/>* (6) 重复步骤(2)至(5),直到表达式的最左边;<br/>* (7) 将S1中剩余的运算符依次弹出并压入S2;<br/>* (8) 依次弹出S2中的元素并输出,结果即为中缀表达式对应的前缀表达式。
《Java课程设计》计划班级:物联网111班任课教师:一.设计目的1.通过课程设计把《Java程序设计》这门课所学的内容融会贯通,学会Java设计程序、开发应用软件的基本能力。
2.通过设计能使学生更好掌握JAVA面向对象基本编程技术和方法。
3.培养学生查阅文献资料及编写技术报告的能力。
二.设计题目简易科学计算器内容:(1)通过菜单可以切换简易计算器和科学计算器。
简易计算器:实现连续的+、-、*、/运算,计算功能符合四则运算法。
科学计算器:至少包括开方、平方、幂运算、1/n等操作。
(2)图形用户界面美观、布局合理、功能操作简便。
三.设计要求《Java课程设计》是物联网专业学生在完成《Java程序设计》课程学习后进行的一门专业实践课程,是培养学生综合运用所学知识解决专业相关问题的重要环节,是对学生实际工作能力的具体训练和考察过程。
本次课程设计的题目使用Java语言来开发。
要求每个学生可以独立完成上述Java基础设计题目,同时可以通过同学间的讨论,共同编写比较复杂的综合课程设计题目。
希望学学能够努力实践,提高实际动手能力。
要求每个学生必须参加,并完成课程设计任务:(1)每个学生明确设计目的和要求,根据自己的实际情况选择一个题目,实际独立动手完成这个题目,编写出程序代码,并调试通过。
(2)每个学生必须在上机前做好充分准备,每次上机必须目的明确,事先编写好程序代码,要在规定的时间和地点上机调试。
要求利用MyEclipse开发工具调试通过(3)每个学生程序完成后撰写《Java课程设计报告》,按照《Java课程设计计划》后面附带的报告模版格式实际撰写。
(4)结果形式:程序文件压缩包一个,课程设计报告一份。
四.进度安排(1)准备阶段(1天):选择设计题目、了解设计目的要求、查阅相关资料。
(2)程序模块设计分析(1天):程序总体设计、详细设计(3)代码编写调试(2天):程序代码编写、调试、测试。
五.参考文献[1] 胡伏湘.Java程序设计实用教程(第2版).北京:清华大学出版社,2009[2] 叶核亚.Java程序设计实用教程(第3版).北京:电子工业出版社,2010[3] 耿详义. Java课程设计(第1版). 北京:清华大学出版社,2004六.成绩评定成绩按五级制评定。
计算器实验报告一、实验目的1.熟悉java图形用户界面的设计原理和程序结构2.能设计复核问题要求的图形用户界面程序3.熟悉java awt和swing的组合4.掌握常用组建的事件借口5.会应用awt和swing组件进行应用程序设计二、实验内容运用所学的java语言,实现计算器的基础功能,及科学计算器的一些功能。
三、实验设计按钮。
第二类按钮式功能式按钮,例如+、-、*、/、%等按钮。
JMenuBar按钮设置了工具条菜单栏,这次总共设置了两个菜单。
这两种按钮需要注册监听,需要实现public void actionPerformed(ActionEvent e)函数,通过e.getSource()可以识别注册监听的按钮,并进行相应的操作。
计算器界面如下所示:菜单栏代码如下:jmb=new JMenuBar();jm1=new JMenu("选项(V)");//助记符,Alt+vjm1.setMnemonic('v');jm2=new JMenu("关于(A)");jm2.setMnemonic('a');jmi1=new JMenuItem("标准");//注册监听jmi1.addActionListener(this);jmi1.setActionCommand("标准");jmi2=new JMenuItem("科学");jmi2.addActionListener(this);jmi2.setActionCommand("科学");jmi3=new JMenuItem("关于计算器");jmi3.addActionListener(this);jmi3.setActionCommand("about");窗体设置的代码:this.setIconImage(new ImageIcon("images/计算器图片.jpg").getImage());this.setTitle("计算器");this.setBounds(500, 180,300,300);this.setVisible(true);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setResizable(false);时间监听处理函数代码://通常在按钮被按下,或双击一个列表项或选中某个菜单时发生@Overridepublic void actionPerformed(ActionEvent e) { // TODO Auto-generated method stubif(e.getSource()==jb[18]){//等于double result=0;num2=Double.parseDouble(jtf.getText());switch(ch){case'+':result=num1+num2;break;case'-':result=num1-num2;break;case'*':result=num1*num2;break;case'/':if(num2!=0)result=num1/num2;elsejtf.setText("0");break;case'%':if(num2!=0)result=num1%num2;elsejtf.setText("0");break;case'e':result=num1*Math.pow(10, num2);break;}if(num2!=0){if(result==(int)(result))jtf.setText((int)(result)+"");elsejtf.setText(result+"");}isdecnum=false;}四、实验总结:通过对计算器窗体的编写我熟悉java图形用户界面的设计原理和程序结构熟悉java awt和swing的组合。
学会将书本上的知识运用在实际中,提升了编程能力。
五.代码:package com.java;import java.io.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.*;public class Calculator_1 extends JFrame implements ActionListener{ /*** @param args*/JTextField jtf=null; //文本框JButton jb[]=null;//按钮JPanel jp1=null;JPanel jp2=null;JMenuBar jmb=null; //菜单条JMenu jm1=null,jm2=null; //菜单项JMenuItem jmi1=null,jmi2=null,jmi3=null; //菜单子选项boolean isdecnum=false; //判断目前是否为小数char ch; //获得运算符号double num1=0,num2=0;public static void main(String[] args) {// TODO Auto-generated method stubCalculator_1 cal=new Calculator_1();}public Calculator_1(){jmb=new JMenuBar();jm1=new JMenu("选项(V)");//助记符,Alt+vjm1.setMnemonic('v');jm2=new JMenu("关于(A)");jm2.setMnemonic('a');jmi1=new JMenuItem("标准");//注册监听jmi1.addActionListener(this);jmi1.setActionCommand("标准");jmi2=new JMenuItem("科学");jmi2.addActionListener(this);jmi2.setActionCommand("科学");jmi3=new JMenuItem("关于计算器");jmi3.addActionListener(this);jmi3.setActionCommand("about");jm1.add(jmi1);jm1.add(jmi2);jm2.add(jmi3);this.setJMenuBar(jmb);jmb.add(jm1);jmb.add(jm2);jtf=new JTextField("0",20);jtf.setHorizontalAlignment(JTextField.RIGHT); jtf.setEditable(false);this.add(jtf,"North");jb=new JButton[32];jp1=new JPanel();jp1.setLayout(new GridLayout(5,4,5,5));//jp1中的按钮jb[0]=new JButton("C");jb[1]=new JButton("<-");jb[2]=new JButton("+/-");jb[3]=new JButton("sqrt");jb[4]=new JButton("7");jb[5]=new JButton("8");jb[6]=new JButton("9");jb[7]=new JButton("/");jb[8]=new JButton("4");jb[9]=new JButton("5");jb[10]=new JButton("6");jb[11]=new JButton("*");jb[12]=new JButton("1");jb[13]=new JButton("2");jb[14]=new JButton("3");jb[15]=new JButton("-");jb[16]=new JButton("0");jb[17]=new JButton(".");jb[18]=new JButton("=");jb[19]=new JButton("+");//添加到jp1中for(int i=0;i<=19;i++){jp1.add(jb[i],i);jb[i].addActionListener(this);}this.add(jp1);jp2=new JPanel();jp2.setLayout(new GridLayout(3,4,5,5));//jp2中的按钮jb[20]=new JButton("sin");jb[21]=new JButton("cos");jb[22]=new JButton("tan");jb[23]=new JButton("π");jb[24]=new JButton("pow");jb[25]=new JButton("x²");jb[26]=new JButton("㏒");jb[27]=new JButton("ln");jb[28]=new JButton("Int");jb[29]=new JButton("n!");jb[30]=new JButton("%");jb[31]=new JButton("1/x");for(int i=20;i<jb.length;i++){jp2.add(jb[i],i-20);jb[i].addActionListener(this);}this.setIconImage(new ImageIcon("images/计算器图片.jpg").getImage()); this.setTitle("计算器");this.setBounds(500, 180,300,300);this.setVisible(true);this.setDefaultCloseOperation(EXIT_ON_CLOSE);this.setResizable(false);}public void Num(int num){if(jtf.getColumns()<=20){String s_num=jtf.getText();if(s_num.equals("0")){s_num=num+"";jtf.setText(s_num);}else{s_num+=num;jtf.setText(s_num);}}}//通常在按钮被按下,或双击一个列表项或选中某个菜单时发生@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stubif(e.getSource()==jb[4]){Num(7);}else if(e.getSource()==jb[5]){Num(8);}else if(e.getSource()==jb[6]){Num(9);}else if(e.getSource()==jb[7]){//除法num1=Double.parseDouble(jtf.getText());ch='/';isdecnum=false;jtf.setText("0");}else if(e.getSource()==jb[8]){Num(4);}else if(e.getSource()==jb[9]){Num(5);}else if(e.getSource()==jb[10]){Num(6);}else if(e.getSource()==jb[11]){//乘法num1=Double.parseDouble(jtf.getText());ch='*';isdecnum=false;jtf.setText("0");}else if(e.getSource()==jb[12]){Num(1);}else if(e.getSource()==jb[13]){Num(2);}else if(e.getSource()==jb[14]){Num(3);}else if(e.getSource()==jb[15]){//减法num1=Double.parseDouble(jtf.getText());ch='-';isdecnum=false;jtf.setText("0");}else if(e.getSource()==jb[16]){Num(0);}else if(e.getSource()==jb[17]){//小数点if(!isdecnum){if(jtf.getColumns()<=20){String s_num=jtf.getText();s_num+=".";jtf.setText(s_num);isdecnum=true;}}}else if(e.getSource()==jb[18]){//等于double result=0;num2=Double.parseDouble(jtf.getText());switch(ch){case '+':result=num1+num2;break;case '-':result=num1-num2;break;case '*':result=num1*num2;break;case '/':if(num2!=0)result=num1/num2;elsejtf.setText("0");break;case '%':if(num2!=0)result=num1%num2;elsejtf.setText("0");break;case 'e':result=num1*Math.pow(10, num2);break;}if(num2!=0){if(result==(int)(result))jtf.setText((int)(result)+"");elsejtf.setText(result+"");}isdecnum=false;}else if(e.getSource()==jb[19]){//加法num1=Double.parseDouble(jtf.getText());ch='+';isdecnum=false;jtf.setText("0");}else if(e.getSource()==jb[0]){//Cjtf.setText("0");num1=0;num2=0;}else if(e.getSource()==jb[1]){//<-String s_num=jtf.getText();if(s_num.length()>1){s_num=s_num.substring(0,s_num.length()-1);jtf.setText(s_num);}elsejtf.setText("0");}else if(e.getSource()==jb[2]){//+/-double d_num=Double.parseDouble(jtf.getText());if(d_num!=0){d_num=0-d_num;if(d_num==(int)(d_num))jtf.setText((int)(d_num)+"");elsejtf.setText(d_num+"");}elsejtf.setText("0");}else if(e.getSource()==jb[3]){//sqrtdouble d_num=Double.parseDouble(jtf.getText());if(d_num>=0){d_num=Math.sqrt(d_num);if(d_num==(int)(d_num)){jtf.setText((int)(d_num)+"");}elsejtf.setText(d_num+"");}}else if(e.getSource()==jb[20]){//sindouble d_num=Double.parseDouble(jtf.getText());if(d_num>=0){d_num=Math.sin(d_num);if(d_num==(int)(d_num)){jtf.setText((int)(d_num)+"");}elsejtf.setText(d_num+"");}}else if(e.getSource()==jb[21]){//cosdouble d_num=Double.parseDouble(jtf.getText());if(d_num>=0){d_num=Math.cos(d_num);if(d_num==(int)(d_num)){jtf.setText((int)(d_num)+"");}elsejtf.setText(d_num+"");}}else if(e.getSource()==jb[22]){//tandouble d_num=Double.parseDouble(jtf.getText());if(d_num>=0){d_num=Math.tan(d_num);if(d_num==(int)(d_num)){jtf.setText((int)(d_num)+"");}elsejtf.setText(d_num+"");}}else if(e.getSource()==jb[23]){//πjtf.setText(Math.PI+"");}else if(e.getSource()==jb[24]){//pownum1=Double.parseDouble(jtf.getText());ch='e';isdecnum=false;jtf.setText("0");}else if(e.getSource()==jb[25])//平方double d_num=Double.parseDouble(jtf.getText());d_num*=d_num;if(d_num==(int)(d_num)){jtf.setText((int)(d_num)+"");}elsejtf.setText(d_num+"");}else if(e.getSource()==jb[26]){//logdouble d_num=Double.parseDouble(jtf.getText());d_num=Math.log10(d_num);if(d_num==(int)(d_num)){jtf.setText((int)(d_num)+"");}elsejtf.setText(d_num+"");}else if(e.getSource()==jb[27]){//lndouble d_num=Double.parseDouble(jtf.getText());d_num=Math.log1p(d_num);if(d_num==(int)(d_num)){jtf.setText((int)(d_num)+"");}elsejtf.setText(d_num+"");}else if(e.getSource()==jb[28]){//IntString s_num=jtf.getText();String ss_num[]=new String[2];ss_num=s_num.split("\\.");jtf.setText(ss_num[0]+"");}else if(e.getSource()==jb[29])//n!double d_num=Double.parseDouble(jtf.getText());if(d_num==(int)(d_num)){int i=1;int i_num=1;while(i<=(int)(d_num)){i_num*=i;i++;}jtf.setText(i_num+"");}}else if(e.getSource()==jb[30]){//%num1=Double.parseDouble(jtf.getText());ch='%';isdecnum=false;jtf.setText("0");}else if(e.getSource()==jb[31]){//1/xif(jtf.getText()!="0"){double d_num=Double.parseDouble(jtf.getText());d_num=1/d_num;if(d_num==(int)(d_num))jtf.setText((int)(d_num)+"");elsejtf.setText(d_num+"");}}else if(e.getActionCommand().equals("科学")){this.remove(jp1);this.add(jp2);this.add(jp1,"South");this.setBounds(500, 180,300,320);}else if(e.getActionCommand().equals("标准"))this.remove(jp2);this.add(jp1);this.setBounds(500, 180,300,300);}else if(e.getActionCommand().equals("about")){AboutCal ac=new AboutCal();}}}package com.java;import java.awt.*;import javax.swing.*;public class AboutCal extends JFrame{/*** @param args*/JLabel jl1=null,jl2=null,jl3=null;public AboutCal(){jl1=new JLabel("计算器");jl1.setHorizontalAlignment(JLabel.CENTER);jl2=new JLabel("作者:xxx");jl3=new JLabel("功能:本计算器实现了一些较为简单的计算器功能。