第七章 Java图形用户界面练习
- 格式:doc
- 大小:253.00 KB
- 文档页数:9
第7章 Java中的GUI编程图形用户界面(Graphical User Interface,GUI)使用图形的方式,借助菜单、按钮等标准界面元素和鼠标操作,帮助用户方便地向计算机系统发送指令,启动操作,并将系统运行的结果同样以图形方式显示给用户。
图形用户界面操作简单,省去了字符界面用户必须记忆各种命令的麻烦,深受广大用户的喜爱和欢迎。
所以学习设计和开发图形用户界面,是应用软件开发人员的必修课。
本章主要介绍Swing和AWT中基本组件的用法,如何创建简单的用户界面,包括布局管理、用户事件,以及如何创建复杂的用户界面等。
●图形用户界面概述●创建简单的用户界面●布局管理●用户界面●创建复杂的用户界面7.1 图形用户界面概述GUI由若干GUI组件(Component)组成,GUI组件是可见的对象,用户可以通过鼠标或键盘对它进行操作,通过对不同事件的响应,来完成组件与用户之间或组件与组件之间的交互。
用户界面设计在程序设计中有较大的比重,在较为复杂的Java应用程序中,用户界面设计是不可缺少的。
Java-AWT——抽象窗口工具箱就是专门是了解和掌握UI的各主要构件以及布局管理器。
Java基类(Java Foundation Classes,JFC)是关于GUI组件和服务的完整集合,它大大简化了健壮的Java应用程序的开发和布署。
JFC作为Java2SDK的一个组成部分,主要由5个API构成:AWT、Swing、Java 2D、Drag and Drop、Accessibility,如图7.1所示。
AWT组件库为各类Java应用程序提供了多种GUI工具。
Swing提供了一整套用Java语言编写的GUI组件,以保证可移植性。
Java 2D是一种图形API,它为Java应用程序提供了高级的二维(2D)图形图像处理类的集合。
同时,该API还包含了一套扩展字体集合。
Drag and Drop技术提供了Java和本地应用程序之间的互用性,用来在Java应用程序和不支持Java技术的应用程序之间交换数据。
1.如何制作Java程序图形界面?它需要引入哪些包?答:创建窗口并在窗口中添加各种组件,指定组件的属性和它们在窗口中的位置,从而构成图形界面的外观效果定义图形界面的事件和各种组件对不同事件的响应,从而实现图形界面与用户的交互需要引入AWT和Swing包2.什么是布局管理器,它有什么作用?答:布局管理器是一个实现Layout Manager接口的类的实例。
布局管理器的作用包括设置计算容器的最佳和最小尺寸以及将容器中的组件大小和位置作合适的安排。
3.请说明FlowLayout布局方式的特点?答:FlowLayout的布局策略是将容器中的组件按照加入的先后顺序从左向右排列。
如果一行排满转下一行继续,每行均采取居中排列。
是Panel型容器的默认布局,即Panel 及其子类创建的容器对象,如果不专门为其指定布局,则它们的布局就是FlowLayout 型布局。
4.GridLayout布局的特点有哪些?答:GridLayout的布局策略是把容器划分成若干行乘若干列的网格区域,组件就位于这些划分出来的小格中。
此外GridLayout比较灵活,划分多少网格由程序自由控制,而且组件定位也比较精确.但是由于GridLayout布局中每个网格都是相同大小并且强制组件与网格的大小相同,使得容器中的每个组件也都是相同的大小,显得很不自然。
为了克服这个缺点,可以使用容器嵌套。
5.在Java中,什么是事件?简述处理事件的机制。
答:事件指一个描述事件源状态改变的对象。
通过鼠标、键盘与GUI 界面直接或间接交互都会生成事件。
事件处理机制:Java 对事件处理采用委托事件模型的形式。
组件可以发起(触发)一个事件。
每种事件的类型由单独的类表示。
当事件被触发时,它将被一个或多个“监听器”接收,监听器负责处理事件。
图.1单项选择框(1)Java的图形用户界面设计与事件处置实验目的1. 把握文本框和文本域,标签和按钮及行动事件的加入。
2. 把握面板、框架等容器性控件的利用和图形类的应用技术。
了解Swing控件的应用。
3. 把握接口ActionListener实验任务1. 完成设计题1、2。
2. 选择完成设计题3、验证题4。
实验内容1 复选框与单项选择按钮1. 复选框Checkbox复选框Checkbox是经常使用的控件。
为完成设计题2需要以下方式getState()取复选框的状态,即是不是被选中。
假设选中返回true,不然返回false addItemListener(ItemListener) 给复选框加入监视器响应2.单项选择按钮CheckboxGroup在多个复选框中能够同时选择一项或多项。
若是咱们只许诺在多个复选框当选择一项, 这种控件叫做单项选择按钮CheckboxGroup。
它事实上是将复选框组合在一路,只许诺选取一个。
由于那个缘故, 要产生单项选择按钮, 必需利用复选框。
下面是产生单项选择按钮的方式。
CheckboxGroup cbg; etLabel());;import class chkboxgroup extends Frame implements ActionListener{CheckboxGroup cbg;etLabel()); ;import class choicetest extends Frame implements ActionListener{Choice csex;TextArea tinfo;Button ok;public choicetest(){super("Choice"); setLayout(new FlowLayout());csex = new Choice(); ("男");("女"); (0);图8颜色选择器import .*;import class displaycolor extends Frame implementsActionListener{Button backcolor,frontcolor;public displaycolor(){super("disply color");setLayout( new FlowLayout() );backcolor = new Button("背景色");frontcolor = new Button("前景色");add( backcolor ); add( frontcolor );( this );( this );//弹出对话框,提示此程序即将关闭addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){(null,"此程序即将关闭!");( 0 );}} );setSize(new Dimension(300,100)); setVisible(true);}public void actionPerformed(ActionEvent e){Color shade = getBackground();//弹出颜色选择器即能够选择颜色的一个对话框shade = ( this, "pick a color", shade );if( () == backcolor ){if( shade != null ){setBackground( shade ); //设置Frame的背景色( shade ); //设置按钮的背景色( shade ); //设置按钮的背景色}}else if( () == frontcolor ){if( shade != null ){setForeground( shade ); //前景色( shade ); //前景色( shade ); //前景色}}}public static void main(String[] args){displaycolor t = new displaycolor();}}。
实验七实验6-2图形用户界面一、实验目的1 设计图形用户界面2 实现用户界面上按钮的功能二、实验内容三、实验步骤代码import java.awt.*;import java.awt.event.*;import javax.swing.*;public class lianxi5 extends WindowAdapterimplements ActionListener,ItemListener//定义事件处理类,由它对按钮和框架上的窗口产生的事件进行处理{Frame f; //框架对象Button b1,b2;TextArea ta;TextField tf;Label l1,l2;List l;JRadioButton rb1,rb2;JComboBox cb;public lianxi5() //构造窗口界面{f = new Frame("学生信息输入窗口"); //创建带标题的框架f.setSize(600,300); //设置框架大小l=new List();l.add("姓名性别专业");f.add(l);Panel p = new Panel();f.add(p,"East");l1=new Label("姓名");tf = new TextField(10);//创建文本输入行对象l2=new Label("性别");rb1=new JRadioButton ("男");rb2=new JRadioButton ("女");String[] a={"计算机","生医"};cb=new JComboBox (a);b1 = new Button("增加"); //创建按钮对象b2= new Button("删除");p.add(l1);p.add(tf);p.add(l2);p.add(rb1);p.add(rb2);p.add(cb);p.add(b1); //在框架中加入按钮p.add(b2);b1.addActionListener(this); //注册,按钮的单击事件由对象自己处理b2.addActionListener( this);rb1.addActionListener(this);rb2.addActionListener(this);cb.addActionListener(this);l.addItemListener(this);f.setVisible(true); //设置框架为可见f.addWindowListener(this); //注册监听框架上的窗口事件}public void actionPerformed(ActionEvent e) //处理按钮单击事件{if(e.getSource()==b1){i f(rb1.isSelected()){l.add(tf.getText()+" "+rb1.getActionCommand()+" "+cb.getSelectedItem());}if(rb2.isSelected()){l.add(tf.getText()+" "+rb2.getActionCommand()+" "+cb.getSelectedItem());}}if(e.getSource()==b2){l.remove(l.getSelectedIndex());}}public void windowClosing(WindowEvent e)// 处理窗口关闭事件{System.exit(0); //程序停止运行,关闭框架窗口}public void itemStateChanged(ItemEvent arg0) {// TODO Auto-generated method stubString str=l.getSelectedItem();int i = str.indexOf(' '); //获得串中第一个空格的位置tf.setText(str.substring(0,i)); //设置文本行显示内容str = str.substring(i); //取从i位置开始的子串str = str.trim();}public static void main(String args[]){new lianxi5();}}四、实验结果贴出乐蜂网优惠券运行结果屏幕截图五、实验心得通过看课件。
课堂教学教案教师姓名: ***** 课程名称:Java程序设计授课时数:2 第17次课附录147.1 图形用户界面概述• 1. 图形用户界面的设计与实现•使用图形界面GUI (Graphics User Interface)•字符界面—采用命令行方式与用户交互。
•图形界面—用多种媒体显示信息,用直观、方便的GUI标准组件来接收命令。
•控制权在用户(用户要由操作的主动权)•界面与操作的风格一致性。
•宽容(容错)性。
•简洁与美观并重。
•界面布局•界面元素•容器是用来组织其他界面成分和元素的单元。
•可以形成容器的层次,构筑复杂结构•Window(Frame、Applet、Dialog )•组件是图形用户界面的基本单位,里面不再包含其他的成分。
•GUI组件是图形用户界面标准化的结果。
•GUI组件的作用是完成与用户的交互。
•用户自定义成分•文字、图形、图象…•不能像标准组件一样被系统识别和承认,只起装饰作用。
•不能响应用户的动作,不具有交互功能。
7.2 用户自定义成分•Component类可显示在屏幕上的图形对象,可与用户交互。
方法:add(PopupMenu popup) 加一弹出菜单addFocusListener(FocusListener l)将发生在本组件上的事件注册给监听者,以进行事件处理。
setSize(int width, int height) 设置组件尺寸paint(Graphics g) 重画组件setFont(Font f) 设置组件字体setBackground(Color c) 设置组件背景色setForeground(Color c) 设置组件前景色•paint和repaint 方法某组件的paint()和update()为系统自动调用的有关图形绘制的方法,不可人为编程调用;但可编程重新定义其操作内容。
使用repaint()方法可以触发update()方法。
•Font类java.awt.Font设计字体显示效果(创建字体对象)Font fn = new Font(String 字体,int 风格,int 字号);字体:TimesRoman, Courier, Arial等风格:三个常量Font.PLAIN, Font.BOLD, Font.ITALIC字号:字的大小(磅数)使用字体对象-如设置某组件当前使用的字体:setFont(Font fn)获取组件当前使用的字体:getFont()•Color类构造函数1(设置颜色)Color c = new Color(int red, int green, int blue)范围:0~255new Color(200,200,200)new Color(255,0,100)构造函数2Color c = new Color(int rgb)兰色:0~7 位绿色:8~15位红色:16~23位颜色常量值public static final Color blackColor.black , Color.blue , Color.gray ,Color. red Color.white …7.3 Java的标准组件与事件处理GUI(Graphics User Interface)是用图像的方式,借助菜单、按钮等标准界面元素和鼠标操作,帮助用户方便的向计算机系统发出指令、启动相关操作,并将系统运行的结果同样以图形的方式显式给用户的技术。
第七章图形用户界面在应用程序开发中,友好的用户界面是一个最基本的要求,本章将使用Java中提供的java.AWT和javax.Swing类包中有关组件设计用户界面。
7.1 实验一:一般用户界面的实现实验目的(1). 了解AWT和Swing常用容器组件和基本组件的作用和功能。
(2). 了解各类布局管理器的作用和功能。
(3). 使用各类布局管理器和组件创建程序的图形用户界面。
实验要求使用java.AWT和javax.Swing类包中提供了设计用户界面的各种组件,诸如Frame、JFrame、Panel、JPanel等容器组件、TextField、JTextField、Label、JLabel、Button、JButton 等基本组件等,编写程序创建并实现简洁明了的用户界面。
实验内容使用AWT和Swing组件创建一般的应用程序用户界面。
实验示例7.1.1在前边定义了公司的职员信息类,成员变量包括ID(身份证)、name(姓名)、sex(性别)、birthday(生日)、home(籍贯)、address(居住地)和number(职员号),设计一个录入或显示职工信息的程序界面(以FlowSaylout布局安排组件)。
实现该示例的步骤如下:⑴简要分析可以采用Frame容器组件构建用户界面,使用Label组件显示标识,使用TextField组件输入或显示个人信息,使用Button组件确定诸如输入、显示或退出操作。
可以建立一个Frame类的派生类EmployeeMess来完成用户界面的构建。
⑵根据上述简要分析,给出如下参考程序代码(EmployeeMess.java):/*公司职员信息界面程序 EmployeeMess.java*使用AWT组件构建,采用FlowLayout布局*/图7-1 示例7.1.1用户界面import java.awt.*;public class EmployeeMess extends Frame{TextField ID = new TextField(18);TextField name = new TextField(10);TextField birthday = new TextField(10);TextField sex = new TextField(2);TextField home = new TextField(18);TextField address = new TextField(18);TextField brithday = new TextField(10);TextField number = new TextField(5);Button oprate = new Button("操作");Button exit = new Button("退出");public EmployeeMess(){super("公司职员信息");this.setLayout(new FlowLayout());this.add(new Label("身份证号码")); //把组件加入到框架窗口中this.add(ID);this.add(new Label("姓名"));this.add(name);this.add(new Label("性别"));this.add(sex);this.add(new Label("出生日期"));this.add(birthday);this.add(new Label("籍贯"));this.add(home);this.add(new Label("居住地"));this.add(address);this.add(new Label("职工号"));this.add(number);this.add(oprate);this.add(exit);this.pack();//按合适大小显示对象this.setVisible(true); //设置组件是可见的}} ⑶ 编译EmployeeMess.java 程序,生成EmployeeMess.class 类文件,以供其他应用程序所用。
⑷ 程序及分析程序中使用了AWT 组件来构建用户界面,在Frame 容器上摆放Label 、TextField 和Button 组件,由于采用了FlowLayout 布局,所以布局在容器上组件的大小不会随容器大小的改变而改变,而组件所在的行会改变。
⑸ 测试EmployeeMess 类的功能。
编写一个简单的应用程序,创建EmployeeMess 对象,验证EmployeeMess 的功能。
参考代码如下:public class TestEmployeeMess{public static void main( String[] args ){new EmployeeMess();}图7-2 示例7.1.2程序界面} 编译并运行测试程序,用户界面经鼠标拖动改变大小后,如图7-1所示。
注意:该程序不能正常退出,只能强行退出。
自由练习7.1 仿照实验示例7.1.1,设计一个录入或显示学生信息的程序界面。
学生信息量包括ID(身份证)、name(姓名)、sex(性别)、birthday(生日)、home(籍贯)、number(学号)和result (入学成绩),以FlowSaylout 布局安排组件。
实验示例7.1.2 编程实现一个如图7-2的小学生习题训练用户界面。
实现该示例的步骤如下:⑴ 简要分析为了使该界面应用于其他程序,可以使用JPanel 组件构建界面。
根据要求该界面有3行组成:第一行由一个标签(JLabel )和一个按钮(JButton )组件构成;第二行可以由4个标签(分别表示两个运算数、运算符号和等号)和一个文本框(JTextField )组件构成;第3行由一个按钮构成。
由上所述,由于第1行和第2行含有多个组件,可以将它们分别以FlowLayout 流布局放在JPanel 容器中。
这样就可以GridLayout 布局按3行的形式将所有组件摆放到界面上。
⑵ 根据上述简要分析,可以给出如下参考程序代码(StudentSreen.java):/* 小学生训练题界面* StudentScreen.java*/import java.awt.*;import javax.swing.*;public class StudentScreen extends JPanel{JLabel num1=new JLabel("0 "); //显示第1个运算数JLabel num2=new JLabel("0 "); //显示第2个运算数JLabel op=new JLabel("+"); //显示运算符号JLabel info=new JLabel("测试时间10分钟,按'开始'键开始!");JTextField answer=new JTextField(10); //输入运算结果JButton next = new JButton("下一题"); //操作按钮JButton start = new JButton("开始"); //操作按钮JPanel pan1=new JPanel();JPanel pan2=new JPanel();JPanel pan3=new JPanel();public StudentScreen(){setLayout(new GridLayout(3,1));pan1.add(info); //将第1行的组件放在pan1容器中pan1.add(start);//……………………pan2.add(num1); //将第2行的组件放在pan2容器中pan2.add(op); //……………………pan2.add(num2); //……………………pan2.add(new JLabel("="));//……………………pan2.add(answer); //……………………add(pan1); //将pan1(第1行的组件)摆放在界面上add(pan2); //将pan2(第2行的组件)摆放在界面上add(next); ////将next按钮(第3行的组件)摆放在界面上}}⑶编译StudentSreen.java程序,生成StudentSreen.class类文件,以供其他应用程序所用。
⑷程序及分析本程序使用swing组件构建用户屏幕,采用JPanel容器嵌套JPanel容器的方式,目的是该界面可以添加到Frame或JFrame容器上,为其他程序所用。
⑸测试StudentSreen类的功能。
编写一个简单的应用程序,将StudentSreen对象添加到JFrame窗口上,验证StudentSreen的功能。
参考代码如下:import javax.swing.*;public class TestStudentScreen extends JFrame{TestStudentScreen(){add(new StudentScreen());setVisible(true);pack();setDefaultCloseOperation(3);}public static void main(String [] args){new TestStudentScreen();}}编译并执行该程序,观看程序的界面效果。
实验示例7.1.3 在实验示例7.1.1中设计的用户界面,是用FlowSayout布局组件的,组件的大小不随容器的变化而变化,布局有些不太整齐,修改此用户界面,改用GridLayout 布局,使界面整洁一些。
实现该示例的步骤如下:⑴简要分析为了界面的整洁性,可以使用Swing组件构建用户界面,为了使该界面能部署在JFrame 窗体容器上,采用JPanel容器来构建用户界面屏幕,并在JPanel容器中嵌套两个JPanel 容器,一个JPanel容器上布局用于显示标识的Label组件和输入或显示个人信息的TextField 组件,以一行四列的形式摆放组件;另一个JPanel容器上布局Button组件,以一行两列的形式摆放。
⑵根据上述简要分析,给出如下参考程序代码(EmployeeMess2.java):/*公司职员信息界面程序 EmployeeMess2.java*使用Swing组件构建,采用GridLayout布局*/import java.awt.*;import javax.swing.*;public class EmployeeMess2 extends JPanel{JTextField ID = new JTextField(18);JTextField name = new JTextField(10);JTextField birthday = new JTextField(10);JTextField sex = new JTextField(2);JTextField home = new JTextField(18);JTextField address = new JTextField(18);JTextField number = new JTextField(5);JButton oprate = new JButton("操作");JButton exit = new JButton("退出");JPanel jp1=new JPanel();JPanel jp2=new JPanel();public EmployeeMess2(){this.setLayout(new GridLayout(2,1));//设置JPanel容器上组件布局为2行1列 jp1.setLayout(new GridLayout(0,4)); //设置jp1容器上组件的布局为n行4列 jp1.add(new JLabel("身份证号码")); //把组件加入jp2容器中jp1.add(ID); //..................jp1.add(new JLabel("姓名")); //..................jp1.add(name); //..................jp1.add(new JLabel("性别")); //..................jp1.add(sex); //..................jp1.add(new JLabel("出生日期")); //..................jp1.add(birthday); //..................jp1.add(new JLabel("籍贯")); //..................jp1.add(home); //..................jp1.add(new JLabel("居住地")); //..................jp1.add(address); //..................jp1.add(new JLabel("职工号")); //..................jp1.add(number); //..................jp2.setLayout(new GridLayout(1,2)); //设置jp2容器上组件的布局为1行2列 jp2.add(oprate); //将按钮添加到jp2容器上jp2.add(exit); //.....................this.add(jp1); //将jp1放入当前容器中this.add(jp2); //............................this.setSize(200,200);}}⑶编译EmployeeMess2.java程序,生成EmployeeMess2.class类文件,以供其他应用程序所用。