单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第六章 图形用户界面程序设计,主要内容,图形用户界面开发包:,AWT,包及,Swing,包,掌握创建,GUI,程序的基本方法,掌握使用布局管理器进行界面布局的基本方法,掌握,Swing,包中常用组件的基本用法,掌握,Java,事件处理机制,Java,中开发图形用户界面的资源,界面元素:容器和组件,java.awt,包,java.swing,包,布局:,常用布局管理类:,java.awt,新增布局管理类:,java.swing,事件处理:,常用事件处理类或接口,:java.awt.event,新增事件处理类或接口:,Java.swing.event,Java GUI,组件,AWT(Abstract Window Toolkit):,早期版本。,包为:,java.awt,其优点是:简单、系统开销小;但是它开发出来的应用程序移植性差,而且不如,Windows,自带的程序看起来精美。,Swing:Java1.2,版本正式加入的新图形用户版本。,包为:,javax.swing,优点是:不包含任何与平台有关的本地代码,基于,swing,的应用程序具有很好的可移植性;具有比,AWT,更为丰富的组件;组件的形式也可以多样化;使用,MVC,体系结构进行设计;,AWT,组件和,swing,组件的关系,几乎所有的,AWT,组件都有对应的,swing,组件,,swing,组件名前多一个字母“,J”,。,Swing,对,AWT,组件进行了修改,且增加了新的组件。,本课程我们使用,swing,组件开发图形用户界面。,使用,swing,开发,GUI,所需的资源,开发图形用户界面程序通常需导入:,import javax.swing.*;,import java.awt.*;,import java.awt.event.*;,Gui,程序框架,import javax.swing.*;/,引入,GUI,包,public class MyFirstGUI,extends JFrame,public MyFirstGUI(),super(,我的第一个窗口程序,);/,调用父类,Jframe,的构造器方法,public static void main(String args),MyFirstGUI w1=new MyFirstGUI();,w1.setSize(300,150);,/,设置窗口大小,w1.setVisible(true);,/,显示窗口,认识,Java GUI,程序,调试运行例题,6-1,JFrame,类支持图形用户界面的设计与实现,通常我们编写的,GUI,应用程序都要继承,JFrame,类,.,JFrame,类位于,javax.swing,包,.,java.swing,包是,Java,平台上,JFC,(,Java Foundation Classws,)的一部分,它提供开发,GUI,所需要的所有组件。,向,JFrame,中添加组件步骤,1.,创建组件对象,如:,JLabel jL1=new JLabel(,欢迎光临,);,2.,获得添加的目标容器,Container w1Container=w1.getContentPane();,3.,将组件添加到容器中,w1Container.add(jL1);,进一步认识,Java GUI,程序,调试运行例题,6-2,JLabel,标签组件,用来在窗口中显示信息,.,getContentPane(),是,JFram,的方法,用来获取当前对象的窗口容器,(Container).,所有在窗口中显示的组件都要加入到这个容器中,.,通常情况下,用,add,方法将组件加入,.,Container,类位于,java.awt,包,.,抽象窗口工具包,AWT(Abstract Window Toolkit,),是,API,为,Java,程序提供的建立图形用户界面,GUI,工具集,,AWT,可用于,Java,的,applet,和,applications,中。,问题思考,如果在一个窗口里显示多个标签,那么这些标签应该如何排列,?,Java,的布局管理器,Java,的布局管理器提供了几种不同的布局管理方式,用来控制,组件在容器中的显示方式和显示位置,.,所有的布局管理方式都是以类的形式实现的,这些类位于,java.awt,包中,.,常用的布局管理方式有下面几种,:,顺序布局,:FlowLayout,边界布局,:Borderlayout,网格布局,:GridLayout,手工布局,:,设置布局管理器,每个容器拥有自己默认的布局管理器。,ContentPane,的默认布局是,BorderLayout,。,如果不希望使用默认布局,则可使用所有容器的父类,Container,的,setLayout(),方法改变。例如:,JPanel pane=new JPanel();,pane.setLayout(new BorderLayout,(),);,组件布局方法,顺序布局,(FlowLayout),:将组件按从左至右,从上到下的顺序逐个放置。,边界布局,(BorderLayout),把容器分为,5,个区:北区、南区、东区、西区、中区。组件可以指定自己放在那个区,因为只有,5,个区,所以最多容纳,5,个组件。,网格布局,(GridLayout),把容器区域分成若干个网格,每个网格放置一个组件,适合数量众多的组件。在创建网格布局时,可以给出网格的行数和列数。,顺序布局管理,调试运行例题,6-3,定义顺序布局管理对象,FlowLayout myLayout=new FlowLayout();,设置容器的布局管理方式为顺序布局方式,winContainer.setLayout(myLayout);,顺序布局(,FlowLayout,),是把组件一个接一个地从左到右顺序排列,一行排满后就转到下一行继续排列,直到把所有组件都排列完毕为止。,在顺序布局方式中,组件通过容器的,add,(组件),方法来实现上述排列。,边界布局,调试运行例题,6-4,定义边界布局管理器对象,BorderLayout myLayout=new BorderLayout();,设置容器的布局管理方式为边界布局方式,winContainer.setLayout(myLayout);,将标签组件,jL1,放置在窗口东区,winContainer.add(East,jL1),或,:winContainer.add(BorderLayout.EAST,jL1);,边界布局,(,BorderLayout,)是把容器分为,5,个区:北区(,North,)、南区(,South,)、东区(,East,)、西区(,West,)和中区(,Center,)。这几个区的分布规律是“上北下南,左东右西中”。组件可以通过容器的,add(,区域,组件,),的方法将其指定显示位置。由于只有,5,个区域,因此,边界布局最多只能放置,5,个组件。,网格布局,调试运行例题,6-5,定义网格布局管理器对象,GridLayout myLayout=new GridLayout(3,2);,设置容器的布局管理方式为网格布局方式,winContainer.setLayout(myLayout);,网格布局,(GridLayout),将容器划分为,m,行,n,列个网格,每个网格放置一个组件,.,组件通过容器的,add(,组件,),方法将组件从左到右放置在对应的网格中。,手工布局,调试运行例题,6-6,jL1.setBounds(x,y,width,height);,设置标签组件,jL1,左上角坐标在窗口中位于,(x,y),处,组件,jL1,宽为,width,像素,高为,heiht,像素,.,窗口的原点位于窗口的左上角,.X,值越大,就越靠 近窗口的右边,y,值越大,就越靠近窗口的下面,.,设置容器的布局管理方式为,null,布局方式,winContainer.setLayout(null);,手工布局,允许程序员对界面进行个性化的设计,即由程序员来安排组件在容器中的具体位置和大小,.,组件通过容器的,add,(组件),方法加入。,手工布局,设置布局为手工布局,如:,w1Container.setLayout(null);,设置组件显示的位置和大小,如,1,:,jL1.setBounds(10,20,100,20);,如,2,:,jL2.setBounds(20,40,100,20);,小结,Java GUI,界面设计步骤,:,1.,引入组件所在的包(如,javax.swing.,和,java.awt,),2.,定义图形用户界面类,该类继承自,JFrame,3.,将图形用户界面中需要的组件定义成成员变量,4.,添加构造器方法,在该构造器方法中,实现界面设计,(,1,)调用父类,JFrame,构造器方法,(,2,)将需要在当前窗口放置的组件进行初始化,(,3,)通过,this.getContentPane(),获得当前窗口容器对象,(,4,)定义并设置当前容器的布局管理方式,(,5,)将定义好的组件添加到当前窗口,(,6,)将窗口设置为合适的大小,(,7,)显示窗口,5.,生成窗口对象(通常在,main,方法中生成),你就可以看到相应的窗口了,练习,1,编程实现如图所示的窗口,使用顺序布局方式,练习,2,编程实现如图所示的窗口,使用边界布局方式,练习,3,编程实现如图所示的窗口,使用网格布局方式,事件处理,import javax.swing.*;,import java.awt.*;,public class MyFirstEvent extends JFrame,public MyFirstEvent(),super(,事件处理机制,);,public static void main(String args),MyFirstEvent w1=new MyFirstEvent();,Container w1Container=w1.getContentPane();,w1Container.setLayout(null);,JLabel jL1=new JLabel(,欢迎访问,请点击下面的按钮,);,jL1.setBounds(50,20,200,30);,w1Container.add(jL1);,JButton jB1=new JButton(,被按下偶数次,);,jB1.setBounds(60,60,150,30);,w1Container.add(jB1);,w1.setSize(300,150);,w1.setVisible(true);,事件处理中的4要素,事件源:产生事件的组件,事件,事件监听器:负责监听事件的程序,事件服务程序,:针对具体事件的处理代码,事件处理机制,添加事件处理步骤:,(,1,)为组件注册事件监听器:,如:,addActionListener(this),(,2,)编写事件监听器类,要求实现相关的事件监听器接口。并在事件监听器类中实现特定方法。,(,3,)并在事件监听器类中实现特定方法。,注:常用事件处理接口包含在,java.awt.event,包中,因此,程序必须引入该包。,事件服务类的建立,事件服务类必须实心相应的事件监听器接口或继承适配器类。,事件监听器接口,适配器,Adapter,类,WindowListener,WindowAdapter,MouseMotionLister,MouseMotionAdapter,MouseListener,MouseAdapter,KeyListener,KeyAdapter,FocusListener,FocusAdapter,ActionListener,ItemListener,AdjustmentListener,常用组件的使用,Font,和,Color,标签和按钮,文本输入框和密码输入框,单选按钮和复选框,下拉菜单,菜单,对话框