第07章+图形用户界面的创建(精简版)_第1页
第07章+图形用户界面的创建(精简版)_第2页
第07章+图形用户界面的创建(精简版)_第3页
第07章+图形用户界面的创建(精简版)_第4页
第07章+图形用户界面的创建(精简版)_第5页
已阅读5页,还剩83页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第7章图形用户界面的创立本章主要内容图形用户界面的概述

常用容器类与容器布局管理事件处理7.1图形用户界面的概述图形用户界面〔GUI〕是用户与程序交互的窗口,设计和实现图形用户界面时,主要包含两项内容。〔1〕创立图形界面中需要的元素,进行相应的布局。〔2〕定义界面元素对用户交互事件的响应以及对事件的处理。用户与计算机系统(各种程序)交互的接口AWTSwingAWTGUI的根本类库位于java.awt包中,这个包被称为抽象窗口工具箱(AbstractWindowToolkit),AWT按照面向对象的思想来创立GUI,它提供了容器类,众多的组件类和布局管理器类。AWT依赖于本地操作系统以下图显示了AWT的类层次结构。AWT工具集简介java.awt包中包含了一个完整的类集以支持GUI程序的设计:事件类字体类GraphicsComponent颜色类布局管理类java.lang.ObjectCheckboxContainerButton…WindowPanelAppletDialogFrameList图象类菜单类ScrollpaneAWT创立GUI通过java.awt包容器组件布局管理器字体事件图形和绘制方法包含AWT容器组件以图形表示的对象允许用户交互创立并构造用于选择新字体的对象用于用户和系统交互AWT包含内容使用AWT图形方法相对于窗口绘制图形定义GUI组件的位置AWT〔重量级组件〕7.1.1AWT与Swing为了使用Java创立的图形界面也能够跨平台,即在不同操作系统中保持相同的外观,从JDK1.2版本开始引入了Swing组件,这些Swing组件位于javax.swing包中,成为JDK根底类库的一局部。Swing组件是用纯Java语言编写而成的,不依赖于本地操作系统的GUI,Swing组件可以跨平台运行。Swing创立GUI通过Javax.swing包Swing包含内容容器组件可改变的外观Java2D图形绘制包含Swing组件以图形表示的对象允许用户交互使用Java2D绘制图形可更换图形界面的风格Swing〔轻量级组件,纯Java组件〕AWT和Swing是合作关系,而不是用Swing取代了AWTSwing组件都是AWT的Container类的直接子类和间接子类。Swing组件以"J"开头,除了有与AWT类似的组件外,还增加了一个丰富的高层组件集合,如表格〔JTable〕、树〔JTree〕。7.1.1AWT与SwingAWT与Swing顶层窗口类之间的关系分为三类:容器、控制组件和用户自定义成分〔1〕容器容器是用来组织或容纳其他界面成分和元素的组件。〔2〕组件它是图形用户界面的最小单位之一,它里面不再包含其他的成分。〔3〕用户自定义成分编程人员还可以根据用户的需要,使用各种字型、字体和色彩设计一些几何图形、标志图案等。图形用户界面元素分类使用组件,通常需要如下的步骤:①创立某控制组件类的对象,指定其大小等属性。②使用某种布局策略,将该控制组件对象参加到某个容器中的指定位置处。③将该组件对象注册给所能产生的事件对应的事件监听程序,重载事件处理方法,实现利用该组件对象与用户交互的功能。7.2常用容器类与容器布局管理容器(Container)实际上是Component的子类,因此容器本身也是一个组件,具有组件的所有性质,另外还具有容纳其它组件和容器的功能。主要功能:组件的管理和布局管理顶层容器:JFrame:用于框架窗口的类,此窗口带有边框、标题、用于关闭和最小化窗口的图标等。带GUI的应用程序通常至少使用一个框架窗口。JDialog:用于对话框的类。JApplet:用于使用Swing组件的JavaApplet的类。中间层容器:JPanel:最灵活、最常用的中间容器。JScrollPane:与JPanel类似,但还可在大的组件或可扩展组件周围提供滚动条。JTabbedPane:包含多个组件,但一次只显示一个组件。用户可在组件之间方便地切换。JToolBar:按行或列排列一组组件〔通常是按钮〕。Swing容器组件主窗口Swing应用程序创立容器设置容器大小〔对框架及面板而言〕设置容器可见度〔对框架及面板而言〕创立顶层容器顶层容器〔每个应用程序中至少有一个〕内容面板主要显示区域包含

