版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第八章JFC/AWT/Swing
AWT
AWT事件处理模型
AWT组件类库1JFC/SwingJFC(JavaFoundationClasses):Java基础类,是关于GUI组件和服务的完整集合,主要包含5个API:AWT、Java2D、Accessibility、Drag&Drop、Swing。JFC提供了帮助开发人员设计复杂应用程序的一整套应用程序开发包。JavaFoundationClasses(JFC)包含如下特征:
Swing组件
支持可插入的look&feel
Accessibility
Java2D
DragandDrop2Java基础类Java2D是一套图形API,它为Java应用程序提供了一套高级的有关二维(2D)图形图像处理的类。Java2DAPI扩展了java.awt和java.awt.image类,并提供了丰富的绘图风格,定义了复杂图形的机制和精心调节绘制过程的方法和类。这些API使得独立于平台的图形应用程序的开发更加简便。AccessibilityAPI提供了一套高级工具,用以辅助开发使用非传统输入和输出的应用程序。它提供了一个辅助的技术接口,如:屏幕阅读器,屏幕放大器,听觉文本阅读器(语音处理)等等。Drag&Drop技术提供了Java和本地应用程序之间的互操作性,用来在Java应用程序和不支持Java技术的应用程序之间交换数据。JFC模块的重点在Swing。Swing用来进行基于窗口的应用程序开发,它提供了一套丰富的组件和工作框架,以指定GUI如何独立于平台地展现其视觉效果。3AWT(抽象窗口工具包)AWT(AbstractWindowToolkit),抽象窗口工具包,SUN公司提供的用于图形界面编程(GUI)的类库。基本的AWT库处理用户界面元素的方法是把这些元素的创建和行为委托给每个目标平台上(Windows、Unix、Macintosh等)的本地GUI工具进行处理。例如:如果我们使用AWT在一个Java窗口中放置一个按钮,那么实际上使用的是一个具有本地外观和感觉的按钮。这样,从理论上来说,我们所编写的图形界面程序能运行在任何平台上,做到了图形界面程序的跨平台运行。4抽象窗口工具集AWTJava.awt包包括建立GUI所需基本组件。Java.awt的主要类及层次关系ObjectBorderLayoutFlowLayoutGridBagLayoutMenuComponentMenuBarMenuItemComponentButtonContainerpanelwindowScrollPane...DialogFrameApplet...LayoutManager5容器(Container)组件必须放在容器内才能显示容器主要包括:窗口(Window,Frame)面板(Panel)ContainerPanelWindowScrollPaneDialogFrameApplet6Frame框架类带有标题并可改变大小,可以使用add()方法向Frame中加组件。importjava.awt.*;publicclassMyFrameextendsFrame{publicstaticvoidmain(Stringargs[]){
MyFramefr=newMyFrame(“HelloOutThere!”); fr.setSize(500,500); fr.setBackground(color.green); fr.setVisible(true); }publicMyFrame(Stringstr){ super(str); }}HelloOutThere!7PanelPanel必须放在Window或Frame中。是一块无边框的区域。可以向其中放入基本组件。…fr=newFrame(“FramewithPanel”);Panelpan=newPanel();fr.setSize(200,200);fr.setBackground(Color.blue);pan.setSize(100,100);pan.setBackground(Color.yellow);fr.add(pan);fr.setVisible(true);…}FramewithPanel8LayoutManager容器中组件的位置和大小布局通常由LayoutManager布局管理器来控制。容器对布局管理器的特定实例保持一个引用。当容器需要定位一个组件时,它将调用布局管理器来完成。当决定一个组件的大小时,也是如此。LayoutManager负责决定容器的布局策略及容器内每个组件的大小。每个容器都由一个缺省的LayoutManager,可通过setLayout()方法改变。Java提供的五种方式的布局管理器 FlowLayout BorderLayout GridLayout CardLayout GridBagLayout(最复杂的布局方式一般不使用)9LayoutManager(布局管理器)10布局管理器我们可以通过设置空布局管理器,来控制组件的大小和位置。调用setLayout(null)。在设置空布局管理器后,必须对所有的组件调用setLocation(),setSize()或setBounds(),将它们定位在容器中。11FlowLayoutManager组件采用从左到右,从上到下逐行摆放。FlowLayoutOpenCloseokFlowLayoutOpenCloseoksetLayout(newFlowLayout(intalign,inthgap,intvgap))FlowLayout.LEFTFlowLayout.RIGHTFlowLayout.CENTER缺省是居中12FlowLayoutManager例:importjava.awt.*; publicclassExGui{ privateFramef; privateButtonb1; privateButtonb2; publicstaticvoidmain(Stringargs[]){ ExGuiguiwindow=newExGui(); guiWindow.go(); } publicvoidgo(){ f=newFrame(“GUIexample”); f.setLayout(newFlowLayout()); b1=newButton(“PressMe”); b2=newButton(“Don’tPressMe“); f.add(b1); f.add(b2); f.setVisible(true);} }GUIexamplePressMeDon’tPressMe13BorderLayoutManagerBorderLayout分5个区:JAVAAPI帮助文档BorderLayoutNorthWestEastSouthCenterBorderLayout缺省:Center位置14BorderLayoutManager构造与安装BorderLayout:setLayout(newBorderLayout())-组件间无缝隙setLayout(newBorderLayout(inthgap,intVgap));加入组件:add(button,BorderLayout.CENTER)15GridLayoutManager把窗口分成网格,n行*m列。组件从左到右,从上到下填充。构造与安装布局管理器: setLayout(newGridLayout(introws,intcols));16Grid123456GridLayoutManager例: … f=newFrame(“Grid”); f.setLayout(newGridlayout(3,2)); b1=newButton(“1”); b2=newButton(“2”); b3=newButton(“3”); b4=newButton(“4”); b5=newButton(“5”); b6=newButton(“6”); f.add(b1); f.add(b2); f.add(b3); f.add(b4); f.add(b5); f.add(b6); f.pack(); f.setVisible(true); …17CardLayoutManager把组件象一系列卡片一样叠放,一个时刻只能看到最上面的。18GridBagLayout19如何选择布局管理器组件尽量充满容器空间——使用BorderLayout或 GridBagLayout组件以自然大小紧凑的在一行中显示——FlowLayout组件大小相同,并且成行或成列显示——GridLayout20GUI的设计步骤先设计一个窗口,如Frame确定布局管理器在窗口中添加所需组件改变组件颜色、字体增加事件处理21AWT事件处理模型什么是事件事件处理机制事件目录事件、接口、方法列表多监听器事件适配器22Event的含义Events(事件):描述发生了什么的对象。Java中有很多不同类型的事件类,用来描述不同 类型的用户动作Eventsource(事件源):
产生事件的组件。Eventhandlers(事件处理器):接收事件对象、解释事件对象并处理用户交互的方法。23JDK1.2中的事件处理机制FramePanelButtonPanelandFrameeventhandlersactionperformed(ActionEvente){ }ActionEvent(二)JDK1.1的事件模型:委托模型事件监听器方式:实现了监听器接口的类。一个监听器对象是一个实现了专门的监听器接口的类的实例。事件监听器Actionhandlers24JDK1.2中的事件处理机制监听器:每个事件有一个相应的监听器接口,定义了接收事件的方法。实现该接口的类,可作为监听器注册。每个组件都注册有一个或多个监听器(类),该监听器包含了能接收和处理事件的事件处理。事件对象只向已注册的监听器报告。25JDK1.2中的事件处理机制包含事件处理的程序应该包括以下三部分内容:1.在事件处理类的声明中指定要实现的监听器名,如:publicclassMyClassimplementsActionListener{
…}2.实现监听器中的接口,如:publicvoidactionPerformed(ActionEvente){
...//响应某个动作的代码...
}
3.在一个或多个组件上将监听器类的实例注册为监听器,如:someComponent.addActionListener(instanceOfMyClass);
26事件分类java.util.EventObjectJava.awt.AWTEventActionEventAdjustmentEventComponentEventItemEventTextEventContainerEventFocusEventInputEventWindowEventJava.beans.beanContext...27事件监听器接口java.util.EventListenerActionListener…...ItemListener…28事件接口与方法目录ListenerInterfaceAdapterClassMethodsActionListener
无actionPerformedAdjustmentListener
无adjustmentValueChangedComponentListener
ComponentAdapter
componentHidden
componentMoved
componentResized
componentShownContainerListener
ContainerAdaptercomponentAdded
componentRemoved
FocusListener
FocusAdapter
focusGained
focusLostItemListener
无itemStateChanged
29ListenerInterfaceAdapterClassMethodsKeyListener
KeyAdapterkeyPressed
keyReleased
keyTypedMouseListener
MouseAdapter
mouseClicked
mouseEntered
mouseExited
mousePressed
mouseReleasedMouseMotionListenerMouseMotionAdaptermouseDragged
mouseMoved
TextListener
无textValueChangedWindowListener
WindowAdapterwindowActivated
windowClosed
windowClosing
windowDeactivated
windowDeiconified
windowIconified
windowOpened事件接口与方法目录30举例--带有两个监听器的Frame…publicclassTwoListenerimplements MouseMotionListener,MouseListener{ Framef; TextFieldtf; publicstaticvoidmain(Stringargs[]){ TwoListenertwo=newTwoListener(); two.go(); }
31publicvoidgo(){ f=newFrame(“TwoListener”); tf=newTextField(30); f.add(tf,”BorderLayout.SOUTH”);
f.addMouseMotionListener(this); f.addMouseListener(this); … }//TheseareMouseMotionListenereventspublicvoidmouseDragged(MouseEvente){}publicvoidmouseMoved(MouseEvente){…}//TheseareMouseListenereventspublicvoidmouseEntered(MouseEvente){ Strings=“Themouseentered”; tf.setText(s);}publicvoidmouseClicked(MouseEvente){…}publicvoidmouseReleased(…){…}……}举例--带有两个监听器的Frame32多监听器在同一个组件上注册多个监听器。根据需要多次调用addXXXListener()方法注册多个监听器。33EventAdaptersAdapter类实现了相应Listener接口,但所有方法体都是空的。用户可以把自己的监听器类声明为adapter类的子类,便可以只重写需要的方法。…publicclassMouseClickHandlerextendsMouseAdapter{ publicvoidmouseClicked(MouseEvente){
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论