课程实验报告
课程名称 |
面向对象 程序设计 |
班级 |
计算131 |
实验日期 |
2016.05.21 |
姓名 |
周超 |
学号 |
201307031 |
实验成绩 |
|
实验名称 |
实验五 图形用户界面设计 |
||||
实 验 目 的 及 要 求 |
实验目的: 1、熟悉和掌握Java Swing的基本GUI程序设计,掌握如何构建一个窗口程序,并且窗口中添加常用的Swing组件,使用各种布局管理器来完成对窗口中的组件进行布局。 2、了解Java事件处理机制,掌握基本的事件处理机制的基本程序编写。 实验要求: 1、使用Java语言完成相关程序设计要求。 2、编写代码、调试、运行,记录程序调试中出现的问题和解决方法。 3、实验后必须按照要求独立完成实验报告。
|
||||
实 验 环 境 |
硬件环境:Windos7系统 软件环境:eclipse |
||||
实 验 内 容 |
1.用Swing组件构建一个程序界面
2.使用Swing组件及Java事件处理机制完成一个简单计算器的图形界面及实现加减程序计算功能。
|
||||
算 法 描 述 及 实 验 步 骤
|
第一个实验: 1.创建一个继承自JFrame类的子类GUI,GUI类中包含一个构造方法GUI()用于实现GUI用户界面的设计,主要设计添加组件跟组件布局两个方面。 2.创建一个窗体: this.setTitle("用户注册");//创建一个标题为用户注册的窗体 this.setSize(340,450);//该窗体大小 this.setLayout(new GridLayout(8,1));//该窗体中的面板的排列方式 this.setVisible(true); //显示窗体 该窗体用于安放各面板,面板包含各组件 3.添加各组件: a.创建8个面板JPanel对像以8*1的网格布局于窗体中。 b.给每个面板添加组件: 第一个:添加文本编辑框JTextField对象,设置长度和标签对象Label 第二个:添加文本编辑框JTextField对象,设置长度和标签对象Label 第三个:添加文本编辑框JTextField对象,设置长度和标签对象Label 第四个:添加单选框按钮JRadioButton对象(参数为按钮名)添加标签Label 第五个:添加复选框按钮JCheckBox(参数为按钮名)添加标签Label 第六个:添加一个文本域JTextArea对象,添加标签Label 第七个:创建一个下拉列表框JComboBox对象,添加面板标签并用对象 comboBox调用addItem方法添加五个下拉列表 第八个:添加两个按钮,设置按钮名 第二个实验: 1.用户界面设计: (1)创建窗体:设置窗体名,布局以及窗体中组件布局管理 (2)创建两个面板一个放文本编辑框和清零按钮,文本框用于显示输入的数和运算结果,清零按钮用于多次计算,一个按网格4*4布局放数字按钮,算符按钮和小数点按钮(添加各组件的方法前一个实验已经说明,不再赘述) 2.功能实现: 数字按钮与小数点按钮: btn1.addActionListener(new ActionListener () { public void actionPerformed(ActionEvent e){ inputField.setText(inputField.getText()+"?"); } }); 添加一个监听事件,当点击按钮,调用setText()方法将getText() 方法得到的此时编辑框显示的内容以及点击的该按钮所代表的内容显示在编辑框,实现要运算的数据的显示 算符按钮: 包括加减乘除 btn8.addActionListener(new ActionListener () { public void actionPerformed(ActionEvent e){ list.add(inputField.getText()); lists.add("-"); cout++; inputField.setText(""); } }); 添加一个监听事件,当点击按钮,通过list.add(inputField.getText())将点击该算符按钮之前编辑框所显示的内容存入集合list,通过lists.add()将点击的按钮代表的算符存入集合lists,cout++记录点击算符的次数,用于作为list集合中每个元素的下标 等于按钮: btn15.addActionListener(new ActionListener () { public void actionPerformed(ActionEvent e){ list.add(inputField.getText()); //点击按钮=时,把此事编辑框显示的数据存入list inputField.setText(Operator(lists.get(cout-1)));//把运算得到的结果存入list,作为下一个运算符运算的前一个数 } }); 先将点击该按钮前在编辑框显示的内容存入list集合,也就是算符的后一个数,然后将调用Operator(String str)方法返回的内容显示在编辑框,其中str的值为先前保存在lists中算符 清零按钮: button.addActionListener(new ActionListener () { public void actionPerformed(ActionEvent e){ inputField.setText(""); list.clear(); //将list和lists集合保存的上一次运算的各要素清空 lists.clear(); cout = 0; //把cout的值还原 } //用于实现多次运算 Operator(String str)方法: 该方法通过switch语句选择运算,其中参数str为所要进行的运算,通过Double a = Double.parseDouble(list.get(2*cout-2))获得点击一个算符时编辑框显示的前后两个内容并由String转化为Double类型,也就是该算符运算的前后两个数,然后进行运算,通过String res = String.valueOf(result)返回String类型的一个结果 |
||||
调 试 过 程 及 实 验 结 果
|
1. 2.
实现25.13+20.7=35.83并清零进行下一次运算的过程
在清零后实现(12.3-25.7)*3/5=-8.04多项式运算的过程
|
||||
总
结
|
1.我发现个很重要的问题,程序没编出来之前感觉各种不知道,编出来之后感觉也就那么回事,真的要把编程中所有遇到的问题写出来不知道能写多少,但如果只要把程序说清楚又觉得这么简单的程序没什么好说的。 2.GUI图形界面的实现要牢记这样一个过程: 创建面板对象,创建按钮,文本编辑框,单选框,复选框,下拉菜单等等组件的对象,面板对象调用add方法将组件放入面板中,创建Label标签对象,面板或组件调用add方法添加标签对象作为名称。 3.最好在各组件,面板添加完毕后再创建窗体,不然有时编译运行后有些组件不显示出来。 4.String数据类型与各数据类型之间的互相转化对GUI设计很有帮助 5.此次实验其实还可以有很大的改进,如对按钮点击时如果不符合运算规则的操作将会运行错误,而不是报错之后让用户有改错的机会
|
||||
附 录
|
1. package GUI; import java.awt.*; import javax.swing.*; public class GUI extends JFrame{ public GUI(){ JPanel inputPanel = new JPanel(); JPanel inputPanel1 = new JPanel(); JPanel inputPanel2 = new JPanel(); //创建三个面板对象分别放置三个编辑框及其标签 JTextField inputField = new JTextField(22); JTextField inputField1 = new JTextField(22); JTextField inputField2 = new JTextField(22); //创建三个长度为22的空的文本编辑框 Label label = new Label("用户名:");//创建标签对象 设置参数 inputPanel.add(label); //将标签放入面板对象中 inputPanel.add(inputField); //将空的文本编辑框放入面板对象中 Label label1 = new Label("密 码:"); inputPanel1.add(label1); inputPanel1.add(inputField1);// Label label2 = new Label("确认密码:"); inputPanel2.add(label2); inputPanel2.add(inputField2); this.add(inputPanel); this.add(inputPanel1); this.add(inputPanel2); //将三个面板放入窗体中 JPanel radiopanel = new JPanel(); Label radiolabel = new Label("性别:"); radiopanel.add(radiolabel); radiopanel.add(new JRadioButton("男")); radiopanel.add( new JRadioButton("女")); this.add(radiopanel); //创建两个单选按钮,标签为性别 JPanel checkpanel = new JPanel(); Label checklabel = new Label("爱好:"); checkpanel.add(checklabel); checkpanel.add(new JCheckBox("阅读")); checkpanel.add(new JCheckBox("上网")); checkpanel.add(new JCheckBox("游泳")); checkpanel.add(new JCheckBox("旅游")); this.add(checkpanel); //创建四个复选按钮,标签为爱好 JPanel inputPanel3 = new JPanel(); JTextArea inputField3 = new JTextArea(2,20); Label inputlabel3 = new Label("地址:"); inputPanel3.add(inputlabel3); inputPanel3.add(inputField3); this.add(inputPanel3); //创建一个具有指定行和列的空文本域 JPanel combopanel = new JPanel(); Label combolabel = new Label("学历:"); combopanel.add(combolabel); JComboBox comboBox.addItem("请选择学历"); comboBox.addItem("小学"); comboBox.addItem("初中"); comboBox.addItem("高中"); comboBox.addItem("本科"); combopanel.add(comboBox); this.add(combopanel); //创建一个下拉列表框 JPanel panel = new JPanel(); panel.add(new JButton("确定")); panel.add(new JButton("取消")); this.add(panel); //创建两个按钮 this.setTitle("用户注册");//创建一个标题为用户注册的窗体 this.setSize(340,450);//该窗体大小 this.setLayout(new GridLayout(8,1));//该窗体中的面板的排列方式 this.setVisible(true); //显示窗体 } public static void main(String[] args){ new GUI(); } } 2. package Calculator; import java.util.*; import java.awt.*; import javax.swing.*; import java.awt.event.*; public class Calculator{ public static void main(String[] args){ new Interface(); } } class Interface extends JFrame { ArrayList ArrayList int cout = 0; //计数运算符,用来作为集合中各元素的下标 JPanel inputpanel; //GUI组件的布局包括如下三个过程:1。创建面板,确定面板中的布局管理 JTextField inputField; // 2.给面板添加标签 JButton button; // 3.为面板添加按钮,文本编辑框等组件 JButton btn1,btn2,btn3,btn4; JButton btn5,btn6,btn7,btn8; JButton btn9,btn10,btn11,btn12; JButton btn13,btn14,btn15,btn16; public Interface(){ inputpanel = new JPanel(); inputField = new JTextField(9); //文本框长度为9 button = new JButton("清零"); inputpanel.add(inputField); inputpanel.add(button); this.add(inputpanel); JPanel panel = new JPanel(new GridLayout(4,4));//设置panel面板的布局管理为GridLayout管理器,为一个4*4的网格 btn1 = new JButton("7"); btn2 = new JButton("8"); btn3 = new JButton("9"); btn4 = new JButton("+"); btn5 = new JButton("4"); btn6 = new JButton("5"); btn7 = new JButton("6"); btn8 = new JButton("-"); btn9 = new JButton("1"); btn10 = new JButton("2"); btn11 = new JButton("3"); btn12 = new JButton("×"); btn13 = new JButton("0"); btn14 = new JButton("."); btn15 = new JButton("="); btn16 = new JButton("÷"); //定义Button按钮 panel.add(btn1); panel.add(btn2); panel.add(btn3); panel.add(btn4); panel.add(btn5); panel.add(btn6); panel.add(btn7); panel.add(btn8); panel.add(btn9); panel.add(btn10); panel.add(btn11); panel.add(btn12); panel.add(btn13); panel.add(btn14); panel.add(btn15); panel.add(btn16); //将按钮添加进panel面板 btn1.addActionListener(new ActionListener () { public void actionPerformed(ActionEvent e){ inputField.setText(inputField.getText()+"7"); } }); btn2.addActionListener(new ActionListener () { public void actionPerformed(ActionEvent e){ inputField.setText(inputField.getText()+"8"); } }); btn3.addActionListener(new ActionListener () { public void actionPerformed(ActionEvent e){ inputField.setText(inputField.getText()+"9"); } }); btn5.addActionListener(new ActionListener () { public void actionPerformed(ActionEvent e){ inputField.setText(inputField.getText()+"4"); } }); btn6.addActionListener(new ActionListener () { public void actionPerformed(ActionEvent e){ inputField.setText(inputField.getText()+"5" ); } }); btn7.addActionListener(new ActionListener () { public void actionPerformed(ActionEvent e){ inputField.setText(inputField.getText()+"6"); } }); btn9.addActionListener(new ActionListener () { public void actionPerformed(ActionEvent e){ inputField.setText(inputField.getText()+"1"); } }); btn10.addActionListener(new ActionListener () { public void actionPerformed(ActionEvent e){ inputField.setText(inputField.getText()+"2"); } }); btn11.addActionListener(new ActionListener () { public void actionPerformed(ActionEvent e){ inputField.setText(inputField.getText()+"3"); } });
btn13.addActionListener(new ActionListener () { public void actionPerformed(ActionEvent e){ inputField.setText(inputField.getText()+"0"); } }); btn14.addActionListener(new ActionListener () { public void actionPerformed(ActionEvent e){ inputField.setText(inputField.getText()+"."); } }); //为数字按钮和小数点按钮添加点击事件,点击之后按钮所代表数字显示在文本编辑框 btn4.addActionListener(new ActionListener () { public void actionPerformed(ActionEvent e){ list.add(inputField.getText()); //运算的实现,获取在文本编辑框上显示的文本,并存入集合list中 lists.add("+"); //获取运算符,存入lists中 cout++; //标记运算符的个数,也就是要进行运算的次数 inputField.setText(""); //将编辑框置为空的,方便下一个数据的额输入 } }); btn8.addActionListener(new ActionListener () { public void actionPerformed(ActionEvent e){ list.add(inputField.getText()); lists.add("-"); cout++; inputField.setText(""); } }); btn12.addActionListener(new ActionListener () { public void actionPerformed(ActionEvent e){ list.add(inputField.getText()); lists.add("×"); cout++; inputField.setText(""); } }); btn16.addActionListener(new ActionListener () { public void actionPerformed(ActionEvent e){ list.add(inputField.getText()); lists.add("÷"); cout++; inputField.setText(""); } }); btn15.addActionListener(new ActionListener () { public void actionPerformed(ActionEvent e){ list.add(inputField.getText()); //点击按钮=时,把此事编辑框显示的数据存入list inputField.setText(Operator(lists.get(cout-1)));//把运算得到的结果存入list,作为下一个运算符运算的前一个数 } }); button.addActionListener(new ActionListener () { public void actionPerformed(ActionEvent e){ inputField.setText(""); list.clear(); //将list和lists集合保存的上一次运算的各要素清空 lists.clear(); cout = 0; //把cout的值还原 } }); this.add(panel); this.setTitle("计算器"); this.setSize(185,205); this.setLayout(new FlowLayout()); this.setVisible(true); //GUI窗体 } public String Operator(String str){ Double result = 0.0 ; Double a = Double.parseDouble(list.get(2*cout-2));//将list中记录的第一个运算符前一个数据转化为Double类型 Double b = Double.parseDouble(list.get(2*cout-1));//将list中记录的第一个运算符后一个数据转化为Double类型 switch(str){ //cout表示第几个字符 case "+" : result = a + b; break; case "-" : result = a - b; break; case "×" : result = a * b; break; case "÷" : result = a / b; break; } String res = String.valueOf(result); return res; //通过switch语句得到各种运算之后的返回值并转化为String类型 } }
|