GUI中的可视组件

javax.swing包

常见容器JFrameJScrollPaneJPanel1.扩展java.awt.Frame类2.用于在Swing程序中创立窗口3.包含边框、标题和用于关闭和图标化窗口的按钮1.中间容器2.用于将较小的轻量级组件组合在一起3.与内容窗格相似,面板在默认情况下不透明管理视区、滚动条及可选的行和列的标题视区Swing容器JFrame是Application程序的图形用户界面容器。JFrame类常用的两种构造方法:〔1〕JFrame()构造一个初始时不可见的新窗体。〔2〕JFrame(Stringtitle)方法创立一个标签为title的JFrame对象创立窗体时有两种方式:〔1〕直接编写代码调用JFrame类的构造器。〔2〕继承JFrame类,在继承的类中编写代码对窗体进行详细地刻画,这种方式比较适合窗体比较复杂的情况7.2.1顶层容器〔JFrame〕在参加控制组件之前首先要得到窗口的内容窗格。要想将组件放入内容窗格,可以使用两种方法:〔1〕通过getContentPane()方法获得其默认的内容窗格,返回类型为Container容器。〔2〕通过创立一个新的内容窗格取代顶层容器默认的内容窗格。通常的做法是创立一个JPanel的实例,将组件添加到JPanel实例中,setContentPane()方法将设置为新的内容窗格。7.2.1顶层容器〔JFrame〕JFrame的常用方法设置框架的大小publicvoidsetSize(intwidth,intheight)设置框架是否可见publicvoidsetVisible(booleanb)设置布局方式publicvoidsetLayout(LayoutManagermgr)添加组件publicCompnentadd(Componentcomp)JFrame的setDefaultCloseOperation(intoperation)方法用来决定如何响应用户关闭窗体的操作,参数operation有以下可选值:JFrame.DO_NOTHING_ON_CLOSE:什么也不做。JFrame.HIDE_ON_CLOSE:隐藏窗体,这是JFrame的默认选项。JFrame.EXIT_ON_CLOSE:结束程序。实例:MainFrame.java根本的Swing应用程序importjavax.swing.*;

publicclassHelloSwing{publicstaticvoidmain(String[]args){JFrameframe=newJFrame("HelloSwing");JLabellabel=newJLabel("你好,Swing");frame.getContentPane().add(label);frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

frame.setSize(300,200);frame.setVisible(true);}}

导入必要的包,一般还需导入:

importjava.awt.*;importjava.awt.event.*;

设置一个顶级容器创立一个Swing组件将组件添加到容器内容窗格实现了在单击“关闭〞按钮时,可以关闭窗口。中间容器——面板类〔JPanel〕面板不是一个单独的窗口,它只是包含在窗口中的一个区域,必须被添加到其他容器内部。面板是可以将许多组件组合起来的一种容器。最简单的创立面板的方式就是通过面板的构造函数JPanel()来进行。面板也可以嵌套,由此可以设计出复杂的图形用户界面。JPanel类的常用构造方法如下:①publicJPanel()使用默认的FlowLayout方式创立具有双缓冲的JPanel对象。②publicJPanel(FlowLayoutManagerlayout)在构建对象时指定布局格式。中间容器——面板类〔JPanel〕JPanel的常用方法设置布局方式publicvoidsetLayout(LayoutManagermgr)设置面板的大小publicvoidsetSize(intwidth,intheight)设置背景颜色

