面向对象(Java)实验05、可视化程序设计
![面向对象(Java)实验05、可视化程序设计_第1页](https://file6.zhuangpeitu.com/fileroot6/2022-10/24/d26d4cce-16c7-41fe-a391-e8603b78a965/d26d4cce-16c7-41fe-a391-e8603b78a9651.gif)
![面向对象(Java)实验05、可视化程序设计_第2页](/images/s.gif)
![面向对象(Java)实验05、可视化程序设计_第3页](/images/s.gif)
《面向对象(Java)实验05、可视化程序设计》由会员分享,可在线阅读,更多相关《面向对象(Java)实验05、可视化程序设计(15页珍藏版)》请在装配图网上搜索。
1、电子信息学院实验报告书课程名: 面向对象程序设计(Java) 题 目: 实验05 可视化程序设计 实验类别: 【验证、设计】 班 级: BX1210 学 号: 28 姓 名: 俞佳星 评语:实验态度:认真( ) 一般( ) 较差( )实验结果:正确( ) 部分正确( ) 错( )实验理论:掌握( ) 熟悉( ) 了解( ) 生疏( )操作技能:较强( ) 一般( ) 较差( )实验报告:较好( ) 一般( ) 较差( )成绩: 指导教师: 王中华 批阅时间: 2014年4月22日一、实验目的(1)熟悉GUI基本容器JFrame、JPanel等容器的基本使用方法;(2)熟悉布局管理的作用及其使用
2、方法;(3)熟悉常用基本控件(按钮、文本框、标签、列表框、菜单)的使用;(4)重点掌握Java的事件管理机制和程序执行过程。二、实验内容(1)先运行程序下面程序,然后按【思考问题】来验证、分析并修改程序。以下源程序为ExpGui工程文件下的CalculatorUsingInnerClass.java。package cn.edu.sdju.joshua.exp.gui.calculatorUsingInnerClass;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Container;import java
3、.awt.FlowLayout;import java.awt.Font;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import javax.swing.JButton;import javax.swing.JComboBox;import javax.swing.JFrame;import javax.swing.JLabel;import javax.s
4、wing.JPanel;import javax.swing.JTextField;SuppressWarnings(serial)class CalculatorUsingInnerClass extends JFrame JPanel topPal, cenPal, botPal;JTextField tfOprand1;JTextField tfOprand2;JTextField tfRst;JComboBox lstOperator;JLabel labAdd, labRst, labInfo;JButton btnOperate, btnReset;Container conPan
5、 = null;public CalculatorUsingInnerClass() topPal = new JPanel();topPal.setLayout(new FlowLayout();cenPal = new JPanel();cenPal.setLayout(new FlowLayout();botPal = new JPanel();botPal.setLayout(new FlowLayout();tfOprand1 = new JTextField(8);tfOprand2 = new JTextField(8);tfRst = new JTextField(8);Str
6、ing lstItem=+,-,*,/;lstOperator = new JComboBox(lstItem);labRst = new JLabel(=);btnOperate = new JButton(开始计算);btnOperate.setFont(new Font(楷体,Font.BOLD,16);btnReset = new JButton(清 除);labInfo = new JLabel();labInfo.setForeground(Color.RED);labInfo.setFont(new Font(黑体, Font.PLAIN, 16);conPan = this.g
7、etContentPane();conPan.setLayout(new BorderLayout();conPan.add(cenPal, BorderLayout.CENTER);conPan.add(topPal, BorderLayout.NORTH);conPan.add(botPal, BorderLayout.SOUTH);cenPal.add(tfOprand1);cenPal.add(lstOperator);cenPal.add(tfOprand2);cenPal.add(labRst);cenPal.add(tfRst);topPal.add(btnOperate);to
8、pPal.add(btnReset);botPal.add(labInfo);/ 设置窗口居中显示this.setLocationRelativeTo(null);this.setVisible(true);btnOperate.addActionListener(new ActionListener() Overridepublic void actionPerformed(ActionEvent e) if(.equals(tfOprand1.getText().trim() |.equals(tfOprand1.getText().trim()labInfo.setText(加数和被加数
9、均不允许为空!);elsedouble a = Double.valueOf(tfOprand1.getText().doubleValue();double b = Double.valueOf(tfOprand2.getText().doubleValue();char operator = (String)lstOperator.getSelectedItem().charAt(0);double result = 0;switch(operator)case +:result = a + b;break;case -:result = a - b;break;case *:result
10、 = a * b;break;case /:result = a / b;break;tfRst.setText(String.valueOf(result););btnReset.addActionListener(new ActionListener() Overridepublic void actionPerformed(ActionEvent e) tfOprand1.setText();tfOprand2.setText();tfRst.setText(String.valueOf();labInfo.setText(以上文本框中的内容已清除!););this.addWindowL
11、istener(new WindowAdapter() public void windowClosing(WindowEvent e) System.exit(0););public static void main(String args) CalculatorUsingInnerClass mainFrame = new CalculatorUsingInnerClass();mainFrame.setSize(400, 150);mainFrame.setTitle(GUI实验简单算术运算器);【思考问题】 基本容器JFrame比起Frame有何特点?请解释构造方法中的conPan =
12、 this.getContentPane(); 语句是何作用? 如果将程序中的JFrame类换作Frame类,是否仍需要此条语句? 该程序中使用了哪几个容器,它们分别采用了什么布局管理器,在不同的布局管理器中,各组件加入容器中的次序对组件的显示位置有无影响? 程序中有多处地方用到this,这个this指什么? 分析事件执行方法public void actionPerformed(ActionEvent e)里面的下面三条语句的执行过程,它们分别起何作用?double a = Double.valueOf(tfOprand1.getText().doubleValue();double b =
13、 Double.valueOf(tfOprand2.getText().doubleValue();char operator = (String)lstOperator.getSelectedItem().charAt(0);该方法的形式参数ActionEvent e是何含义,对应的实参是如何形成的? 程序中对按钮事件的监听采用了匿名内部类的方法,请在不修改程序任何功能的前提下将程序修改成有名内部类监听的方式,原类名不变,内部类的名字为BtnHandlerUsingInnerClass,并使用该类的一个对象同时监听界面上的两个按钮。 请在不修改程序任何功能的前提下,将程序修改成外部类监听的方
14、式,原类名不变,外部监听类的名字为BtnHandlerUsingExternalClass,并使用该类的一个对象同时监听界面上的两个按钮。 请在不修改程序任何功能的前提下,将程序修改成容器类监听的方式,原类名不变。 如果将程序中的new WindowAdapter()改写为new WindowListener(),则该匿名类的实现部分需要如何修改?三、实验结果(修改过的关键代码和运行结果截图)(1)JFrame与Frame的最大区别在于前者不能直接通过add()方法加入组件,也不能通过setLayout()方法设置布局。每个JFame都有一个与之关联的内容面板(contentPane),只能针
15、对这个contentPane设置布局及加入组件。如果将JFrame类换做Frame类,则不再需要这条语句。这个程序中使用了一个Contaniner容器和3个JPanel容器。Contaniner采用了便捷布局管理器。边界布局管理器需要设置插入的位置,如果插入相同位置,先前插入的组件会被覆盖。3个JPanel采用了流失布局管理器。流失布局管理器按照从左到右的先后顺序布置在容器中。如果一行布置不下,则会自动换行。流失布局管理器中插入的顺序决定了组件在容器中的大致位置。程序中多次用到的this是指向CalculatorUsingInnerClas这个类的引用。通过this这个引用,我们可以直接对这个
16、窗体进行设置。第一条语句先用getText()获得tfOprand1中的文本。然后再用Double.valueOf()将String类型的内容转化成double型数值。最后将Double对象的值用doubleValue()转化成double基本数据类型给a。第二条语句和第一条语句一样,将tfOprand2的文本内容转成double型数值给b。第三条语句先用getSelectedItem()获得lsOperator中选择的内容,再将所获得内容强制转化成String类型。最后再通过charAt()方法获得该字符串中的第一个字符,并返回给operator。package cn.edu.sdju.no
17、28.johnson;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Container;import java.awt.FlowLayout;import java.awt.Font;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.WindowAdapter;import java.awt.event.WindowEvent;import javax.swing.JBut
18、ton;import javax.swing.JComboBox;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JTextField;SuppressWarnings(serial)class CalculatorUsingInnerClass extends JFrame JPanel topPal, cenPal, botPal;JTextField tfOprand1;JTextField tfOprand2;JTextField tfRst
19、;JComboBox lstOperator;JLabel labAdd, labRst, labInfo;JButton btnOperate, btnReset;Container conPan = null;public CalculatorUsingInnerClass() topPal = new JPanel();topPal.setLayout(new FlowLayout();cenPal = new JPanel();cenPal.setLayout(new FlowLayout();botPal = new JPanel();botPal.setLayout(new Flo
20、wLayout();tfOprand1 = new JTextField(8);tfOprand2 = new JTextField(8);tfRst = new JTextField(8);String lstItem=+,-,*,/;lstOperator = new JComboBox(lstItem);labRst = new JLabel(=);btnOperate = new JButton(开始计算);btnOperate.setFont(new Font(楷体,Font.BOLD,16);btnReset = new JButton(清 除);labInfo = new JLa
21、bel();labInfo.setForeground(Color.RED);labInfo.setFont(new Font(黑体, Font.PLAIN, 16);conPan = this.getContentPane();conPan.setLayout(new BorderLayout();conPan.add(cenPal, BorderLayout.CENTER);conPan.add(topPal, BorderLayout.NORTH);conPan.add(botPal, BorderLayout.SOUTH);cenPal.add(tfOprand1);cenPal.ad
22、d(lstOperator);cenPal.add(tfOprand2);cenPal.add(labRst);cenPal.add(tfRst);topPal.add(btnOperate);topPal.add(btnReset);botPal.add(labInfo);/ 设置窗口居中显示this.setLocationRelativeTo(null);this.setVisible(true);BtnHandlerUsingInnerClass ALx=new BtnHandlerUsingInnerClass();btnOperate.addActionListener(ALx);b
23、tnReset.addActionListener(ALx);class BtnHandlerUsingInnerClass implements ActionListenerOverridepublic void actionPerformed(ActionEvent e) if(e.getActionCommand().compareTo(开始计算)=0)if(.equals(tfOprand1.getText().trim() |.equals(tfOprand1.getText().trim()labInfo.setText(加数和被加数均不允许为空!);else double a =
24、 Double.valueOf(tfOprand1.getText().doubleValue();double b = Double.valueOf(tfOprand2.getText().doubleValue();char operator = (String)lstOperator.getSelectedItem().charAt(0);double result = 0;switch(operator)case +:result = a + b;break;case -:result = a - b;break;case *:result = a * b;break;case /:r
25、esult = a / b;break;tfRst.setText(String.valueOf(result);elsetfOprand1.setText();tfOprand2.setText();tfRst.setText(String.valueOf();labInfo.setText(以上文本框中的内容已清除!);public static void main(String args) CalculatorUsingInnerClass mainFrame = new CalculatorUsingInnerClass();mainFrame.setSize(400, 150);ma
26、inFrame.setTitle(GUI实验简单算术运算器);package cn.edu.sdju.no28.johnson;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Container;import java.awt.FlowLayout;import java.awt.Font;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import ;import ;import javax.swing.JButt
27、on;import javax.swing.JComboBox;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JTextField;SuppressWarnings(serial)class CalculatorUsingInnerClass extends JFrame JPanel topPal, cenPal, botPal;JTextField tfOprand1;JTextField tfOprand2;JTextField tfRst;
28、JComboBox lstOperator;JLabel labAdd, labRst, labInfo;JButton btnOperate, btnReset;Container conPan = null;public CalculatorUsingInnerClass() topPal = new JPanel();topPal.setLayout(new FlowLayout();cenPal = new JPanel();cenPal.setLayout(new FlowLayout();botPal = new JPanel();botPal.setLayout(new Flow
29、Layout();tfOprand1 = new JTextField(8);tfOprand2 = new JTextField(8);tfRst = new JTextField(8);String lstItem=+,-,*,/;lstOperator = new JComboBox(lstItem);labRst = new JLabel(=);btnOperate = new JButton(开始计算);btnOperate.setFont(new Font(楷体,Font.BOLD,16);btnReset = new JButton(清 除);labInfo = new JLab
30、el();labInfo.setForeground(Color.RED);labInfo.setFont(new Font(黑体, Font.PLAIN, 16);conPan = this.getContentPane();conPan.setLayout(new BorderLayout();conPan.add(cenPal, BorderLayout.CENTER);conPan.add(topPal, BorderLayout.NORTH);conPan.add(botPal, BorderLayout.SOUTH);cenPal.add(tfOprand1);cenPal.add
31、(lstOperator);cenPal.add(tfOprand2);cenPal.add(labRst);cenPal.add(tfRst);topPal.add(btnOperate);topPal.add(btnReset);botPal.add(labInfo);/ 设置窗口居中显示this.setLocationRelativeTo(null);this.setVisible(true);BtnHandlerUsingExternalClass ALx=new BtnHandlerUsingExternalClass(this);btnOperate.addActionListen
32、er(ALx);btnReset.addActionListener(ALx);public static void main(String args) CalculatorUsingInnerClass mainFrame = new CalculatorUsingInnerClass();mainFrame.setSize(400, 150);mainFrame.setTitle(GUI实验简单算术运算器);class BtnHandlerUsingExternalClass implements ActionListenerCalculatorUsingInnerClass mainFr
33、ame;public void actionPerformed(ActionEvent e) if(e.getActionCommand().compareTo(开始计算)=0)if(.equals(mainFrame.tfOprand1.getText().trim() |.equals(mainFrame.tfOprand1.getText().trim()mainFrame.labInfo.setText(加数和被加数均不允许为空!);else double a = Double.valueOf(mainFrame.tfOprand1.getText().doubleValue();do
34、uble b = Double.valueOf(mainFrame.tfOprand2.getText().doubleValue();char operator = (String)mainFrame.lstOperator.getSelectedItem().charAt(0);double result = 0;switch(operator)case +:result = a + b;break;case -:result = a - b;break;case *:result = a * b;break;case /:result = a / b;break;mainFrame.tf
35、Rst.setText(String.valueOf(result);elsemainFrame.tfOprand1.setText();mainFrame.tfOprand2.setText();mainFrame.tfRst.setText(String.valueOf();mainFrame.labInfo.setText(以上文本框中的内容已清除!);public BtnHandlerUsingExternalClass(CalculatorUsingInnerClass mainFrame) this.mainFrame = mainFrame;package cn.edu.sdju
36、.no28.johnson;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Container;import java.awt.FlowLayout;import java.awt.Font;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import ;import ;import javax.swing.JButton;import javax.swing.JComboBox;import javax.swing
37、.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JTextField;SuppressWarnings(serial)class CalculatorUsingInnerClass extends JFrame implements ActionListenerJPanel topPal, cenPal, botPal;JTextField tfOprand1;JTextField tfOprand2;JTextField tfRst;JComboBox lstOperator;JLa
38、bel labAdd, labRst, labInfo;JButton btnOperate, btnReset;Container conPan = null;public CalculatorUsingInnerClass() topPal = new JPanel();topPal.setLayout(new FlowLayout();cenPal = new JPanel();cenPal.setLayout(new FlowLayout();botPal = new JPanel();botPal.setLayout(new FlowLayout();tfOprand1 = new
39、JTextField(8);tfOprand2 = new JTextField(8);tfRst = new JTextField(8);String lstItem=+,-,*,/;lstOperator = new JComboBox(lstItem);labRst = new JLabel(=);btnOperate = new JButton(开始计算);btnOperate.setFont(new Font(楷体,Font.BOLD,16);btnReset = new JButton(清 除);labInfo = new JLabel();labInfo.setForegroun
40、d(Color.RED);labInfo.setFont(new Font(黑体, Font.PLAIN, 16);conPan = this.getContentPane();conPan.setLayout(new BorderLayout();conPan.add(cenPal, BorderLayout.CENTER);conPan.add(topPal, BorderLayout.NORTH);conPan.add(botPal, BorderLayout.SOUTH);cenPal.add(tfOprand1);cenPal.add(lstOperator);cenPal.add(
41、tfOprand2);cenPal.add(labRst);cenPal.add(tfRst);topPal.add(btnOperate);topPal.add(btnReset);botPal.add(labInfo);/ 设置窗口居中显示this.setLocationRelativeTo(null);this.setVisible(true);btnOperate.addActionListener(this);btnReset.addActionListener(this);public static void main(String args) CalculatorUsingInn
42、erClass mainFrame = new CalculatorUsingInnerClass();mainFrame.setSize(400, 150);mainFrame.setTitle(GUI实验简单算术运算器);public void actionPerformed(ActionEvent arg0) if(arg0.getActionCommand().compareTo(开始计算)=0)if(.equals(tfOprand1.getText().trim() |.equals(tfOprand1.getText().trim()labInfo.setText(加数和被加数均
43、不允许为空!);else double a = Double.valueOf(tfOprand1.getText().doubleValue();double b = Double.valueOf(tfOprand2.getText().doubleValue();char operator = (String)lstOperator.getSelectedItem().charAt(0);double result = 0;switch(operator)case +:result = a + b;break;case -:result = a - b;break;case *:result
44、 = a * b;break;case /:result = a / b;break;tfRst.setText(String.valueOf(result);elsetfOprand1.setText();tfOprand2.setText();tfRst.setText(String.valueOf();labInfo.setText(以上文本框中的内容已清除!);this.addWindowListener(new WindowListener() public void windowClosing(WindowEvent e) System.exit(0);Overridepublic
45、 void windowActivated(WindowEvent arg0) / TODO 自动生成的方法存根Overridepublic void windowClosed(WindowEvent arg0) / TODO 自动生成的方法存根Overridepublic void windowDeactivated(WindowEvent arg0) / TODO 自动生成的方法存根Overridepublic void windowDeiconified(WindowEvent arg0) / TODO 自动生成的方法存根Overridepublic void windowIconifi
46、ed(WindowEvent arg0) / TODO 自动生成的方法存根Overridepublic void windowOpened(WindowEvent arg0) / TODO 自动生成的方法存根);四、实验体会在本次试验中,我熟悉GUI基本容器JFrame、JPanel等容器的基本使用方法;这是JAVA图形界面的基础中的基础。同时我们熟悉了布局管理的作用及其使用方法;掌握了JAVA中的多种布局管理器。通过JAVA自带的布局管理器,我们就能很快的布置JAVA的简单界面。我们也在这次的试验中熟悉了常用基本控件(按钮、文本框、标签、列表框、菜单)的使用;使得我们的界面更加丰富,更加人性化。同时我们重点掌握了一下Java的事件管理机制和程序执行过程。当然本次试验也不是一帆风顺的。期间出现过各种问题。困扰我最久的就是如何使用外部类来监听事件。虽然声明外部类很简单,但是因为不在一个类中,我们很难读到我们所监听的类内部的内容。同时也很难改变我们所监听的类,或者其他类中的内容。在经过了多次的尝试之后,我发现了解决方案。监听类也是类,也可以和普通的类一样,去自己构造我们想要的内容。只要在new这个类的时候传递进取我们需要的内容就可以了。
- 温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。