目标重点难点【课前思考】1.java语言是跨平台的编程语言,那么图形用户界面如何做到跨平台?2.AWT有哪些组件和容器?它们各自的使用方法是什么?3.AWT的事件处理模型是什么?原理又如何?【学习目标】掌握用AWT来设计图形用户界面的方法,尤其是组件、容器、布局管理器等概念。学习AWT事件处理模型,掌握事件源、事件、事件处理者等概念,让程序能够响应用户的操作。最后了解AWT各个组件的用法及所采用的事件处理接口。【学习指南】理解概念,多实践,勤思考,举一反三。【难重点】重点:事件处理模型。难点:内部类匿名类在AWT中的应用。图形用户界面设计使用AWT构造GUI组件容器布局管理AWT事件处理模型AWT组件使用AWT构造GUIjava.awt包提供了基本的java程序的GUI设计工具。ComponentContainerLayoutManagerJava.lang.ObjectAWTEventFontComponetGraphicsMenuComponent各种布局管理器类ContainerPanelAppletWindowFrameComponent(组件)Java的图形用户界面的最基本组成部分是组件,组件是一个可以以图形化的方式显示在屏幕上并能与用户进行交互的对象,例如一个按钮,一个标签等。组件不能独立地显示出来,必须将组件放在一定的容器中才可以显示出来。组件的一般功能基本的绘画支持外形控制大小和位置控制图像处理组件的状态控制Container(容器)容器(Container)实际上是Component的子类,因此容器本身也是一个组件,具有组件的所有性质,另外还具有容纳其它组件和容器的功能。主要功能组件的管理布局管理Graphics类Graphics是所有用来在组件上进行图形绘制时所使用的图形环境上下文的父类.它提供了对组件进行绘制的一般方法和接口封装了用来进行图形绘制时必须的状态信息要绘制的组件对象当前颜色当前字体当前逻辑点操作的功能(Xor或者paint)当前XOR方式的替代颜色。LayoutManager(布局管理器)为了使我们生成的图形用户界面具有良好的平台无关性,Java语言中,提供了布局管理器这个工具来管理组件在容器中的布局,而不使用直接设置组件位置和大小的方式。每个容器都有一个布局管理器,当容器需要对某个组件进行定位或判断其大小尺寸时,就会调用其对应的布局管理器。在程序中安排组件的位置和大小时,应该注意:容器中的布局管理器负责各个组件的大小和位置,因此用户无法在这种情况下设置组件的这些属性。如果试图使用Java语言提供的setLocation(),setSize(),setBounds()等方法,则都会被布局管理器覆盖。如果用户确实需要亲自设置组件大小或位置,则应取消该容器的布局管理器,方法为:setLayout(null);常用容器FramePanelAppletFramejava.lang.Object|+----java.awt.Component|+----java.awt.Container|+----java.awt.Window|+----java.awt.Frameimportjava.awt.*;publicclassMyFrameextendsFrame{publicstaticvoidmain(Stringargs[]){MyFramefr=newMyFrame(HelloOutThere!);fr.setSize(200,200);fr.setBackground(Color.red);fr.setVisible(true);}publicMyFrame(Stringstr){super(str);}}运行结果Paneljava.lang.Object|+----java.awt.Component|+----java.awt.Container|+----java.awt.Panelimportjava.awt.*;publicclassFrameWithPanelextendsFrame{publicFrameWithPanel(Stringstr){super(str);}publicstaticvoidmain(Stringargs[]){FrameWithPanelfr=newFrameWithPanel(FramewithPanel);Panelpan=newPanel();fr.setSize(200,200);fr.setBackground(Color.red);fr.setLayout(null);pan.setSize(100,100);pan.setBackground(Color.yellow);fr.add(pan);fr.setVisible(true);}}运行结果:LayoutManagerFlowLayoutBorderLayoutGridLayoutCardLayoutGridBagLayoutimportjava.awt.*;publicclassExGui{privateFramef;privateButtonb1;privateButtonb2;publicstaticvoidmain(Stringargs[]){ExGuithat=newExGui();that.go();}publicvoidgo(){f=newFrame(GUIexample);f.setLayout(newFlowLayout());b1=newButton(PressMe);b2=newButton(Don'tPressMe);f.add(b1);f.add(b2);f.pack();f.setVisible(true);}}运行结果FlowLayoutPanel,Applet的缺省布局管理器。setLayout(newFlowLayout(FlowLayout.RIGHT,20,40));setLayout((newFlowLayoutFlowLayout.LEFT));setLayout(newFlowLayout());第1个参数设置对齐方向(alignment),缺省情况是居中,第2,3个参数设置横向和纵向的间隔(gap),缺省值是5importjava.awt.*;publicclassmyButtons{publicstaticvoidmain(Stringargs[]){Framef=newFrame();f.setLayout(newFlowLayout());Buttonbutton1=newButton(Ok);Buttonbutton2=newButton(Open);Buttonbutton3=newButton(Close);f.add(button1);f.add(button2);f.add(button3);f.setSize(300,100);f.setVisible(true);}}运行结果为:BorderLayoutWindow,Frame和Dialog的缺省布局管理器。BorderLayout布局管理器包括5个区域:North,South,East,West和Center。添加组件时,必须指明添加位置.否则无法显示.importjava.awt.*;publicclassbuttonDir{publicstaticvoidmain(Stringargs[]){Framef=newFrame(BorderLayout);f.setLayout(newBorderLayout());f.add(North,newButton(North));f.add(South,newButton(South));f.add(East,newButton(East));f.add(West,newButton(West));f.add(Center,newButton(Center));f.setSize(200,200);f.setVisible(true);}}运行结果GridLayout使容器中各个组件呈网格状布局。从上到下,从左到右一次排列.importjava.awt.*;publicclassButtonGrid{publicstaticvoidmain(Stringargs[]){Framef=newFrame(GridLayout);f.setLayout(newGridLayout(3,2));f.add(newButton(1));f.add(newButton(2));f.add(newButton(3));f.add(newButton(4));f.add(newButton(5));f.add(newButton(6));f.setSize(200,200);f.setVisible(true);}}运行结果CardLayoutCardLayout布局管理器能够帮助用户处理两个以至更多的成员共享同一显示空间。importjava.awt.*;importjava.awt.event.*;publicclassThreePagesimplementsMousListener{CardLayoutlayout=newCardLayout();Framef=newFrame(“CardLayout”);Buttonpage1Button;Labelpage2Label;TextAreapage3Text;Buttonpage3Top;Buttonpage3Bottom;publicstaticvoidmain(Stringargs[]){newThreePages().go();}Publicvoidgo(){f.setLayout(layout);f.add(page1Button=newButton(“Buttonpage”),“page1Button”);page1Button.addMouseListener(this);f.add(page2Label=newLabel(“Labelpage”),“page2Label”);page2Label.addMouseLisener(this);//注册监听器Panelpanel=newPanel();panel.setLayout(newBorderLayout());panel.add(page3Text=newTextArea(“Compositepage”),“Center”);page3Text.addMouseListener(this);panel.add(page3Top=newButton(“Topbutton”),“North”);page3Top.addMouseListener(this);panel.add(page3Bottom=newButton(“Bottombutton”),“South”);page3Bottom.addMouseListener(this);f.add(panel,“panel”);f.setSize(200,200);f.setVisible(true);}publicvoidmouseClicked(MouseEvente){layout.next(f);}publicvoidmouseEntered(MouseEvente)publicvoidmouseExited(MouseEvente)publicvoidmousePressed(MouseEvente)publicvoidmouseReleased(MouseEvente)}模拟考题Question31)Whichofthefollowingstatementsaretrue?1)ThedefaultlayoutmanagerforanAppletisFlowLayout2)ThedefaultlayoutmanagerforaFrame