publicvoidsetBackground(Colorcolor);添加组件PublicCompnentadd(Componentcomp)实例:MainFrame_Panel.java

滚动窗口,可以把一个组件放到一个滚动窗口中,然后通过滚动条来观察这各组件。与JPanel不同的是,它带有滚动条,且只能向滚动窗口添加一个组件。中间容器—滚动面板类〔JScrollPane〕中间容器—滚动面板类(JScrollPane)JScrollPane类常用的构造方法:①JScrollPane()创立一个空的JScrollPane②JScrollPane(Component

view)创立一个显示指定组件内容的JScrollPane,只要组件的内容超过视图大小就会显示水平和垂直滚动条。③JScrollPane(intvsbPolicy,inthsbPolicy)创立一个具有指定滚动条策略的空〔无视口的视图〕JScrollPane常用的成员方法:①publicvoidsetHorizontalScrollBarPolicy(intpolicy)

确定水平滚动条何时显示在滚动窗格上选项有:ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED设置水平滚动条只在需要时显示,默认策略ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER

水平滚动条永远不显示ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS水平滚动条一直显示②publicvoidsetVerticalScrollBarPolicy(intpolicy)确定垂直滚动条何时显示在滚动窗格上。合法值是:ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED设置垂直滚动条只在需要时显示,默认策略ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER垂直滚动条永远不显示ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS垂直滚动条一直显示③publicvoidsetViewportView(Componentview)创立一个视口并设置其视图。例子:ScrollPanelDemo.java布局管理器用户界面上的组件可以按不同方式排列。Java使用布局管理器来管理这些排列方式。每当需要重新调整屏幕大小或重新绘制屏幕上任一工程时,就要用到布局管理器。AWT提供一组用来进行布局管理的类,称为布局管理器或布局。所有布局都实现LayoutManager接口。布局管理器每个容器〔Container对象〕都有一个与它相关的缺省的布局管理器。-JFrame的缺省布局是BorderLayout在没有设置新的布局前,在容器中添加组件都按照该容器的缺省布局排列。可以通过setLayout()方法为容器设置新的布局。布局管理器为了将组件排列在容器中适宜的位置上,java.awt包中共定义了五种布局编辑类,分别是FlowLayout,BorderLayout,CardLayout,GridLayout和GridBagLayout,这五个类都是类的直接子类。javax.swing包中定义了4种布局编辑类,分别是BoxLayout、ScrollPaneLayout、ViewportLayout和OverlayLayout。1.FlowLayout布局管理器FlowLayout的布局策略是将遵循这种布局策略的容器中的组件按照参加的先后顺序从左向右排列,当一行排满之后就转到下一行继续从左至右排列.FlowLayout定义在java.awt包中.布局管理器FlowLayoutmylayout=newFlowLayout();FlowLayoutexLayout=newFlowLayout(FlowLayout.RIGHT);setLayout(exlayout);//为容器设置新布局

1.FlowLayout布局管理器容器流布局是面板的默认布局管理器左上角右下角依次排序的组件垂直或水平间距布局管理器方法说明FlowLayout()构造新的中间对齐的FlowLayout,将垂直和水平间距保留为5个像素FlowLayout(intalign)创建一个指定对齐方式的FlowLayout实例FlowLayout(intalign,inthgap,intvgap)创建一个既指定对齐方式,又指定组件间间隔的FlowLayout类的对象setAlignment(intalign)设置布局的对齐方式setHgap(inthgap)设置布局的水平间距setVgap(intvgap)设置布局的垂直间距

组件采用从左到右,从上到下逐行摆放。FlowLayoutOpenCloseokFlowLayoutOpenCloseok

