还剩13页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
电子信息学院实验报告书课程名面向对象程序设计J__a题目实验05可视化程序设计实验类别【验证、设计】班级BX1210学号28姓名俞佳星
一、实验目的
(1)熟悉GUI基本容器JFrame、JPanel等容器的基本使用方法;
(2)熟悉布局管理的作用及其使用方法;
(3)熟悉常用基本控件(按钮、文本框、标签、列表框、菜单)的使用;
(4)重点掌握J__a的__管理机制和程序执行过程
二、实验内容
(1)先运行程序下面程序,然后按【思考问题】来验证、分析并修改程序以下源程序为ExpGui工程文件下的CalculatorUsingInnerClass.j__apackageimportimportimportimportimportimportimportimportimportimportimportimportimportimportimport@SuppressWarningsserialclassCalculatorUsingInnerClassextendsJFrame{JPaneltopPal__nPalbotPal;JTextFieldtfOprand1;JTextFieldtfOprand2;JTextFieldtfRst;JComboBoxlstOperator;JLabellabAddlabRstlabInfo;JButtonbtnOperatebtnReset;ContainerconPan=null;publicCalculatorUsingInnerClass{topPal=newJPanel;topPal.setLayoutnewFlowLayout;__nPal=newJPanel;__nPal.setLayoutnewFlowLayout;botPal=newJPanel;botPal.setLayoutnewFlowLayout;tfOprand1=newJTextField8;tfOprand2=newJTextField8;tfRst=newJTextField8;StringlstItem[]={+-*/};lstOperator=newJComboBoxlstItem;labRst=newJLabel=;btnOperate=newJButton开始计算;btnOperate.setFontnewFont楷体Font.BOLD16;btnReset=newJButton清除;labInfo=newJLabel;labInfo.setForegroundColor.RED;labInfo.setFontnewFont黑体Font.PLAIN16;conPan=this.getContentPane;conPan.setLayoutnewBorderLayout;conPan.add__nPalBorderLayout.__NTER;conPan.addtopPalBorderLayout.NORTH;conPan.addbotPalBorderLayout.SOUTH;__nPal.addtfOprand1;__nPal.addlstOperator;__nPal.addtfOprand2;__nPal.addlabRst;__nPal.addtfRst;topPal.addbtnOperate;topPal.addbtnReset;botPal.addlabInfo;//设置窗口居中显示this.setLocationRelativeTonull;this.setVisibletrue;btnOperate.addActionListenernewActionListener{@OverridepublicvoidactionPerformedActionEvente{if.equalstfOprand
1.getText.trim||.equalstfOprand
1.getText.trimlabInfo.setText加数和被加数均不允许为空!;else{doublea=Double.valueOftfOprand
1.getText.doubleValue;doubleb=Double.valueOftfOprand
2.getText.doubleValue;charoperator=StringlstOperator.getSelectedItem.charAt0;doubleresult=0;switchoperator{case+:result=a+b;break;case-:result=a-b;break;case*:result=a*b;break;case/:result=a/b;break;}tfRst.setTextString.valueOfresult;}}};btnReset.addActionListenernewActionListener{@OverridepublicvoidactionPerformedActionEvente{tfOprand
1.setText;tfOprand
2.setText;tfRst.setTextString.valueOf;labInfo.setText以上文本框中的内容已清除!;}};this.addWindowListenernewWindowAdapter{publicvoidwindowClosingWindowEvente{System.exit0;}};}publicstaticvoid__inStringargs[]{CalculatorUsingInnerClass__inFrame=newCalculatorUsingInnerClass;__inFrame.setSize400150;__inFrame.setTitleGUI实验——简单算术运算器;}}【思考问题】1基本容器JFrame比起Frame有何特点?请解释构造方法中的conPan=this.getContentPane;语句是何作用?如果将程序中的JFrame类换作Frame类,是否仍需要此条语句?2该程序中使用了哪几个容器,它们分别采用了什么布局管理器,在不同的布局管理器中,各组件加入容器中的次序对组件的显示位置有无影响?3程序中有多处地方用到this,这个this指什么?4分析__执行方法publicvoidactionPerformedActionEvente里面的下面三条语句的执行过程,它们分别起何作用?doublea=Double.valueOftfOprand
1.getText.doubleValue;doubleb=Double.valueOftfOprand
2.getText.doubleValue;charoperator=StringlstOperator.getSelectedItem.charAt0;该方法的形式参数ActionEvente是何含义,对应的实参是如何形成的?5程序中对按钮__的监听采用了匿名内部类的方法,请在不修改程序任何功能的前提下将程序修改成有名内部类监听的方式,原类名不变,内部类的名字为BtnHandlerUsingInnerClass,并使用该类的一个对象同时监听界面上的两个按钮6请在不修改程序任何功能的前提下,将程序修改成外部类监听的方式,原类名不变,外部监听类的名字为BtnHandlerUsingExternalClass,并使用该类的一个对象同时监听界面上的两个按钮7请在不修改程序任何功能的前提下,将程序修改成容器类监听的方式,原类名不变8如果将程序中的newWindowAdapter改写为newWindowListener,则该匿名类的实现部分需要如何修改?
三、实验结果(修改过的关键代码和运行结果截图)
(1)
①JFrame与Frame的最大区别在于前者不能直接通过add方法加入组件,也不能通过setLayout方法设置布局每个JFame都有一个与之关联的内容面板contentPane,只能针对这个contentPane设置布局及加入组件如果将JFrame类换做Frame类,则不再需要这条语句
②这个程序中使用了一个Contaniner容器和3个JPanel容器Contaniner采用了便捷布局管理器边界布局管理器需要设置插入的位置,如果插入相同位置,先前插入的组件会被覆盖3个JPanel采用了流失布局管理器流失布局管理器按照从左到右的先后顺序布置在容器中如果一行布置不下,则会自动换行流失布局管理器中插入的顺序决定了组件在容器中的大致位置
③程序中多次用到的this是指向CalculatorUsingInnerClas这个类的引用通过this这个引用,我们可以直接对这个窗体进行设置
④第一条语句先用getText获得tfOprand1中的文本然后再用Double.valueOf将String类型的内容转化成double型数值最后将Double对象的值用doubleValue转化成double基本数据类型给a第二条语句和第一条语句一样,将tfOprand2的文本内容转成double型数值给b第三条语句先用getSelectedItem获得lsOperator中选择的内容,再将所获得内容强制转化成String类型最后再通过charAt方法获得该字符串中的第一个字符,并返回给operator@SuppressWarningsserialclassCalculatorUsingInnerClassextendsJFrame{JPaneltopPal__nPalbotPal;JTextFieldtfOprand1;JTextFieldtfOprand2;JTextFieldtfRst;JComboBoxStringlstOperator;JLabellabAddlabRstlabInfo;JButtonbtnOperatebtnReset;ContainerconPan=null;publicCalculatorUsingInnerClass{topPal=newJPanel;topPal.setLayoutnewFlowLayout;__nPal=newJPanel;__nPal.setLayoutnewFlowLayout;botPal=newJPanel;botPal.setLayoutnewFlowLayout;tfOprand1=newJTextField8;tfOprand2=newJTextField8;tfRst=newJTextField8;StringlstItem[]={+-*/};lstOperator=newJComboBoxStringlstItem;labRst=newJLabel=;btnOperate=newJButton开始计算;btnOperate.setFontnewFont楷体Font.BOLD16;btnReset=newJButton清除;labInfo=newJLabel;labInfo.setForegroundColor.RED;labInfo.setFontnewFont黑体Font.PLAIN16;conPan=this.getContentPane;conPan.setLayoutnewBorderLayout;conPan.add__nPalBorderLayout.__NTER;conPan.addtopPalBorderLayout.NORTH;conPan.addbotPalBorderLayout.SOUTH;__nPal.addtfOprand1;__nPal.addlstOperator;__nPal.addtfOprand2;__nPal.addlabRst;__nPal.addtfRst;topPal.addbtnOperate;topPal.addbtnReset;botPal.addlabInfo;//设置窗口居中显示this.setLocationRelativeTonull;this.setVisibletrue;BtnHandlerUsingInnerClassALx=newBtnHandlerUsingInnerClass;btnOperate.addActionListenerALx;btnReset.addActionListenerALx;}classBtnHandlerUsingInnerClassimplementsActionListener{@OverridepublicvoidactionPerformedActionEvente{ife.getActionCom__nd.compareTo开始计算==0{if.equalstfOprand
1.getText.trim||.equalstfOprand
1.getText.trimlabInfo.setText加数和被加数均不允许为空!;else{doublea=Double.valueOftfOprand
1.getText.doubleValue;doubleb=Double.valueOftfOprand
2.getText.doubleValue;charoperator=StringlstOperator.getSelectedItem.charAt0;doubleresult=0;switchoperator{case+:result=a+b;break;case-:result=a-b;break;case*:result=a*b;break;case/:result=a/b;break;}tfRst.setTextString.valueOfresult;}}else{tfOprand
1.setText;tfOprand
2.setText;tfRst.setTextString.valueOf;labInfo.setText以上文本框中的内容已清除!;}}}publicstaticvoid__inStringargs[]{CalculatorUsingInnerClass__inFrame=newCalculatorUsingInnerClass;__inFrame.setSize400150;__inFrame.setTitleGUI实验——简单算术运算器;}}
⑥packageimportimportimportimportimportimportimportimport;import;importimportimportimportimportimport@SuppressWarningsserialclassCalculatorUsingInnerClassextendsJFrame{JPaneltopPal__nPalbotPal;JTextFieldtfOprand1;JTextFieldtfOprand2;JTextFieldtfRst;JComboBoxStringlstOperator;JLabellabAddlabRstlabInfo;JButtonbtnOperatebtnReset;ContainerconPan=null;publicCalculatorUsingInnerClass{topPal=newJPanel;topPal.setLayoutnewFlowLayout;__nPal=newJPanel;__nPal.setLayoutnewFlowLayout;botPal=newJPanel;botPal.setLayoutnewFlowLayout;tfOprand1=newJTextField8;tfOprand2=newJTextField8;tfRst=newJTextField8;StringlstItem[]={+-*/};lstOperator=newJComboBoxStringlstItem;labRst=newJLabel=;btnOperate=newJButton开始计算;btnOperate.setFontnewFont楷体Font.BOLD16;btnReset=newJButton清除;labInfo=newJLabel;labInfo.setForegroundColor.RED;labInfo.setFontnewFont黑体Font.PLAIN16;conPan=this.getContentPane;conPan.setLayoutnewBorderLayout;conPan.add__nPalBorderLayout.__NTER;conPan.addtopPalBorderLayout.NORTH;conPan.addbotPalBorderLayout.SOUTH;__nPal.addtfOprand1;__nPal.addlstOperator;__nPal.addtfOprand2;__nPal.addlabRst;__nPal.addtfRst;topPal.addbtnOperate;topPal.addbtnReset;botPal.addlabInfo;//设置窗口居中显示this.setLocationRelativeTonull;this.setVisibletrue;BtnHandlerUsingExternalClassALx=newBtnHandlerUsingExternalClassthis;btnOperate.addActionListenerALx;btnReset.addActionListenerALx;}publicstaticvoid__inStringargs[]{CalculatorUsingInnerClass__inFrame=newCalculatorUsingInnerClass;__inFrame.setSize400150;__inFrame.setTitleGUI实验——简单算术运算器;}}classBtnHandlerUsingExternalClassimplementsActionListener{CalculatorUsingInnerClass__inFrame;publicvoidactionPerformedActionEvente{ife.getActionCom__nd.compareTo开始计算==0{if.equals__inFrame.tfOprand
1.getText.trim||.equals__inFrame.tfOprand
1.getText.trim__inFrame.labInfo.setText加数和被加数均不允许为空!;else{doublea=Double.valueOf__inFrame.tfOprand
1.getText.doubleValue;doubleb=Double.valueOf__inFrame.tfOprand
2.getText.doubleValue;charoperator=String__inFrame.lstOperator.getSelectedItem.charAt0;doubleresult=0;switchoperator{case+:result=a+b;break;case-:result=a-b;break;case*:result=a*b;break;case/:result=a/b;break;}__inFrame.tfRst.setTextString.valueOfresult;}}else{__inFrame.tfOprand
1.setText;__inFrame.tfOprand
2.setText;__inFrame.tfRst.setTextString.valueOf;__inFrame.labInfo.setText以上文本框中的内容已清除!;}}publicBtnHandlerUsingExternalClassCalculatorUsingInnerClass__inFrame{this.__inFrame=__inFrame;}}
⑦packageimportimportimportimportimportimportimportimport;import;importimportimportimportimportimport@SuppressWarningsserialclassCalculatorUsingInnerClassextendsJFrameimplementsActionListener{JPaneltopPal__nPalbotPal;JTextFieldtfOprand1;JTextFieldtfOprand2;JTextFieldtfRst;JComboBoxStringlstOperator;JLabellabAddlabRstlabInfo;JButtonbtnOperatebtnReset;ContainerconPan=null;publicCalculatorUsingInnerClass{topPal=newJPanel;topPal.setLayoutnewFlowLayout;__nPal=newJPanel;__nPal.setLayoutnewFlowLayout;botPal=newJPanel;botPal.setLayoutnewFlowLayout;tfOprand1=newJTextField8;tfOprand2=newJTextField8;tfRst=newJTextField8;StringlstItem[]={+-*/};lstOperator=newJComboBoxStringlstItem;labRst=newJLabel=;btnOperate=newJButton开始计算;btnOperate.setFontnewFont楷体Font.BOLD16;btnReset=newJButton清除;labInfo=newJLabel;labInfo.setForegroundColor.RED;labInfo.setFontnewFont黑体Font.PLAIN16;conPan=this.getContentPane;conPan.setLayoutnewBorderLayout;conPan.add__nPalBorderLayout.__NTER;conPan.addtopPalBorderLayout.NORTH;conPan.addbotPalBorderLayout.SOUTH;__nPal.addtfOprand1;__nPal.addlstOperator;__nPal.addtfOprand2;__nPal.addlabRst;__nPal.addtfRst;topPal.addbtnOperate;topPal.addbtnReset;botPal.addlabInfo;//设置窗口居中显示this.setLocationRelativeTonull;this.setVisibletrue;btnOperate.addActionListenerthis;btnReset.addActionListenerthis;}publicstaticvoid__inStringargs[]{CalculatorUsingInnerClass__inFrame=newCalculatorUsingInnerClass;__inFrame.setSize400150;__inFrame.setTitleGUI实验——简单算术运算器;}publicvoidactionPerformedActionEventarg0{ifarg
0.getActionCom__nd.compareTo开始计算==0{if.equalstfOprand
1.getText.trim||.equalstfOprand
1.getText.trimlabInfo.setText加数和被加数均不允许为空!;else{doublea=Double.valueOftfOprand
1.getText.doubleValue;doubleb=Double.valueOftfOprand
2.getText.doubleValue;charoperator=StringlstOperator.getSelectedItem.charAt0;doubleresult=0;switchoperator{case+:result=a+b;break;case-:result=a-b;break;case*:result=a*b;break;case/:result=a/b;break;}tfRst.setTextString.valueOfresult;}}else{tfOprand
1.setText;tfOprand
2.setText;tfRst.setTextString.valueOf;labInfo.setText以上文本框中的内容已清除!;}}}
⑧this.addWindowListenernewWindowListener{publicvoidwindowClosingWindowEvente{System.exit0;}@OverridepublicvoidwindowActivatedWindowEventarg0{//TODO自动生成的方法存根}@OverridepublicvoidwindowClosedWindowEventarg0{//TODO自动生成的方法存根}@OverridepublicvoidwindowDeactivatedWindowEventarg0{//TODO自动生成的方法存根}@OverridepublicvoidwindowDeiconifiedWindowEventarg0{//TODO自动生成的方法存根}@OverridepublicvoidwindowIconifiedWindowEventarg0{//TODO自动生成的方法存根}@OverridepublicvoidwindowOpenedWindowEventarg0{//TODO自动生成的方法存根}};
四、实验体会在本次试验中,我熟悉GUI基本容器JFrame、JPanel等容器的基本使用方法;这是J__A图形界面的基础中的基础同时我们熟悉了布局管理的作用及其使用方法;掌握了J__A中的多种布局管理器通过J__A自带的布局管理器,我们就能很快的布置J__A的简单界面我们也在这次的试验中熟悉了常用基本控件(按钮、文本框、标签、列表框、菜单)的使用;使得我们的界面更加丰富,更加人性化同时我们重点掌握了一下J__a的__管理机制和程序执行过程当然本次试验也不是一帆风顺的期间出现过各种问题困扰我最久的就是如何使用外部类来监听__虽然声明外部类很简单,但是因为不在一个类中,我们很难读到我们所监听的类内部的内容同时也很难改变我们所监听的类,或者其他类中的内容在经过了多次的尝试之后,我发现了解决方案监听类也是类,也可以和普通的类一样,去自己构造我们想要的内容只要在new这个类的时候传递进取我们需要的内容就可以了评语实验态度认真()一般()较差()实验结果正确()部分正确()错()实验理论掌握()熟悉()了解()生疏()操作技能较强()一般()较差()实验报告较好()一般()较差()成绩指导教师王中华批阅时间2014年4月22日。