您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > Java实验报告计算器
院系:计算机科学学院专业:年级:课程名称:姓名(学号):指导教师:2016年月日年级班号组号专业实验名称实验室实验目的和要求一.实验目的:1.熟悉Java集成开发环境Eclipse(或NetBeans等);2.掌握Java系统图形用户界面的基本工作原理;3.掌握Java系统图形用户界面的设计步骤;4.掌握图形用户界面的事件响应机制;5.掌握图形用户界面的各种常用的基本组件的使用方法及事件响应;6.掌握图形用户界面各种布局策略的设计与使用;7.掌握绘制各种基本图形的方法;8.掌握鼠标事件编程方法;二.实验要求:(填写具体的题目要求。)概要设计(整体流程)importjava.awt.BorderLayout;importjava.awt.Color;importjava.awt.GridLayout;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JPanel;importjavax.swing.JTextField;/***一个计算器,与Windows附件自带计算器的标准版功能、界面相仿。但还不支持键盘操作。*/publicclassCalculatorextendsJFrameimplementsActionListener{/**计算器上的键的显示名字*/privatefinalString[]KEYS={7,8,9,/,sqrt,4,5,6,*,%,1,2,3,-,1/x,0,+/-,.,+,=};/**计算器上的功能键的显示名字*/privatefinalString[]COMMAND={Backspace,CE,C};/**计算器左边的M的显示名字*/privatefinalString[]M={,MC,MR,MS,M+};/**计算器上键的按钮*/privateJButtonkeys[]=newJButton[KEYS.length];/**计算器上的功能键的按钮*/privateJButtoncommands[]=newJButton[COMMAND.length];/**计算器左边的M的按钮*/privateJButtonm[]=newJButton[M.length];/**计算结果文本框*/privateJTextFieldresultText=newJTextField(0);//标志用户按的是否是整个表达式的第一个数字,或者是运算符后的第一个数字privatebooleanfirstDigit=true;//计算的中间结果。privatedoubleresultNum=0.0;//当前运算的运算符privateStringoperator==;//操作是否合法privatebooleanoperateValidFlag=true;/***构造函数*/详细设计(算法实现)publicCalculator(){super();//初始化计算器init();//设置计算器的背景颜色this.setBackground(Color.LIGHT_GRAY);this.setTitle(计算器);//在屏幕(500,300)坐标处显示计算器this.setLocation(500,300);//不许修改计算器的大小this.setResizable(false);//使计算器中各组件大小合适this.pack();}/***初始化计算器*/privatevoidinit(){//文本框中的内容采用右对齐方式resultText.setHorizontalAlignment(JTextField.RIGHT);//不允许修改结果文本框resultText.setEditable(false);//设置文本框背景颜色为白色resultText.setBackground(Color.WHITE);//初始化计算器上键的按钮,将键放在一个画板内JPanelcalckeysPanel=newJPanel();//用网格布局器,4行,5列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素calckeysPanel.setLayout(newGridLayout(4,5,3,3));for(inti=0;iKEYS.length;i++){keys[i]=newJButton(KEYS[i]);calckeysPanel.add(keys[i]);keys[i].setForeground(Color.blue);}//运算符键用红色标示,其他键用蓝色表示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);实验结果及分析//初始化功能键,都用红色标示。将功能键放在一个画板内JPanelcommandsPanel=newJPanel();//用网格布局器,1行,3列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素commandsPanel.setLayout(newGridLayout(1,3,3,3));for(inti=0;iCOMMAND.length;i++){commands[i]=newJButton(COMMAND[i]);commandsPanel.add(commands[i]);commands[i].setForeground(Color.red);}//初始化M键,用红色标示,将M键放在一个画板内JPanelcalmsPanel=newJPanel();//用网格布局管理器,5行,1列的网格,网格之间的水平方向间隔为3个象素,垂直方向间隔为3个象素calmsPanel.setLayout(newGridLayout(5,1,3,3));for(inti=0;iM.length;i++){m[i]=newJButton(M[i]);calmsPanel.add(m[i]);m[i].setForeground(Color.red);}//下面进行计算器的整体布局,将calckeys和command画板放在计算器的中部,//将文本框放在北部,将calms画板放在计算器的西部。//新建一个大的画板,将上面建立的command和calckeys画板放在该画板内JPanelpanel1=newJPanel();//画板采用边界布局管理器,画板里组件之间的水平和垂直方向上间隔都为3象素panel1.setLayout(newBorderLayout(3,3));panel1.add(North,commandsPanel);panel1.add(Center,calckeysPanel);//建立一个画板放文本框JPaneltop=newJPanel();top.setLayout(newBorderLayout());top.add(Center,resultText);//整体布局getContentPane().setLayout(newBorderLayout(3,5));getContentPane().add(North,top);getContentPane().add(Center,panel1);getContentPane().add(West,calmsPanel);//为各按钮添加事件侦听器}for(inti=0;iCOMMAND.length;i++){commands[i].addActionListener(this);}for(inti=0;iM.length;i++){//都使用同一个事件侦听器,即本对象。本类的声明中有implementsActionListenerfor(inti=0;iKEYS.length;i++){keys[i].addActionListener(this);}for(inti=0;iCOMMAND.length;i++){commands[i].addActionListener(this);}for(inti=0;iM.length;i++){m[i].addActionListener(this);}}/***处理事件*/publicvoidactionPerformed(ActionEvente){//获取事件源的标签Stringlabel=e.getActionCommand();if(label.equals(COMMAND[0])){//用户按了Backspace键handleBackspace();}elseif(label.equals(COMMAND[1])){//用户按了CE键resultText.setText(0);}elseif(label.equals(COMMAND[2])){//用户按了C键handleC();}elseif(0123456789..indexOf(label)=0){//用户按了数字键或者小数点键handleNumber(label);//handlezero(zero);}else{//用户按了运算符键handleOperator(label);}}/***处理Backspace键被按下的事件*/privatevoidhandleBackspace(){Stringtext=resultText.getText();inti=text.length();if(i0){//退格,将文本最后一个字符去掉;text=text.substring(0,i-1);if(text.length()==0){//如果文本没有了内容,则初始化计算器的各种值resultText.setText(0);firstDigit=true;operator==;}else{//显示新的文本resultText.setText(text);}}}/***处理数字键被按下的事件**@paramkey*/privatevoidhandleNumber(Stringkey){if(firstDigit){//输入的第一个数字resultText.setText(key);}elseif((key.equals(.))&&(resultText.getText().indexOf(.)0)){//输入的是小数点,并且之前没有小数点,则将小数点附在结果文本框的后面resultText.setText(resultText.getText()+.);}elseif(!key.equals(.)){//如果输入的不是小数点,则将数字附在结果文本框的后面resultText.setText(resultText.getText()+key);}//以后输入的肯定不是第一个数字了firstDigit=false;}/***处理C键被按下的事件*/privatevoidhandleC(){//初始化计算器的各种值resultText.setText(0);firstDigit=true;operator==;}/***处理运算符键被按下的事件**@paramkey*/privatevoidhandleOperator(Stringkey){if(operator.equals(/)){//除法运算//如果当前结果文本框中的值等于0if(getNumberFromText()==0.0){//操作不合法operateValidFlag=false;resultText.setText(除数不能为零);}else{resultNum/=getNumberFromText();}}el
本文标题:Java实验报告计算器
链接地址:https://www.777doc.com/doc-6171753 .html