setLayout(newFlowLayout(intalign,inthgap,intvgap))FlowLayout.LEFTFlowLayout.RIGHTFlowLayout.CENTER缺省是居中例子:FlowLayoutDemo.java2.BorderLayout布局管理器每个BorderLayout管理的容器被为东、西、南、北、中五个区域,这五个区域分别用字符串常量BorderLayout.EAST、BorderLayout.WEST、BorderLayout.SOUTH、BorderLayout.NORTH、BorderLayout.CENTER表示,每个区域,都可以参加一个组件,往容器内参加组件时都应该指明把它放在容器的哪个区域中布局管理器BorderLayout2-1上边的组件

左边的组件右边的组件下边的组件容器NorthSouthEastWestCENTER布局管理器方法说明BorderLayout()创建新的BorderLayout,组件之间没有间距BorderLayout(inthorz,intvert)可以设定组件间的水平和垂直距离setHgap(inthgap)将组件间的水平间距设置为指定的值setVgap(intvgap)将组件间的垂直间距设置为指定的值例子:BorderLayoutDemo.java3.GridLayout布局管理器是一种网格式的布局管理器,它将容器空间划分成假设干行乘假设干列的网格,而每个组件按添加的顺序从左到右、从上到下占据这些网格,每个组件占据一格布局管理器行列组件大小相同重新调整组件大小以适合各自的单元指定网格中的行数和列数,创立网格布局3GridLayout布局管理器GridLayout布局管理器方法描述GridLayout()创建网格布局,默认为每个组件占用一整列和一单行GridLayout(introws,intcols)用指定的行数和列数创建网格布局。GridLayout(introws,intcols,inthgap,intvgap)用指定的行数和列数、指定的水平和垂直间距创建网格布局setColumns(intcols)将相应布局中的列数设置为指定值setHgap(inthgap)将相应布局中的水平间距设置为指定值setVgap(intvgap)将相应布局中的垂直间距设置为指定值setRows(introws)将相应布局中的行数设置为指定值GridLayout布局管理器...Buttonbtn[];//声明按钮数组Stringstr[]={"1","2","3","4","5","6","7","8","9"};setLayout(newGridLayout(3,3));btn=newButton[str.length];//创立按钮数组for(inti=0;i<str.length;i++){btn[i]=newButton(str[i]);add(btn[i]);}例子:TestGridLayout.java4CardLayout布局管理器使用CardLayout的容器可以容纳多个组件,但是实际上同一时刻容器只能从这些组件中选出一个来显示,就像一叠“扑克牌〞每次只能显示最上面一张一样,这个被显示的组件将占据所有的容器空间,依次排序。卡片通常为一个Panel对象。每当需要许多面板切换,而每个面板需要显示为不同布局时,可以使用卡片布局。方法说明CardLayout()使用默认(间隔为0)方式创建一个CardLayout()类对象CardLayout(inthgap,intvgap)后者使用hgap指定的水平间隔和vgap指定的垂直间隔创建一个CardLayout()类对象first(Containercontainer)显示container中的第一个对象last(Containercontainer)显示container中的最后一个对象next(Containercontainer)显示下一个对象previous(Containercontainer)显示上一个对象publicclassCardLayoutDemoextendsJFrame{publicCardLayoutDemo(){JButtonbt1=newJButton("按钮A");JButtonbt2=newJButton("按钮B");JButtonbt3=newJButton("按钮C");CardLayoutcard=newCardLayout(20,20);Containercp=getContentPane();cp.setLayout(card);cp.add(bt1);cp.add(bt2);cp.add(bt3);card.next(cp);//显示按钮BsetSize(400,300);setVisible(true);}publicstaticvoidmain(String[]args){newCardLayoutDemo();}}实例:CardLayoutDemo.java4.BoxLayout布局管理器它将容器中的组件按水平方向排成一行或者垂直方向排成一列。当组件排成一行时,每个组件可以有不同的宽度,当排成一列时,每个组件可以有不同的高度。BoxLayout布局管理器构造方法是:BoxLayout(Containertarget,intaxis)其中,target是容器对象,表示要为哪个容器设置此布局管理器;axis指明target中组件的排列方式布局管理器BoxLayout类常用的成员方法成员方法说明setLayoutAlignmentX(Containercon)设置Container中对象X轴方向的对齐方式setLayoutAlignmentY(Containercon)设置Container中对象Y轴方向的对齐方式LayoutContainer(Containertarget)设置target窗口容器的布局方式为BoxLayout例子:BoxLayoutDemo.javajavax.swing包中定义了一个专门使用BoxLayout布局管理器的特殊容器Box类Box的构造函数为:Box(intaxis),axis表示水平排列的BoxLayout.X_AXIS或垂直排列的BoxLayout.Y_AXIS。可使用Box类提供的创立Box实例的静态方法创立:publicstaticBoxcreateHorizontalBox()publicstaticBoxcreateVerticalBox()布局管理器例子:BoxLayoutDemoBox.java使用BoxLayout时需要注意的事项(1)当组件按BoxLayout布局排列好后,不管窗口缩小或放大都不会变动。(2)当使用水平排列方式时,假设放进去的组件不等高,那么系统将会使所有的组件与最高组件等高。(3)当放在同一行的组件超出容器的宽度时,系统不会自动换行,需要用户自行处理。如何选择布局管理器要使组件尽量充满容器空间BorderLayout要使组件以自然大小紧凑的在一行中显示FlowLayout组件大小相同,并且成行或成列显示GridLayout7.3事件处理GUI程序是由事件(event)驱动的当用户与GUI交互可以产生事件(events)一些常见的交互方式移动鼠标、用鼠标点击按钮、在文本框中输入数据、关闭窗口等设计和实现图形用户界面的工作主要有两个:一是创立组成界面的各种成分和元素,构成完整的图形用户界面的物理外观;二是定义图形用户界面的事件和各界面元素对不同事件的响应,实现图形用户界面与用户的交互功能。7.3事件处理Java最新的事件处理方法是基于委托事件模型,整个“委托事件模型〞由产生事件的对象(事件源)、事件对象及监听者对象之间的关系所组成。事件源生成事件并将其发送至一个或多个监听器。监听器简单地等待,直到它收到一个事件。一旦事件被接受,监听器将处理这些事件,然后返回。

