本章学习目标1图形用户界面(GUI)设计2GUI事件处理3GUI常用组件和视觉控制4AWT绘图5Applet3JavaSEJavaSE应用程序设计应用程序设计新科海学校新科海学校基本概念/术语图形用户界面GUI--GraphicalUserInterface抽象窗口工具集AWT--AbstractWindowToolkit相关软件包:¾java.awt包提供基本GUI组件、视觉控制和绘图工具API¾java.awt.event包提供JavaGUI事件处理API4JavaSEJavaSE应用程序设计应用程序设计新科海学校新科海学校组件组件(Component)是图形用户界面的基本组成元素,凡是能够以图形化方式显示在屏幕上并能够与用户进行交互的对象均为组件,如菜单、按钮、标签、文本框、滚动条等。组件不能独立地显示出来,必须将组件放在一定的容器中才可以显示出来。JDK的java.awt包中定义了多种GUI组件类,如Menu、Button、Label、TextField等。抽象类java.awt.Component是除菜单相关组件之外所有JavaAWT组件类的根父类,该类规定了GUI组件的基本特性,如尺寸、位置和颜色效果等,并实现了作为一个GUI部件所应具备的基本功能。5JavaSEJavaSE应用程序设计应用程序设计新科海学校新科海学校容器容器(Container)实际上是Component的子类,因此容器类对象本身也是一个组件,具有组件的所有性质,另外还具有容纳其它组件和容器的功能。容器类对象可使用方法add()添加组件两种主要的容器类型:¾java.awt.Window可自由停泊的顶级窗口¾java.awt.Panel可作为容器容纳其他组件,但不能独立存在,必须被添加到其他容器(如Frame)中。6JavaSEJavaSE应用程序设计应用程序设计新科海学校新科海学校下拉式列表框,内容不可改变ComponentObject抽象的组件类ContainerComponent抽象的容器类DialogWindow对话框组件,顶级窗口、带标题栏FileDialogDialog用于选择文件的平台相关对话框FrameWindow基本的JavaGUI窗口组件LabelComponent标签类ListComponent包含内容可变的条目的列表框组件MenuBarMenuComponent菜单条组件MenuMenuItem菜单组件MenuItemMenuComponent菜单项组件PanelContainer基本容器类,不能单独停泊PopupMenuMenu弹出式菜单组件ScrollbarComponent滚动条组件ScrollPaneContainer带水平及垂直滚动条的容器组件TextComponentComponentTextField和TextArea的基本功能TextFieldTextComponent单行文本框TextAreaTextComponent多行文本域WindowContainer抽象的GUI窗口类,无布局管理器7JavaSEJavaSE应用程序设计应用程序设计新科海学校新科海学校继承层次:Frame对象的显示效果是一个可自由停泊的顶级“窗口”,带有标题和尺寸重置角标。Frame默认初始化为不可见的,可以调用Frame对象的setVisible(true)方法使之变为可见。作为容器Frame还可使用add()方法包含其他组件。java.lang.Object|+----java.awt.Component|+----java.awt.Container|+----java.awt.Window|+----java.awt.Frame8JavaSEJavaSE应用程序设计应用程序设计新科海学校新科海学校应用程序//例12-1TestFrame.javaimportjava.awt.Frame;publicclassTestFrame{publicstaticvoidmain(Stringargs[]){Framef=newFrame(HelloGUI);f.setSize(200,100);f.setVisible(true);}}9JavaSEJavaSE应用程序设计应用程序设计新科海学校新科海学校组件定位Java组件在容器中的定位由布局管理器决定。如要人工控制组件在容器中的定位,可取消布局管理器,然后使用Component类的下述成员方法:¾setLocation()¾setSize()¾setBounds()GUI坐标系:80x1y1(0,0)Frame内部坐标系y0x07010050屏幕坐标系(0,0)10JavaSEJavaSE应用程序设计应用程序设计新科海学校新科海学校提供容纳组件的空间Panel不能独立存在,必须被添加到其他容器中。可以采用和所在容器不同的布局管理器Panel类的继承层次java.lang.Object|+----java.awt.Component|+----java.awt.Container|+----java.awt.Panel11JavaSEJavaSE应用程序设计应用程序设计新科海学校新科海学校应用举例//例12-2TestFrameWithPanel.javaimportjava.awt.Frame;importjava.awt.Panel;importjava.awt.Color;publicclassTestFrameWithPanel{publicstaticvoidmain(Stringargs[]){Framef=newFrame(MyTest);Panelpan=newPanel();f.setSize(200,170);f.setBackground(Color.cyan);f.setLayout(null);//取消默认布局管理器pan.setSize(80,80);pan.setBackground(Color.green);f.add(pan);pan.setLocation(40,40);f.setLocation(300,300);f.setVisible(true);}}12JavaSEJavaSE应用程序设计应用程序设计新科海学校新科海学校练习Frame与Panel组件的使用,对使用AWT组件创建图形用户界面机制建立初步认识;13JavaSEJavaSE应用程序设计应用程序设计新科海学校新科海学校布局管理器(1)容器对其中所包含组件的排列方式,包括组件的位置和大小设定,被称为容器的布局(Layout)。为了使图形用户界面具有良好的平台无关性,Java语言提供了布局管理器来管理容器的布局,而不建议直接设置组件在容器中的位置和尺寸。布局管理器类层次:GridLayoutFlowLayoutBorderLayoutLayoutManagerLayoutManager2CardLayoutGridBagLayout14JavaSEJavaSE应用程序设计应用程序设计新科海学校新科海学校布局管理器(2)每个容器都有一个布局管理器,当容器需要对某个组件进行定位或判断其大小尺寸时,就会调用其对应的布局管理器。ComponentContainerPanelAppletGUI容器默认布局管理器BorderLayoutBorderLayoutFlowLayoutFlowLayoutWindowFrameDialog15JavaSEJavaSE应用程序设计应用程序设计新科海学校新科海学校布局FlowLayout是Panel容器的默认布局管理器类型。布局效果:¾组件在容器中按照加入次序逐行定位,行内从左到右,一行排满后换行。¾不改变组件尺寸,即按照组件原始大小进行显示¾组件间的对齐方式默认为居中对齐,也可在构造方法中设置不同的组件间距、行距及对齐方式。构造方法:¾publicFlowLayout()¾publicFlowLayout(intalign)¾publicFlowLayout(intalign,inthgap,intvgap)16JavaSEJavaSE应用程序设计应用程序设计新科海学校新科海学校举例//例12-3TestFlowLayout.javaimportjava.awt.Frame;importjava.awt.Button;importjava.awt.FlowLayout;publicclassTestFlowLayout{publicstaticvoidmain(Stringargs[]){Framef=newFrame(FlowLayout);Buttonbutton1=newButton(Ok);Buttonbutton2=newButton(Open);Buttonbutton3=newButton(Close);f.setLayout(newFlowLayout());f.add(button1);f.add(button2);f.add(button3);f.setSize(100,100);f.setVisible(true);}}17JavaSEJavaSE应用程序设计应用程序设计新科海学校新科海学校布局(1)BorderLayout是Frame容器的默认布局管理器。布局效果:¾BorderLayout将整个容器的布局划分成东、西、南、北、中五个区域,组件只能被添加到指定的区域。¾如不指定组件的加入部位,则默认加入到Center区域。¾每个区域只能加入一个组件,如加入多个,则先前加入的组件会被遗弃。¾组件尺寸被强行控制,即与其所在区域的尺寸相同。构造方法:¾publicBorderLayout()¾publicBorderLayout(inthgap,intvgap)18JavaSEJavaSE应用程序设计应用程序设计新科海学校新科海学校布局(2)BorderLayout型布局容器尺寸缩放原则:¾北、南两个区域只能在水平方向缩放(宽度可调整)¾东、西两个区域只能在垂直方向缩放(高度可调整)¾中部可在两个方向上缩放NorthSouthWestEestCenter19JavaSEJavaSE应用程序设计应用程序设计新科海学校