资源描述
让,IT,教学更简单,让,IT,学习更有效,让,IT,教学更简单,让,IT,学习更有效,让,IT,教学更简单,让,IT,学习更有效,让,IT,教学更简单,让,IT,学习更有效,目录,让,IT,教学更简单,让,IT,学习更有效,本章小结,第九章,GUI,AWT,事件处理机制,布局管理器,常用事件,常用,Swing,组件,第九章 GUIAWT事件处理机制常用事件,9.1,AWT,概述,9.2,AWT,事件处理,9.3,常用事件分类,9.4,布局管理器,9.5,AWT,绘图,9.6,Swing,9.1AWT概述9.2AWT事件处理9.3常用事件分类9.4,第九章,GUI,GUI,全称是,Graphical User Interface,,即图形用户界面,,即,应用程序提供给用户操作的图形界面,包括窗口、菜单、按钮、工具栏和其它各种图形界面元素,GUI,设计提供了丰富的类库,这些类分别位于,java.awt,和,javax.swing,包中,简称为,AWT,和,Swing,Swing,不仅实现了,AWT,中的所有功能,而且提供了更加丰富的组件和功能,足以满足,GUI,设计的一切需求。,第九章 GUIGUI全称是Graphical User In,9.1 AWT,概述,AWT,是用于创建图形用户界面的一个工具包,它提供了一系列用于实现图形界面的组件,如窗口、按钮、文本框、对话框等。,这些组件都,位于,java.awt,包中,。,9.1 AWT概述AWT是用于创建图形用户界面的一个工具包,,9.1 AWT,概述,Window,类是不依赖其它容器而独立存在的容器,它有两个子类,分别是,Frame,类和,Dialog,类,。,Frame,类用于创建一个具有标题栏的框架窗口,作为程序的主界面,,Dialog,类用于创建一个对话框,实现与用户的信息交互,9.1 AWT概述Window类是不依赖其它容器而独立存在的,9.1 AWT,概述,Panel,也是一个容器,但是它不能单独存在,只能存在其它容器(,Window,或其子类)中,一个,Panel,对象代表了一个长方形的区域,在这个区域中可以容纳其它组件,9.1 AWT概述Panel也是一个容器,但是它不能单独存在,9.2 AWT,事件处理,9.2.1,事件处理机制,事件处理机制专门用于响应用户的操作,比如,想要响应用户的点击鼠标、按下键盘等操作,就需要使用,AWT,的事件处理机制,事件对象(Event):封装了GUI组件上发生的特定事件(通常就是用户的一次操作)。,事件源(组件):事件发生的场所,通常就是产生事件的组件,监听器(Listener):负责监听事件源上发生的事件,并对各种事件做出响应处理的对象(对象中包含事件处理器),事件处理器:监听器对象对接收的事件对象进行相应处理的方法,9.2 AWT事件处理9.2.1 事件处理机制事件对象(Ev,9.2 AWT,事件处理,9.2.1,事件处理机制,9.2 AWT事件处理9.2.1 事件处理机制,9.2 AWT,事件处理,9.2.2,事件适配器,例程,9-3,实现了和例程,9-2,相同的功能。定义的,MyWindowAdapter,类继承了适配器类,WindowAdapter,,由于实现的功能是关闭窗口,因此只需要对,windowClosing(),方法进行重写即可。需要注意的是,几乎所有的监听器接口都有对应的适配器类,通过继承适配器类来实现监听器接口时,需要处理哪种事件,直接重写该事件对应的方法即可。,9.2 AWT事件处理9.2.2 事件适配器例程9-3实现了,9.2 AWT,事件处理,9.2.3,用匿名内部类实现事件处理,9.2 AWT事件处理9.2.3 用匿名内部类实现事件处理,9.3,常用事件分类,9.3.1,窗体事件,WindowEvent,用于表示这些窗体事件,,,在应用程序中,当对窗体事件进行处理时,首先需要定义一个类实现,WindowListener,接口作为窗体监听器,然后通过,addWindowListener(),方法将窗体对象与窗体监听器绑定,9.3 常用事件分类9.3.1 窗体事件,9.3,常用事件分类,9.3.2,鼠标事件,MouseEvent,类用于表示鼠标事件,几乎所有的组件都可以产生鼠标事件,,,鼠标事件包括鼠标按下、鼠标松开、鼠标单击等,。,对,鼠标事件,的处理可,通过实现,MouseListener,接口,或者,继承适配器,MouseAdapter,类,然后调用,addMouseListener(),方法将监听器绑定到事件源对象,9.3 常用事件分类9.3.2 鼠标事件,9.3,常用事件分类,9.3.3,键盘事件,键盘操作也是最常用的用户交互方式,例如键盘按下、释放等,这些操作被定义为键盘事件,KeyEvent,类表示键盘事件,处理,KeyEvent,事件的监听器对象需要实现,KeyListener,接口或者继承,KeyAdapter,类,。,9.3 常用事件分类9.3.3 键盘事件,9.3,常用事件分类,9.3.4,动作事件,在,Java,中,动作事件用,ActionEvent,类表示,处理,ActionEvent,事件的监听器对象需要实现,ActionListener,接口,但监听器对象在监听动作时,不会像鼠标事件一样处理鼠标个别的移动和单击的细节,而是去处理“按钮按下”这样“有意义”的事件,。,9.3 常用事件分类9.3.4 动作事件,9.4,布局管理器,9.4.1 FlowLayout,FlowLayout,是,流式布局管理器,,它,是最简单的布局管理器,。,使用,FlowLayout,布局管理器时,,容器会将组件按照添加顺序从左向右放置。当到达容器的边界时,会自动将组件放到下一行的开始位置。这些组件可以左对齐、居中对齐(默认方式)或右对齐的方式排列,表,9-1,中,列出了,FlowLayout,的三个构造方法,其中,参数,align,决定组件在每行中相对于容器边界的对齐方式,可以使用该类中提供的常量作为参数传递给构造方法,其中,FlowLayout.LEFT,用于表示左对齐、,FlowLayout.RIGHT,用于表示右对齐、,FlowLayout.CENTER,用于表示居中对齐。参数,hgap,和参数,vgap,分别设定组件之间的水平和垂直间隙,可以填入一个任意数值。接下来通过一个添加按钮的案例来学习一下,FlowLayout,布局管理器的用法,如例程,9-8,所示。,9.4 布局管理器9.4.1 FlowLayout表9-1中,9.4,布局管理器,9.4.1 FlowLayout,FlowLayout,布局管理器的特点就是可以将所有组件像流水一样依次进行排列,不需要用户明确的设定,但是在灵活性上相对差了点。例如将图中的窗体拉伸变宽,按钮的大小和按钮之间的间距将保持不变,但按钮相对与容器边界的距离会发生变化,9.4 布局管理器9.4.1 FlowLayoutFlowL,9.4,布局管理器,9.4.2 BorderLayout,BorderLayout,(边界布局管理器)是一种较为复杂的布局方式,它将容器划分为五个区域,分别是东,(EAST),、南,(SOUTH),、西,(WEST),、北,(NORTH),、中,(CENTER),。组件可以被放置在这五个区域的中任意一个,。,9.4 布局管理器9.4.2 BorderLayout,9.4,布局管理器,9.4.2 BorderLayout,9.4 布局管理器9.4.2 BorderLayout,9.4,布局管理器,9.4.3 GridLayout,GridLayout,(网格布局管理器)使用纵横线将容器分成,n,行,m,列大小相等的网格,每个网格中放置一个组件。,添加到容器中的组件首先放置在第,1,行第,1,列(左上角)的网格中,然后在第,1,行的网格中从左向右依次放置其它组件,行满后,继续在下一行中从左到右放置组件,9.4 布局管理器9.4.3 GridLayout,9.4,布局管理器,9.4.3 GridLayout,9.4 布局管理器9.4.3 GridLayout,9.4,布局管理器,9.4.4 GridBagLayout,GridBagLayout,(网格包布局管理器)与,GridLayout,布局管理器类似,不同的是,它允许网格中的组件大小各不相同,而且允许一个组件跨越一个或者多个网格,。,9.4 布局管理器9.4.4 GridBagLayout,9.4,布局管理器,9.4.4 GridBagLayout,使用,GridBagLayout,布局管理器的步骤如下:,9.4 布局管理器9.4.4 GridBagLayout,9.4,布局管理器,9.4.5 CardLayout,CardLayout,(,卡片布局管理器,),将界面看做一系列卡片,在任何时候只有其中一张卡片是可见的,这张卡片占据容器的整个区域。,CardLayout,的常用方法如下所示。,9.4 布局管理器9.4.5 CardLayout,9.4,布局管理器,9.4.6,不使用布局管理器,如果不希望通过布局管理器对容器进行布局,可以调用容器的,setLayout(null),方法,将布局管理器取消。,不使用布局管理器时,,程序必须调用容器中每个组件的,setSize(),和,setLocation(),方法或者是,setBounds(),方法,(,这个方法接收四个参数,分别是左上角的,x,、,y,坐标和组件的长、宽,),来为这些组件在容器中定位,9.4 布局管理器9.4.6 不使用布局管理器,9.5 AWT,绘图,在,java.awt,包中专门提供了一个,Graphics,类,它相当于一个抽象的画笔,其中提供了各种绘制图形的方法,使用,Graphics,类的方法就可以完成在组件上绘制图形,9.5 AWT绘图在java.awt包中专门提供了一个Gra,9.6 Swing,学习,Swing,组件的过程和学习,AWT,差不多,大部分的,Swing,组件都是,JComponent,类的直接或者间接子类,而,JComponent,类是,AWT,中,java.awt.Container,的子类,9.6 Swing学习Swing组件的过程和学习AWT差不多,9.6 Swing,9.6.1 JFrame,JFrame,和,Frame,一样是一个独立存在的顶级窗口,不能放置在其它容器之中,,JFrame,支持通用窗口所有的基本功能,例如窗口最小化、设定窗口大小等等,9.6 Swing9.6.1 JFrame,9.6 Swing,9.6.2 JDialog,JDialog,是,Swing,的另外一个顶级窗口,它和,Dialog,一样都表示对话框,JDialog,对话框可分为两种:模态对话框和非模态对话框。,所谓模态对话框是指用户需要等到处理完对话框后才能继续与其它窗口交互,非模态对话框允许用户在处理对话框的同时与其它窗口交互。,9.6 Swing9.6.2 JDialog,9.6 Swing,9.6.2 JDialog,Jdialog,的构造方法,JDialog,的构造方法中都需要接收一个,Frame,类型的对象,表示对话框所有者,如果该对话框没有所有者,参数,owner,可以传入,null,。,参数,modal,用来指定,JDialog,窗口是模态还是非模态,如果,modal,值设置为,true,,对话框就是模态对话框,反之则是非模态对话框,。默认情况下,,modal,的值为,false,9.6 Swing9.6.2 JDialog,9.6 Swing,9.6.3,中间容器,常见的中间容器包括,JPanel,和,JScrollPane,Jpanel,:,和,AWT,中的,Panel,组件使方法基本一致,它是一个无边框,不能被移动、放大、缩小或者关闭的面板,它的默认布局管理器是,FlowLayout,。当然也可以使用构造函数,JPanel(LayoutManager layout),
展开阅读全文