源对象监听器事件

传播事件的实例方法传递途径代理事件模型Swing中的GUI组件适配器对象7.3.1事件处理模型7.3.1事件处理模型主要涉及三种对象和一个接口事件源(Aneventsource)事件对象(Aneventobject)事件监听器(eventlistener(s))处理事件的接口(eventinterface)事件监听器A事件监听器B事件对象事件对象事件源(例如:按钮)事件源能够产生事件的对象都可以成为事件源,如文本框、按钮、下拉式列表等事件对象封装了包含所发生的各种事件的有效信息信息包括:事件源的引用、以及事件监听器在处理事件时所需要的其它各种信息事件信息被包含在类AWTEvent或其子类的实例对象中7.3.1事件处理模型事件监听器接受事件对象,并处理事件对象,事件源通过调用相应的方法将某个对象作为自己的监视器。例如,对于文本框,这个方法是:addActionListener(监视器);创立该监视器对象的类必须声明实现相应的接口处理事件的接口接口中声明的是事件对应的处理方法,当事件源发生事件时,监视器就自动调用执行被类实现的某个接口方法。7.3.1事件处理模型例题:TestEvent.java按钮单击事件例如publicclassMyEventTestextendsPanel{ButtonmyButton=newButton("蓝色");...//创立面板或其他GUI组件MyListenermyAction=newMyListener();MyButton.addActionListener(myAction);

privateclassMyListenerimplementsActionListener{publicMyListener(){...//初始化}publicvoidactionPerformed(ActionEventevent){...//需要为事件进行的操作}}}实现了ActionListener接口的监听器实现了actionPerformed方法,以便根据参数ActionEvent

对象的信息对事件做出响应为按钮事件注册监听器对于某种类型的事件XXXEvent,必须定义相应的事件监听器类,该类需要实现针对特定事件的特定接口XXXListener;例如:ActionEventActionListener事件源中,必须注册该类事件的监听器,使用addXXXListener(XXXListener)来注册监听器。

事件发生后,产生表示特定事件的事件对象,事件对象被传递给已经注册的事件监听器,调用监听器中的特定方法处理事件事件处理的一般方法:处理事件示意图不同事件源上发生的事件种类不同,不同的事件有不同的监听者处理。所以在包和包中还定义了很多其他事件类。每个事件类都有一个对应的接口,接口中声明了假设干个抽象的事件处理方法,事件的监听程序类需要实现相应的接口7.3.2事件及监听者7.3.2事件及监听者FocusEventAWTEventActionEventAdjustmentEventComponentEventTextEventItemEventContainerEventInputEventWindowEventPaintEventKeyEventMouseEventEventObject事件体系结构1.AWT中的常用事件类及其监听者

和AWT有关的所有事件类都由类派生,它也是EventObject类的子类。AWT事件共有10类,可以归为两大类:低级事件高级事件1.AWT中的常用事件类及其监听者低级事件是指基于组件和容器的事件,如:鼠标的进入,点击,拖放等。低级事件主要包括:ComponentEvent、ContainerEvent、WindowEvent、FocusEvent、KeyEvent、MouseEvent高级事件是基于语义的事件,它可以不和特定的动作相关联,而依赖于触发此事件的类,如在TextField中按Enter键会触发ActionEvent事件。高级事件主要包括:ActionEvent、AdjustmentEvent、ItemEvent、TextEventAWT事件类型2-1事件类说明事件源ActionEvent通常按下按钮,双击列表项或选中一个菜单项时,就会生成此事件。Button、List、MenuItem、TextFieldAdjustmentEvent操纵滚动条时会生成此事件。ScrollbarComponentEvent当一个组件移动、隐藏、调整大小或成为可见时会生成此事件。ComponentItemEvent单击复选框或列表项时,或者当一个选择框或一个可选菜单的项被选择或取消时生成此事件。Checkbox、CheckboxMenuItem、Choice、ListFocusEvent组件获得或失去键盘焦点时会生成此事件。ComponentAWT事件类型2-2事件类说明事件源KeyEvent接收到键盘输入时会生成此事件。ComponentMouseEvent拖动、移动、单击、按下或释放鼠标或在鼠标进入或退出一个组件时,会生成此事件。ComponentContainerEvent将组件添加至容器或从中删除时会生成此事件。ContainerTextEvent在文本区或文本域的文本改变时会生成此事件。TextField、TextAreaWindowEvent当一个窗口激活、关闭、失效、恢复、最小化、打开或退出时会生成此事件。

Window监听器接口监听器通过实现java.awt.event包中定义的一个或多个接口来创立。在发生事件时,事件源将调用监听器定义的相应方法。有兴趣接收事件的任何监听器类都必须实现监听器接口。监听器接口列表2-1事件监听器

方法

ActionListener

actionPerformed

AdjustmentListener

adjustmentValueChanged

ComponentListener

componentResizedcomponentMovedcomponentShowncomponentHidden

ContainerListener

componentAddedcomponentRemoved

FocusListener

focusLost、focusGained

ItemListener

itemStateChanged

监听器接口列表2-2事件监听器

方法

KeyListener

keyPressed、keyReleasedkeyTyped

MouseListener

mouseClicked、mouseEnteredmouseExited、mousePressedmouseReleased

MouseMotionListener

mouseDragged、mouseMoved

TextListener

textValueChanged

WindowListener

windowActivated、windowDeactivatedwindowClosed、windowClosingwindowIconified、windowDeiconifiedwindowOpened

2.Swing中的常用事件类及其监听者使用Swing组件时,对于比较低层的事件需要使用AWT包提供的处理方法对事件进行处理。在包中也定义了一些事件类表7.2列出了常用的Swing事件及其相应的监听器接口。事件类别描述信息接口名方法AncestorEvent报告给子组件AncestorListenerancestorAdded(AncestorEventevent)ancestorRemoved(AncestorEventevent)ancestorMoved(AncestorEventevent)CaretEvent文本插入符已发生更改CaretListenercaretUpdate(CaretEvente)ChangeEvent事件源的状态发生更改ChangeListenerstateChanged(ChangeEvente)DocumentEvent文档更改DocumentListenerinsertUpdate(DocumentEvent

e)removeUpdate(DocumentEvent

e)changedUpdate(DocumentEvente)UndoableEditEvent撤消操作UndoableEditListenerundoableEditHappened(UndoableEditEvente)ListSelectionEvent选择值发生更改ListSelectionListenervalueChanged(ListSelectionEvente)ListDataEvent列表内容更改ListDataListenerintervalAdded(ListDataEvente)contentsChanged(ListDataEvente)intervalRemoved(ListDataEvente)TableModelEvent表模型发生更改TableModelListenertableChanged(TableModelEvente)MenuEvent菜单事件MenuListenermenuSelected(MenuEvente)menuDeselected(MenuEvente)menuCanceled(MenuEvente)TreeExpansionEvent树扩展或折叠某一节点TreeExpansionListenertreeExpanded(TreeExpansionEventevent)treeCollapsed(TreeExpansionEventevent)TreeModelEvent树模型更改TreeModelListenertreeNodesChanged(TreeModelEvente)treeNodesInserted(TreeModelEvente)treeNodesRemoved(TreeModelEvente)treeStructureChanged(TreeModelEvente)TreeSelectionEvent树模型选择发生更改TreeSelectionListenervalueChanged(TreeSelectionEvente)窗口事件当一个窗口被激活、禁止、关闭、正在关闭、最小化、恢复、翻开时将生成窗口事件WindowEvent。WindowEvent类的主要方法有getSource()。在EventObject类中定义了getSource()方法,该方法是从事件对象中获取触发事件的事件源,其返回值的类型为Object,需要自己编写代码进行对象的强制类型转化。事件WindowEvent

对应的监听器接口是WindowListener

需要实现的方法如下:windowActivated、windowClosedwindowClosing、windowDeactivatedwindowDeiconified、windowIconifiedwindowOpened例子:WindowEventDemo.java事件适配器为了使事件处理变得简单,Java为具有多个方法的监听器接口提供适配器类。适配器类实现并提供了一个事件监听器接口中的所有的方法,但这些方法都是空方法。例如WindowAdapter类实现了WindowListener接口。因此,可以使用WindowAdapte的子类创立的对象做监视器,在子类中重写所需要的接口方法即可窗口事件适配器例如classMyFrameextendsFrame{

booleanw;

publicMyFrame(){

w=false;

setTitle("测试适配器类");

setSize(300,200);

addWindowListener(newMyWindowAdapter());}

privateclassMyWindowAdapterextendsWindowAdapter{

publicvoidwindowClosing(WindowEventwevent){if(w)dispose();}}}实现了windowClosing方法,以响应窗口关闭时的事件

importjava.awt.*;

importjava.awt.event.*;

publicclassMyAdapterDemo{publicstaticvoidmain(String[]args){MyFramefrm=newMyFrame();frm.setVisible(true);}}事件接口与适配器类ListenerInterfaceAdapterClassActionListener

无AdjustmentListener

无ComponentListenerComponentAdapter

ContainerListener

ContainerAdapterFocusListener

FocusAdapter

ItemListener

无事件接口与适配器类ListenerInterfaceAdapterClassKeyListener

KeyAdapterMouseListener

MouseAdapter

MouseMotionListenerMouseMotionAdapterTextListener

无WindowListener

WindowAdapter当按下、释放或敲击键盘上一个键时,就发生了键盘事件keyEvent。事件源使用addKeyListener方法注册监视器。生成keyEvent时将调用KeyListener接口对象。键盘事件在KeyListener这个接口中有如下三个事件:publicvoidkeyPressed(KeyEvente);“按

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论