3ATW Swing 事件处理

更新时间:2024-01-30 14:44:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

AWT(Abstract Windowing Toolkit)是用来创建Java 图形用户界面的基本工具. Java Swing 是JFC(Java Foundation Classes)的一部分,它可以弥补AWT 的一些不足.

Component(组件):按钮、标签、菜单等组件的抽象基本类。

Container(容器):扩展组件的抽象基本类,例如Panel、Applet、Window、Dialog 和Frame 等是由Container 演变的类,容器中可以包括多个组件。 LayoutManager(布局管理器):定义容器中组件的摆放位置和大小接口。Java 中定 义了几种默认的布局管理器。

Graphics(图形):组件内与图形处理相关的类,每个组件都包含一个图形类的对象。 1 组件

组件是 Java 图形用户界面程序设计的最基本组成部分,它是一个以图形方式显示的,并且可以与用户进行交互的界面组成元素,例如按钮、标签、单选框、多选框等。单独的一个组件不能显示出来,必须将组件添加到容器当中才能显示。

component方法

Component getComponentAt(int x, int y):返回包含该位置(x,y)的组件或子组件。 ", Font getFont():获取组件的字体。

", Color getForeground():获取组件的前景色。 ", String getName():获取组件的名称。

", Dimension getSize():以Dimension 对象的形式返回组件的大小。

", void paint(Graphics g):绘制该组件。 ", void repaint():重绘组件。

", void update(Graphics g):更新该组件。

", void setVisible(boolean b):根据参数的值显示或隐藏此组件。

", void setSize(int width, int height):调整组件的大小,使其宽度和高度分别为width 和height。

", void setName(String name):将组件的名称设置为指定的字符串。 ", void setForeground(Color c):设置组件的前景色。

AWT 的组件库

Canvas Component 绘制图形的画布

画布(Canvas)是处于屏幕上的一个空白矩形区域,在该区域可以绘图,也可以获得用户激发的事件。画布组件可以监听鼠标事件和键盘事件。 public void paint(Graphics g)

由于画布的paint()方法默认操作是清除画布,所以重写此方法的应用程序不需要 调用super.paint(g)。

public void update(Graphics g)",

调用update()的目的是为了调用repaint()方法。执行过程是通过背景色填充画布的背景,然后再调用paint()方法重新绘制图像。update()方法不同于paint 方法,必须在重写的update()方法中第一行调用super.update(g),或者重新实现背景色填充和重绘两个功

能。

// 文件:程序11.10 CanvasDemo.java CanvasDemo 演示 //导入需要使用的包和类 import java.awt.*;

import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class CanvasDemo extends Panel { public static void main(String args[ ]) {

new CanvasDemo(); //创建CanvasDemo 实例 }

public CanvasDemo() {

f = new Frame(); //初始化窗口对象f mc = new MyCanvas(); //初始化画布对象 mc.repaint(0,0,100,100); //画布重绘

add(\添加画布到窗口Center 位置 f.add(mc); //在窗口f 中添加画布对象 f.setSize(300, 200); //设置窗口的大小 f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent evt) {

f.setVisible(false); //设置窗口f 不可见 f.dispose(); //释放窗口及其子组件的屏幕资源 System.exit(0); //退出程序 } });

f.setVisible(true); //显示窗口f }

private MyCanvas mc; private Frame f;

class MyCanvas extends Canvas { //重载paint 方法

public void paint(Graphics g) { g.setColor(Color.red); //设置绘图颜色 g.drawRect(100, 40, 100, 100); //绘制矩形 g.drawString(\绘制字符串 } } }

Button Component 触发行为的文本按钮 Button b = new Button(\按钮名称\

当单击按钮后,会产生ActionEvent 事件,如果应用程序需要执行基于按下按钮并释放的某个动作,则应该实现ActionListener 接口监听,目的是为了通过调用按钮的addActionListener 方法来接受此按钮的单击事件。

Checkbox Component 可检验的布尔组件

复选框(Checkbox)是一个可处于“on”或者“off”状态的组件,“on”和“off”状态的转变需要单击复选框,复选框旁边显示文本信息。当单击复选框时,产生ItemEvent 事件,复选框可以使用ItemListener 来监听ItemEvent事件,通过复选框的方法getStateChange()可以获得当前状态,方法getItem()获得复选框的字符串对象。 add(new Checkbox(\添加复选框按钮,该项为默认选项 add(new Checkbox(\添加复选框按钮,显示文本two add(new Checkbox(\添加复选框按钮,显示文本three

作为可选择的复选框,如果使用CheckboxGroup 类对象将复选框组合到一起作为单个对象控制之后,这一组复选框中的按钮最多只能有一个处于“on”状态。单击并打开一组的一个复选框会强制其他原来处于打开状态的复选框处于“off”状态。 CheckboxGroup cbg = new CheckboxGroup();//创建CheckboxGroup 对象cbg add(new Checkbox(\添加复选框按钮为一组按钮,默认打开 add(new Checkbox(\添加复选框按钮为一组按钮,默认关闭 add(new Checkbox(\添加复选框按钮为一组按钮,默认关闭

Choice Component 文本软件的弹出菜单

Choice colorChooser=new Choice();//创建,并初始化Choice 对象colorChooser colorChooser.add(\添加一个菜单项Green colorChooser.add(\添加一个菜单项Red colorChooser.add(\添加一个菜单项Blue

下拉式菜单(Choice)表示一个弹出式选择菜单组件,并且只能选择其中的一项。下拉式菜单的主要特点是能够存放多个选项并且可以节约空间,它与复选框一样使用ItemListener接口监听ItemEvent 事件。

List Component 文本输入的可滚动例表

列表框组件提供一个可滚动的文本列表,并且通过参数设置列表框是单选项或多选项。如果列表框中选项比较多,并且超过了列表框显示的范围时,它的右边会产生一个滚动条,用来浏览显示的选项。

List lst=new List(4,false); //显示4 行,不允许多选 lst.add(\语文\为类别添加选项”语文” lst.add(\数学\为类别添加选项”数学” lst.add(\英语\为类别添加选项”英语” lst.add(\物理\为类别添加选项”物理” lst.add(\化学\为类别添加选项”化学” lst.add(\历史\为类别添加选项”历史” lst.add(\地理\为类别添加选项”地理”

Label Component 显示字符串的组件 Label label1 = new Label(\文本内容\

标签(Label)是一个可在容器中放置静态文本的组件,一个标签只显示一行文本,它能通过应用程序更改,但不可直接修改。

Scrollbar Component 滚动项目的adjustable 组件 Scrollpane Container 可滚动容器

TextField TextComponent 输入文本的单行组件

单行文本输入区是可编辑的单行文本组件,一般用来输入内容比较少的文本信息, ", tf1 = new TextField():空单行文本输入区。

", tf2 = new TextField(10):指定单行文本输入区长度为10 的空的文本域。 ", tf3 = new TextField(\好\:带有初始文本内容的单行文本输入区。

", tf4 = new TextField(\好\带有初始文本内容并指定长度20 的单行文本输入区。 每当用户在单行文本输入区中键值时,会产生一个或多个键事件,包括keyPressed、 keyReleased 或keyTyped。键事件被传递给KeyListener 或KeyAdapter 对象,并且这些对象可以通过addKeyListener 方法注册到组件。当在单行文本输入文本结束,按下回车键将产生ActionEvent 事件,通过ActionListener中的actionPerformed()方法对事件处理。调用setEditable(boolean)方法,单行文本输入区被设置为只读。

Textarea TextComponent 多行可滚动的文本框

文本输入区可以显示多行文本区域,与单行文本输入区相似,文本输入区也有4 种构造方法创建文本输入区对象,但是如果要指定文本区域大小,必须指定行和列。 ", ta1 = new TextArea():一个空的文本输入区。

", ta2 = new TextArea (5,10):指定文本输入区行为5,列为10 的空的文本域。 ", ta3 = new TextArea (\好\:带有初始文本内容的文本输入区。

", ta4 = new TextArea(\好!\:带有初始内容的行为5,列为30 的文本输入区。 ", ta2.setEditable(false):可以用成员方法setEditable()决定用户是否可以对文本区的内 容进行编辑。文本输入区的成员方法getText()可获得文本区的内容。文本输入区的文本超过显示区域时,可以显示水平或垂直的滚动条。

TextComponent Component TestArea 和TextField 的基本功能

滚动条(Scrollbar)

滚动条(Scrollbar)在应用程序中可以调整线性值。滚动条可以设置可以选择的取值范围。创建滚动条时,必须指定的属性包括方向(垂直还是水平)、初始值(滚动块位置的值)、滑块的大小、最小值和最大值。

public Scrollbar(int orientation, int initialValue, int sizeOfSlider, int minValue, int maxValue); 下面是一个例子。

Scrollbar redSlider; //声明Scrollbar 对象redSlider

redSlider = new Scrollbar(Scrollbar.VERTICAL,0,1,0,255); //初始化redSlider 对象

add(redSlider); //将redSlider 添加于容器中

当改变滚动条的值时,滚动条接受事件AdjustmentEvent。如果需要监听AdjustmentEvent事件, 必须实现AdjustmentListener 接口, 并且需要调用addAdjustmentListener() 和removeAdjustmentListener()方法添加或删除侦听器。

Filedialog Dialog 选择文件的相关平台对话框

对话框是 Window 类的子类,它是一个带有标题和边界的顶层窗口。对话框最主要的特点是它依赖于其他窗口,它分为无模式和有模式两种。两种模式的区别在于有模式对话框会阻止将内容输入到应用程序中的其他一些顶层窗口中。

文件对话框显示一个对话框窗口,用户可以打开、选择并存储文件。它是一个模式对话框,当文件对话框显示后,其他应用程序被阻塞,直到用户选择文件或者取消操作。

FileDialog d=new FileDialog(ParentFr,\创建,初始化对话框对象d d.setVisible(true); //显示对话框d

String filename=d.getFile(); //获取选取的文件url 菜单

菜单是一个比较复杂的内容,通常有3 个相关的类:Menu、MenuBar 和MenuItem。通常没有必要在MenuBar 和Menu 中注册监听器,只需要为MenuItem 添加监听器 ActionListener 完成事件处理。

1.菜单栏

菜单无法直接添加在窗口中,也无法用布局管理器控制。菜单必须先添加到菜单栏中。为窗口添加菜单时,必须先将菜单栏添加到窗口中,作为菜单树的基础。 Frame fr = new Frame(\创建,并初始化窗口fr MenuBar mb = new MenuBar(); //创建,并初始化菜单栏 fr.setMenuBar(mb); //将菜单栏对象设置为窗口的菜单栏 fr.setSize(150,100); //设置窗口大小 fr.setVisible(true); //显示窗口 2.菜单

菜单可以被添加到菜单栏或其他菜单对象中。 Frame fr = new Frame(\创建,并初始化窗口fr MenuBar mb = new MenuBar(); //创建,并初始化菜单栏 fr.setMenuBar(mb); //设置窗口的菜单栏

Menu m1 = new Menu(\创建,并初始化菜单m1 Menu m2 = new Menu(\创建,并初始化菜单m2 Menu m3 = new Menu(\创建,并初始化菜单m3 mb.add(m1); //将菜单添加于菜单栏中m1 mb.add(m2); //将菜单添加于菜单栏中m2 mb.setHelpMenu(m3); //设置m2 为帮助菜单 fr.setSize(200,200); //设置窗口大小 fr.setVisible(true); //显示窗口 3.菜单项

菜单项是菜单树的“节点”,它一般被添加到菜单对象中。菜单中的所有项必须属于类MenuItem。

Menu m1 = new Menu(\创建,并初始化菜单

MenuItem mi1 = new MenuItem(\创建,并初始化菜单项mi1 MenuItem mi2 = new MenuItem(\创建,并初始化菜单项mi2 MenuItem mi3 = new MenuItem(\创建,并初始化菜单项mi3 m1.add(mi1); //将mi1 菜单项添加于菜单m1 m1.add(mi2); //将mi2 菜单项添加于菜单m1 m1.addSeparator(); //为菜单m1 中添加分割线 m1.add(mi3); //将mi3 菜单项添加于菜单m1

Dialog Window 可模式化窗口

Window Container 没有标题的无边界窗口 2 容器

Container 也是一个派生于容器Component 的抽象类,因此它拥有组件的所有属性和方法。容器最主要的功能是存放其他的组件和容器。一个容器可以存放多个组件,它将相关的组件容纳到一个容器中形成一个整体。使用容器存放组件的技术可以简 化组件显示安排。所有的容器都可以通过add()方法添加组件。 容器方法

void add(Component com):将指定组件追加到此容器的尾部。 ", void add(Component, int index):将指定组件添加到此容器的给定位置上。 ", void add(Component component, Object constraints)将指定组件添加到此容器尾部 ", void add(String name, Component component):将指定组件添加到此容器中。 ", void add(Component component, Object constraints, int index):使用指定约束,将指定组件添加到此容器指定索引所在的位置上。

", void setLayout() and getLayout():设置此容器的布局管理器。 ", void remove(Component comp):从此容器中移除指定组件。 ", void remove(int index):从此容器中移除index 指定的组件。 ", void removeAll():从此容器中移除所有组件。

窗口(Frame)

窗口是Window 的子类,它是顶级窗口容器,可以添加组件、设置布局管理器、设置背景色等。 java.lang.Object

+--java.awt.Component +--java.awt.Container +--java.awt.Window +--java.awt.Frame

面板(Panel)

面板是容器的一个子类,它提供了建立应用程序的容器。可以在一个面板上进 行图形处理,并把这个容器添加到其他容器中(例如Frame、Applet)。 java.lang.Object

+--java.awt.Component +--java.awt.Container +--java.awt.Panel 3 布局管理器

1 BorderLayout(边界布局管理器)

边界布局管理器(BorderLayout)是Window、Frame 和Dialog的缺省布局管理器。边界布局管理器将容器分成5 个区:北(N)、南(S)、西(W)、东(E)和中(C),每个区域只能放置一个组件。在使用边界布局管理器时,如果容器大小发生变化,组件大小会变化,相对位置不变。另外,容器5 个区域并没有要求必须添加组件,如果中间区域没有组件,则中间区域将会保留空白;如果四周的区域没有组件,中间区域将会补充。

2 CardLayout(卡片布局管理器)

该布局管理器将加入到容器中的组件视为卡片栈,把每个组件放置在一个单独的卡片上,而每次只能看见一张卡片,第一次显示的是第一次添加的组件。 public CardLayout():创建一个新卡片的布局,水平间距和垂直间距都是0。 ", public CardLayout(int hgap,int vgap):创建一个具有指定水平间距和垂直间距的新卡 片布局。

", void first(Container parent):翻转到容器的第一张卡片。

", void next(Container parent):翻转到指定容器的下一张卡片。 ", void last(Container parent):翻转到容器的最后一张卡片。 ", void previous(Container parent):翻转到指定容器的前一张卡片。 3 FlowLayout(顺序布局管理器)

顺序布局管理器(FlowLayout)是Panel 和Applet 缺省的布局管理器。添加组件的放置规律是从上到下、从左到右,也就是说,添加组件时,先放置在第一行的左边,依次放满第一行,然后在开始放置第二行,依此类推。

容器中组件的大小和位置都委托给布局管理器管理,程序员无法设置这些属性。如 果已经设置布局管理器在容器中,使用Java 语言提供的setLocation()、setSize()、 setBounds()等方法不会起到任何作用。

", 如果用户必须设置组件的大小和位置,必须设置容器布局管理器为空,方法为: setLayout(null)。

顺序布局管理器构造方法

",FlowLayout(FlowLayout.RIGHT,20,40):第一个参数是组件的对齐模式,包括左右中对齐;第二个参数是组件行间隔;第三个参数是组件列间隔,单位是像素。 ",FlowLayout(FlowLayout.LEFT):居左对齐,行间隔和列间隔默认为5 个像素。 ",FlowLayout():默认是居中对齐,并且行、列间隔默认为5 像素。

4 GridLayout(网格布局管理器)

该布局管理器将容器分成相同尺寸的网格,将组件从左到右、从上到下放置在网

格中。

", public GridLayout():默认网格布局管理器只占据一行一列。

", public GridLayout(int row,int col):创建指定行数和列数的网格布局管理器,组件分 配大小是平均的。但是行和列不能同时为零,其中一个为零时,只是表示所有的组 件都放置于一行或者一列中。

", public GridLayout(int row,int col,int horz,int vert):创建指定行数和列数的网格布局管理器,组件分配大小是平均的。

5 GridBagLayout(网络包布局管理器)

网格包布局管理器是一个复杂的布局管理器,容器中的组件大小不要求一致。涉及到一个辅助类GridBagContraints,该类包含GridBagLayout 类用来保存组件布局大小和位置的全部信息,其使用步骤如下。

(1)创建一个网格包布局管理器的对象,并将其设置为当前容器的布局管理器。 (2)创建一个GridBagContraints 对象。

(3)通过GridBagContraints 为组件设置布局信息。 (4)将组件添加到容器中。

GridBagContraints 类的成员变量包括以下几种。

", gridx、gridy:指定包含组件的开始边、顶部的单元格,它们的默认值为RELATIVE, 该值指将组件添加到刚刚添加组件的右边和下边。gridx、gridy 应为非负值。 ", gridwidth、gridheight:指定组件的单元格数,分别是行和列。它们的值应为非负,

默认值为1。

", weightx、weighty:指定分配额外的水平和垂直空间,它们的默认值为0 并且为非负。 ", ipadx、ipady:指定组件的内部填充宽度,即为组件的最小宽度、最小高度添加多大的空间,默认值为0。

", fill:指定单元大于组件的情况下,组件如何填充此单元,缺省为组件大小不变。以下为静态数据成员列表,它们是fill 变量的值。 GridBagConstraints.NONE //组件大小不改变 GridBagConstraints.HORIZONTAL //水平填充 GridBagConstraints.VERTICAL //垂直填充 GridBagConstraints.BOTH //填充全部区域

如果指定单元大于组件的情况下,如果不填充可以通过anchor 指定组件在单元的位置, 缺省值为中部。还可以是下面的静态成员,它们都是anchor 的值。 GridBagConstraints.CENTER //中间位置 GridBagConstraints.NORTH //上北位置 GridBagConstraints.EAST //右东位置 GridBagConstraints.WEST //左西位置 GridBagConstraints.SOUTH //下南位置 GridBagConstraints.NORTHEAST //东北位置 GridBagConstraints.SOUTHEAST //东南位置 GridBagConstraints.NORTHWEST //西北位置 GridBagConstraints.SOUTHWEST //西南位置

容器的嵌套

在复杂的图形用户界面设计过程中,将所有的组件一起添加到一个容器时,图形界面的管理是具有一定的难度。容器中可以添加容器,这就是容器的嵌套。容器的嵌套使复杂的图形用户界面的设计更加方便有效。下面是一个容器嵌套的例子。 // 文件:程序11.8 NestedContainer.java 嵌套容器演示 //导入需要使用的包和类 import java.awt.*;

import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; public class NestedContainer{ public static void main(String args[ ]){

new NestedContainer().show(); //创建NestedContainer 实例,并调用show 方法 }

public void show(){

f = new Frame(\容器嵌套使用\初始化窗口对象f bo= new Button(\打开\初始化按钮对象bo bc= new Button(\关闭\初始化按钮对象bc pn = new Panel(); //初始化面板对象pn

pn.setBackground(Color.green); //设置面板背景色

pn.add(bo); //面板pn 中添加按钮bo pn.add(bc); //面板pn 中添加按钮bc f.add(pn,\在窗口中添加面板pn bw=new Button(\左西\初始化按钮对象bw f.add(bw,\将按钮对象bw 添加到West 位置 p=new Panel(); //初始化面板对象p

p.setBackground(Color.red); //设置面板对象的背景色 f.add(p,\在窗口f 中添加p 与Center 位置 f.setSize(400, 300); //设置f 窗口的大小 f.addWindowListener(new WindowAdapter(){ public void windowClosing(WindowEvent evt) { f.setVisible(false); //设置窗口f 不可见 f.dispose(); //释放窗口及其子组件的屏幕资源 System.exit(0); //退出程序 } });

f.setVisible(true); //显示窗口f }

private Frame f; //声明窗口域f

private Panel pn,p; //声明面板Panel 域pn,p private Button bw; //声明面板Button 域bw

private Button bo,bc; //声明面板Button 域bo,bc } 4 绘图 文字输出

如果使用者自己不设置,将使用默认字体、大小和颜色。若要改变默认属性,必须使用相关的方法改变Graphics 对象的属性。

public void setBackground(Color c) //设置组件的背景色。背景色对每一个组件的影响不相同,受背景色的影响而导致组件在不同的操作系统表现可能不同。

public abstract void setColor(Color c)//该方法将Graphics 的绘图颜色设置为指定颜色。设置之后,如果没有修改,Graphics 的绘图的颜色就会一直保持。

选择颜色有两种方法,一种是直接用RGB 颜色值创建Color 对象 Color color = new Color(R,G,B);另一种是用颜色常量,例如Color.red, Color.green 等。

字体设置需要使用java.awt.Font 类创建一个对象,Font(字体名或逻辑字体名,字型,字号)字体名是指与运行程序的操作系统相适应的字体外观名称或者字体系列名称。字型为Font 类声明了样式静态常量有4 种: Font.PLAIN 、Font.BOLD 、Font.ITALIC 、 Font.BOLD|ITALIC。

图形绘制

Graphics 常用的绘图方法有以下几种。

", abstract void drawLine(int x1, int y1, int x2, int y2):用图形上下文的当前颜色绘制在 点(x1, y1)和(x2, y2)之间画一条线。

", abstract void drawRect(int x, int y, int width, int height):绘制指定矩形左上坐标为 (x,y),并指定长宽的边框。

", abstract void drawRoundRect(int x, int y, int width, int height, int arcWidth, int arcHeight):用图形上下文的当前颜色绘制圆角矩形的边框。

", abstract void fill3DRect(int x, int y, int width, int height, boolean raised):用图形上下文 的当前颜色填充的3D 矩形。

", abstract void fillOval(int x, int y, int width, int height):用图形上下文的当前颜色填充 外接指定矩形框的椭圆。

", abstract void fillArc(int x, int y, int width, int height, int startAngle, int arcAngle):用图 形上下文的当前颜色填充覆盖指定矩形的圆弧或椭圆弧。

", abstract void drawPolyline(int[] xPoints, int[] yPoints, int nPoints):用图形上下文的当 前颜色绘制由x 和y 坐标数组定义的一系列连接线。

", abstract void drawPolygon(int[] xPoints, int[] yPoints, int nPoints):用图形上下文的当 前颜色绘制一个由x 和y 坐标数组定义的闭合多边形。

", void drawPolygon(Polygon p):用图形上下文的当前颜色绘制由指定的Polygon 对象定义的多边形边框。

1 Swing 程序结构简介

Swing 的程序设计一般可按照以下流程进行。 (1)通过import 引入swing 包。 (2)设置GUI 的“外观界面风格”。 (3)创建顶层容器。 (4)创建按钮和标签等组件。 (5)将组件添加到顶层容器。 (6)在组件周围添加边界。 (7)进行事件处理。

2 组件的分类

Jcomponent 是一个抽象类,主要用于定义所有子类的通用方法。Jcomponent 类派生于Container 类。并不是Swing 的所有组件都继承了JComponent 类,凡是派生于Container 类的组件都可以作为容器使用。Swing 组件从功能上可分为顶层容器、 中间容器、特殊容器、基本控件、信息显示组件和编辑信息组件。 ", 顶层容器:Jframe、Japplet、Jdialog、JWindow。 ", 中间容器:Jpanel、JscrollPane、JsplitPane、JToolBar。

", 特殊容器:GUI 中特殊作用的中间层,例如JinternalFrame、JlayeredPane、 JRootPane。

", 基本控件:人机交互的基本组件,例如Jbutton、JcomboBox、Jlist、Jmenu、Jslider、

JtextField。

", 信息显示组件:组件仅仅为显示信息,但不能编辑,例如Jlabel、JprogressBar、 ToolTip。

", 编辑信息组件:向用户显示可被编辑信息的组件,例如JcolorChooser、JfileChoose、 JfileChooser、Jtable、JtextArea。

另外,JComponent 类的一些特殊功能包括边框设置、双缓冲区、提示信息、键盘导航和支持布局。

", 边框设置:使用setBorder()方法设置组件外围边框,如果不设置边框就会为组件 的外围留出空白。

", 双缓冲区:为了改善组件的显示效果,采用双缓冲技术。JComponent 组件默认 是双缓冲的,不必要自己写代码,可以通过setDoubleBuffered(false)关 闭双缓冲区。

", 提示信息:setTooltipText()方法可为组件设置提示信息,为用户提供帮助。 ", 键盘导航:registerKeyboardAction()方法可以实现键盘代替鼠标操作。

", 支持布局:用户可以设置组件最大、最小和设置对齐参数值等方法,指定布局管 理器的约束条件。

3 使用Swing 的基本规则

与 AWT 组件不同,Swing 不能直接在顶层容器中添加组件。Swing 组件必须添加到与顶层容器相关的内容面板上,内容面板是一个普通的轻量级组件,还要避免使

用非Swing 轻量级组件。在顶层容器JFrame 对象中添加组件有以下两种方式。 (1)用getContentPane()方法获得容器的内容面板,直接添加组件,格式如下。 Container c = frame.getContentPane(); //获取窗口内容面板 JPanel pane = new JPanel(); //创建面板 c.add(pane); //在容器中添加面板

(2)建立一个中间容器对象(Jpanel 或JdesktopPane),将组件添加到中间容器对象内, 然后通过setContentPane()方法将该容器设置为顶层容器frame 的内容面板。 JPanel pane = new JPanel(); //创建面板对象 pane.add(new JButton(\给面板添加按钮

frame. setContentPane(pane); //将面板pane 设置为窗口内容面板

4 轻量容器

JFrame 的内部轻量容器构成结构为:最底层是根面板JRootPane,上一层是玻璃面板glassPane(一个JPanel 对象)和分层面板layeredPane(一个JLayeredPane 对象),而分层面板layeredPane 又由内容面板contentPane(一个JPanel)和菜单条menuBar(JMenuBar)构成。用户添加组件都是在内容面板上,背景图片只能添加到分层面板。玻璃面板是完全透明的,缺省值为不可见,覆盖了内容面板是为了接受鼠标事件和组件绘图功能提供方便。 1根面板

根面板(JRootPane)是由内容面板、菜单条和玻璃面板组成,它可以获得和设置相关面板。

java.lang.Object +--java.awt.Component +--java.awt.Container +--javax.swing.JComponent +--javax.swing.JRootPane 根面板提供的方法有以下几种。

", Container getContentPane():获得内容面板。 ", void setContentPane(Container):设置内容面板。 ", JMenuBar getMenuBar():获得活动菜单条。 ", void setMenuBar(JMenuBar):设置菜单条。 ", JLayeredPane getLayeredPane():获得分层面板。 ", void setLayeredPane(JLayeredPane):设置分层面板。 ", Component getGlassPane():获得玻璃面板。 ", void setGlassPane(Component):设置玻璃面板。 2 面板

面板(JPanel)是轻量容器,其用法与Panel 基本相同,用于容纳其他组件。JscrollPane、JsplitPane 和JInternalFrame 都属于常用的中间容器。面板的默认布局管理器是顺序布局管理器(FlowLayout)。 java.lang.Object +--java.awt.Component +--java.awt.Container

+--javax.swing.JComponent +--javax.swing.JPanel 3 分层面板

Swing 有两种类型的分层面板: JLayeredPane 和JDesktopPane 。JDesktopPane 是 JLayeredPane 的派生类,用于创建多文档和虚拟桌面程序的容器。用户可以创建内部框架(JInternalFrame)对象并将其添加到JDesktopPane。它们的继承关系如下。 java.lang.Object +--java.awt.Component +--java.awt.Container +--javax.swing.JComponent +--javax.swing.JLayeredPane +--javax.swing.JDesktopPane 4 滚动窗口

滚动窗口(JScrollPane)是管理视口(JViewport)、可选水平或垂直滚动条的轻量级容器。滚动窗口基本上是由JScrollBar、一个JViewport 之间的连接组成。Jviewport 是用于查看底层组件的一个工具,滚动条沿着组件的水平或者垂直方法移动视口,同时显示组件上的内容。JScrollPane 继承关系如下。 java.lang.Object +--java.awt.Component +--java.awt.Container +--javax.swing.JComponent

+--javax.swing.JScrollPane 5 分隔板

分隔板(JSplitPane)用于提供可拆分的窗口,但只能分隔成两个容器。它可支持水平和垂直两种拆分类型,还可以带滚动条。分隔板的继承关系如下。 java.lang.Object +--java.awt.Component +--java.awt.Container +--javax.swing.JComponent +--javax.swing.JSplitPane 常用的方法有以下几种。

", void addImpl(Component comp,Object constraints,int index):将组件添加到次分隔窗 口。

", void setTopComponent(Component comp):将组件设置到分隔条上面或者左边。 ", void setDividerLocation(double proportionalLocation):设置分隔条的位置。 ", void setDividerSize(int newSize):设置分隔条的大小。 6 选项板

选项板(JTabbedPane)提供允许用户通过单击具有标题和图标的选项卡,在组件之间切换的组件。通过addTab 和insertTab 方法添加选项卡、组件到TabbedPane 对象中。选项卡可以通过对应位置的索引表示,第一个索引值为0。 java.lang.Object +--java.awt.Component

+--java.awt.Container +--javax.swing.JComponent +--javax.swing.JTabbedPane 常用的方法有以下几种。

", add(String title,Component component):添加一个带标题的组件。

", addChangeListener(ChangeListener l):将一个ChangeListener 注册到选项卡窗口中。

", addTab(String title, Icon icon, Component component, String tip):添加指定标题、图 标的组件,任意一个参数都可以为null。 ", insertTab(String title, Icon icon, Component component, String tip, int index):在索引 index 插入一个component,该组件指定标题、图标和提示。 7 工具栏

工具栏(JToolBar)是显示常用工具组件的容器,可以将工具栏拖动出来成为一个独立的工具条。工具栏的继承关系如下。 java.lang.Object +--java.awt.Component +--java.awt.Container +--javax.swing.JComponent +--javax.swing.JToolBar 常用的方法有以下几种。

", JToolBar(String name):构造方法。

", addImpl(Component comp, Object constraints, int index):在工具栏中添加新的

JButton。 ", getComponentIndex(Component c):返回组件的序号。 ", getComponentAtIndex(int i):返回序号为i 的组件。

5 Swing 组件

Swing 的组件与AWT 组件相似,但又为每一个组件增添了新的方法,并提供了更多的高级组件。 1 按钮

Swing 中,所有类型的按钮都是javax.swing.AbstractButton 类的子类。用户使用Swing按钮可以显示图像,将整个按钮设置为窗口缺省图标,并且可将多个图像指定给一个按钮,来处理鼠标在按钮上的事件。JButton 类的继承关系如下。 java.lang.Object +--java.awt.Component +--java.awt.Container +--javax.swing.JComponent +--javax.swing.AbstractButton +--javax.swing.JButton

常用的构造方法有以下几种。

", JButton(Icon icon):按钮上显示图标。 ", JButton(String text):按钮上显示字符。

", JButton(String text, Icon icon):按钮上既显示图标又显示字符。

2 复选框

复选框(JcheckBox)可以满足在多个选项中选择一个或者多个选项,它比AWT 的复选框具有更多的优点,例如可以显示图片。该类是javax.swing.JToggleButton 的子类,其继承关系如下。 java.lang.Object +--java.awt.Component +--java.awt.Container +--javax.swing.JComponent +--javax.swing.AbstractButton +--javax.swing.JToggleButton +--javax.swing.JcheckBox 复选框的构造方法有以下几种。

", JCheckBox():创建一个无文本、无图标、未被选定的复选框。 ", JCheckBox(Action a):创建一个复选框,属性由参数Action 提供。 ", JCheckBox(Icon icon):创建一个有图标、但未被选定的复选框。

", JCheckBox(Icon icon, boolean selected):创建一个有图标,并且指定是否被选定的复选框。

", JCheckBox(String text):创建一个有文本,但未被选定的复选框。

", JCheckBox(String text, boolean selected):创建一个有文本,并且指定是否被选定的 复选框。

", JCheckBox(String text, Icon icon):创建一个指定文本和图标,但未被选定的复选框。

", JCheckBox(String text, Icon icon, boolean selected):创建一个指定文本和图标,并指 定是否被选定的复选框。 3 单选框

单选框(JRadioButton)与AWT 中的复选框组功能类似,其继承关系如下。 java.lang.Object +--java.awt.Component +--java.awt.Container +--javax.swing.JComponent +--javax.swing.AbstractButton +--javax.swing.JToggleButton +--javax.swing.JRadioButton

JRadioButton 与ButtonGroup 配合使用时创建一组按钮,并且一次只能选择其中的一个按钮,通过add()方法将JRadioButton 对象添加到该组中。注意:使用ButtonGroup 对象进行分组是逻辑分组而不是物理分组。创建一组按钮通常需要创建一个JPanel 或者类似容器,并将按钮添加到容器中。 JRadioButton 的构造方法有以下几种。

", JRadioButton():创建一个未指定图标和文本,并且未被选定的单选按钮。 ", JRadioButton(Action a):创建一个属性来自Action 的单选按钮。

", JRadioButton(Icon icon):创建一个指定图标但未指定文本,未被选定的单选按钮。 ", JRadioButton(Icon icon, boolean selected):创建一个指定图像和状态,但无文本的单选按钮。

", JRadioButton(String text):创建一个指定文本,但无图标未被选择的单选按钮。 ", JRadioButton(String text, boolean selected):创建一个执行文本和选择状态的单选按钮。 ", JRadioButton(String text, Icon icon):创建一个指定文本和图标,但未被选择的单选 按钮。

", JRadioButton(String text, Icon icon, boolean selected):创建一个具有指定的文本、图 像和选择状态的单选按钮。 4 组合框

组合框(JcomboBox)是将按钮、可编辑字段以及下拉菜单组合的组件。用户可以从下拉列表中选择不同的值,如果组合框处于可编辑状态,用户可以键入值。组合框的构造方法有以下几种。

", JComboBox():创建一个没有数据选项的组合框。

", JComboBox(ComboBoxModel aModel):创建一个数据来源于ComboBoxModel 的组合框。

", JComboBox(Object[] items):创建一个指定数组元素作为选项的组合框。 ", JComboBox(Vector items):创建一个指定Vector 中元素的组合框。

5 进程条

进程条(JprogressBar)是以图形化的方式来描述任务进度的组件。在任务完成过程中,进度条显示该任务完成的百分比,百分比通常用可视化的矩形表示,该矩形开始为空,随着任务的执行,组件被填满。进程条的继承关系如下。 java.lang.Object

+--java.awt.Component +--java.awt.Container +--javax.swing.JComponent +--javax.swing.JProgressBar 进程条的构建方法有以下几种。

", JProgressBar():创建一个显示矩形,但不显示进度字符串的水平进度条。

", JProgressBar(BoundedRangeModel newModel):创建一个指定进度条数据模型的水平进度条。

", JProgressBar(int orient):创建一个指定方向(VERTICAL 或HORIZONTAL)的进度条。

", JProgressBar(int min, int max):创建一个指定最小值和最大值的水平进度条。 ", JProgressBar(int orient, int min, int max):创建一个指定方向、最小值和最大值的进度条。 6 表格

表格(JTable)是Swing 新增加的组件,主要是为了将数据以表格的形式显示。通常用数据模型类的对象来保存数据,数据模型类派生于AbstractTableModel 类,并且必须重写抽象模型类的几个方法,例如,getColumnCount、getRowCount、getColumnName、getValueAt。因为表格会从这个数据模型的对象中自动获取数据,数据模型类的对象负责表格大小(行/列)、数据填写、表格单元更新等与表格有关的属性和操作。表格类的继承关系如下。 java.lang.Object +--java.awt.Component

+--java.awt.Container +--javax.swing.JComponent +--javax.swing.JTabel

表格类的构造方法有以下几种。

", JTable():使用系统默认的模型创建一个JTable 实例。

", JTable(int numRows,int numColumns):创建一个使用DefaultTableModel 指定行、列的空表格。

", JTable(Object[][] rowData,Object[][] columnNames):创建一个显示二维数据的表格。 ", JTable(TableModel dm):创建一个指定数据模式和默认字段模式的JTable 实例。 ", JTable(TableModel dm,TableColumnModel cm):创建一个指定数据模式和字段模式 的JTable 实例。

", JTable(TableModel dm,TableColumnModel cm,ListSelectionModel sm):创建一个指定 数据模式、字段模式与选择模式的JTable 实例。

", JTable(Vector rowData,Vector columnNames):创建一个以Vector 为数据源,并显示行名称的JTable 实例。 7 树

树(JTree)中特定的节点可以由TreePath 标识或由其显示行标识。当展开某一个节点的所有祖先时,将显示该节点,折叠节点是隐藏位于折叠祖先下面的节点。可查看节点的父类节点都是可以展开的,但是它们可以显示也可以不显示。显示节点必须是可查看的并且位于显示区域。与显示相关的方法如下。 isRootVisible() //返回树的根节点是否显示

setRootVisible() //设置是否显示树的根节点 scrollPathToVisible() //确保展开所有的路径

scrollRowToVisible() //按行滚动标识的条目,直到显示出来 getVisibleRowCount() //返回显示区域的显示行的数目 setVisibleRowCount() //设置显示区域中显示行的数目 与可查看相关的方法如下。 isVisible() //返回当前路径查看标识 makeVisible() //设置当前路径的查看标识 树的构造方法有以下几种。 ", JTree():创建一个空节点的树。

", JTree(Hashtable value):创建一个由Hashtable 元素构成节点的JTree,它不显 示根。

", JTree(Object[] value):创建一个指定数组的元素作为不给显示的新的根节点的子节 点的树实例。

", JTree(TreeModel newModel):创建一个使用指定数据模型,并显示根节点的树实例。 ", JTree(TreeNode root):创建一个指定TreeNode 作为其根,并显示根节点的树实例。 ", JTree(TreeNode root, boolean asksAllowsChildren):创建一个指定TreeNode 作为其 根,并指定根节点的显示方式的树实例。 5 盒布局管理器

盒布局管理器是允许水平(x 轴)或者垂直(y 轴)顺序布局依次添加的组件的布局管理器。盒布局管理器通过参数指定布局类型。缺省情况下,组件在纵轴方向上

居中对齐。设置布局管理器的方法如下。 pane.setLayout(new BoxLayout(pane,int axis)); axis 的取值有以下几种。 ", X_AXIS:水平方法布局组件。 ", Y_AXIS:垂直方法布局组件。

", LINE_AXIS:组件的布局是根据容器的ComponentOrientation 属性,按照一行文字的排列方式放置组件。对于垂直方法的排列顺序,组件总是先上后下放置。

", PAGE_AXIS:组件的布局是根据容器的ComponentOrientation 属性,按照一页中的文本行排列方式布置组件。对于垂直方法的排列顺序,组件总是先上后下放置。

1 事件处理机制

", Event(事件对象):用户界面操作以类的形式描述,例如鼠标操作对应的事件类 MouseEvent,界面动作对应的事件类ActionEvent。 ", Event Source(事件源):产生事件的场所,通常指组件,例如按钮Checkbox。 ", Event handler(事件处理器,事件监听器):接收事件类并进行相应的处理对象。

Java 中授权处理机制具有以下特征。

", 在程序中如果想接受并处理事件*Event,必须定义与之相应的事件处理类,该类必须实现与事件相对应接口*Listener。

", 定义事件处理类之后, 必须将事件处理对 象 注 册 到 事 件 源 上 , 使 用 方 法add*Listener(*Listener)注册监听器。

Button b = new Button(\声明,并初始化按钮对象b

//注册监听器进行授权,参数是事件处理者对象(即事件处理器,事件监听器) b.addActionListener(new ButtonHandler());

//ButtonHandler 实现接口ActionListener 才能做事件ActionEvent 的处理者 class ButtonHandler implements ActionListener

{public void actionPerformed(ActionEvent e) //ActionEvent 事件对象作为参数 {........//本接口必须实现的方法actionPerformed } }

2 事件类 java.lang.Object

+--java.util.EventObject +--java.awt.AWTEvent +--java.awt.event.*Event

每一个事件类都与一个事件类接口相对应,由事件引起的动作都存放在接口需要实现的方法中。

低级事件是指源于组件或容器的事件,当组件或容器发生事件时(单击左键、右键、拖动以及窗口大小的改变等),将触发事件。

高级事件是语义事件,此类事件与特定的具体事件不一定相对应,但是会产生特定的事件对象,如按钮被按下触发ActionEvent 事件、滚动条移动滑块触发AdjustmentEvent 事件、或选中项目列表某项时触发ItemEvent 事件。 低级事件包括以下几种。

", 组件事件(ComponentEvent)。 ", 容器事件(ContainerEvent)。 ", 窗口事件(WindowEvent)。 ", 焦点事件(FocusEvent)。 ", 键盘事件(KeyEvent)。 ", 鼠标事件(MouseEvent)

高级事件(语义事件)包括以下几种。 ", 动作事件(ActionEvent)。 ", 调整事件(AdjustmentEvent)。 ", 项目事件(ItemEvent)。 ", 文本事件(TextEvent)。

动作事件类

动作事件类(ActionEvent)指发生组件定义的语义事件,用户在操作Button、

CheckBox、TextField 等组件的时候将出现动作事件,例如单击Button、TextField,按下回车键等。使用动作事件时需给组件增加一个事件监听器(事件处理器)ActionListener。ActionListener 只有惟一的actionPerfomed()方法。 Public void actionPerformed(ActionEvent e){//按钮被操作发生} ActionEvent 类的方法有以下几种。 ", getActionCommand():返回命令字符串。 ", getModifiers():取得按下的修饰符键。 ", getWhen():取得事件发生的时间。 ", paramString():生成事件状态的字符串。

假设存在按钮组件对象button,动作事件使用如下。 button.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) {//按钮被操作 dosomething } });

调整事件类

调整事件是滑动滚动条的滚动块时发生的事件。ScrollBar 组件在滑动滚动块时就会触发调整事件,为了监听调整事件,必须给ScrollBar 组件对象添加一个调整事件监听器AdjustmentListener。该监听器只有一个方法,其一般格式如下。 public void adjustmentValueChanged(AdjustmentEvent e) {//调整滚动条发生}

AdjustmentEvent 类的方法有以下几种。

", getAdjustable():取得事件源,返回Adjustable 接口对象。 ", getAdjustmentType():取得调整类型。 ", getValue():取得源中的值。

", getValueIsAdjusting():判断源是否被移动。 ", paramString():生成事件状态的字符串。

假设现有滚动条组件对象scrollbar,调整事件使用如下。 scrollbar.addAdjustmentListener(new AdjustmentListener() { public void adjustmentValueChanged(AdjustmentEvent e) {//调整滚动条do someting } } );

焦点事件类

焦点事件类(FocusEvent)是指用户程序界面的组件失去焦点(即焦点从一个对象转移到另外一个对象)时,就会发生焦点事件。得到焦点事件的组件处于激活状态,例如界面包含文本框组件和单行文本输入区两个组件,如果文本框内部闪烁着光标,则表明该文本框拥有焦点。当鼠标单击单行文本框输入区时,这个时候就会触发焦点时间。使用焦点事件必须给组件增加一个FocusListener 接口的事件处理器,该接口包含以下两个方法。

", void focusGained(FocusEvent e):当获得焦点时发生。 ", void focusLost(FocusEvent e):当失去焦点时发生。

FocusEvent 类的方法有以下几种。

", getOppositeComponent():返回焦点转换到的下一个组件。 ", isTemporary():判断焦点的转换是暂时的还是永久的。 ", paramString():生成事件状态的字符串,用toString()方法进行。 假设现有一个文本组件对象textfield,焦点事件的使用示例如下: textfield.addFocusListener(new FocusListener() public void focusGained(FocusEvent e) {

{//获得焦点 do somthing} public void focusLost(FocusEvent e) {//失去焦点 do somthing} });

项目事件类

项目事件类(ItemEvent)是指某一个项目被选定、取消的语义事件。选择CheckBox、 ComboBox、List 等组件的时候将产生项目事件。使用项目事件必须给组件添加一个实现ItemListener 接口的事件处理器,该接口的方法如下。 void itemStateChange(ItemEvent e) 项目事件类的方法有以下几种。 ", getItem():返回取得影响的项目对象。

", getItemSelectable():返回事件源ItemSelectable 对象。

", getStateChange():返回状态的改变类型,包括SELECTED 和DESELECTED 。

", paramString():生成事件状态的字符串。

假设现有一个下拉列表框组件对象jComboBox1,项目事件的使用示例如下。 jComboBox1.addItemListener(new ItemListener() {

public void itemStateChanged(ItemEvent e) {//项目发生改变 do somthing} });

键盘事件类

键盘事件类(KeyEvent)是容器内的任意组件获得焦点时,组件发生键击事件,当按下释放或键入某一个键时,组件对象将产生该事件。使用键盘事件必须给组件添加一个KeyListener 接口的事件处理器,该接口包含以下3 个方法。 ", void keyPressed(KeyEvent e):按下按键时发生。 ", void keyReleased(KeyEvent e):松开按键时发生。

", void keyTyped(KeyEvent e):敲击键盘,发生在按键按下后,按键放开前。 键盘事件类的方法有以下几种。

", getKeyChar():返回在键盘上按下的字符。 ", getKeyCode():返回在键盘上按下的字符码。 ", getKeyLocation():返回键位置。

", getKeyModifiersText():返回描述修饰符的文本字符串。 ", getKeyText():返回键码编程描述键的文本。

", isActionKey():判断键是否是操作键。 ", setKeyChar():改变键字符为指定的字符。

", setModifiers(int modifiers):改变键修饰符为指定的键修饰符。 ", paramString():生成事件状态的字符串。

假设有一个文本框组件对象textfield,键盘事件的使用示例如下。 textfield.addKeyListener(new KeyListener() {

public void keyPressed(KeyEvent e) {//按下按键时 dosomething} public void keyReleased(KeyEvent e) {//放开按键时 dosomething} public void keyTyped(KeyEvent e)

{//敲击键盘,发生在按键按下后,按键放开前 dosmething} });

鼠标事件类

鼠标事件类(MouseEvent)指组件中发生的鼠标动作事件,例如按下鼠标、释放鼠标、单击鼠标、鼠标光标进入或离开组件的几何图形、移动鼠标、拖动鼠标。当鼠标移动到某个区域或鼠标单击某个组件时就会触发鼠标事件。使用鼠标事件必须给组件添加一个MouseListener 接口的事件处理器,该接口包含以下5 个方法。 ", void mouseClicked(MouseEvent e):当鼠标在该区域单击时发生。

", void mouseEntered(MouseEvent e):当鼠标进入该区域时发生。 ", void mouseExited(MouseEvent e):当鼠标离开该区域时发生。 ", void mousePressed(MouseEvent e):当鼠标在该区域按下时发生。 ", void mouseReleased(MouseEvent e):当鼠标在该区域放开时发生。 鼠标事件类的方法有以下几种。

", getButton():返回鼠标键状态改变指示。 ", getClickCount():返回鼠标键单击的次数。

", getMouseModifiersText():返回指定修饰符文本字符串。 ", getPoint():返回事件源中位置对象。

", getX():返回鼠标在指定区域内相对位置的横坐标。 ", getY():返回鼠标在指定区域内相对位置的纵坐标。 ", paramString():生成事件状态的字符串。

假设有一个面板组件对象panel,鼠标事件的使用示例如下。 panel.addMouseListener(new MouseListener() {

public void mouseClicked(MouseEvent e) {//当鼠标在该区域单击时发生 dosomething} public void mouseEntered(MouseEvent e) {//当鼠标进入该区域时发生 dosomething} public void mouseExited(MouseEvent e) {//当鼠标离开该区域时发生 dosomething}

public void mousePressed(MouseEvent e) {//当鼠标在该区域按下时发生 dosomething} public void mouseReleased(MouseEvent e) {//当鼠标在该区域放开时发生 dosomething} });

窗口事件类

窗口事件(WindowEvent)指窗口状态改变的事件,例如当窗口Window 对象的打开、关闭、激活、停用或者焦点转移到窗口内,以及焦点移除而生成的事件,一般发生在Window、Frame、Dialog 等类的对象上。使用窗口事件必须为组件添加一个实现WindowListener 接口的事件处理器,该接口包含以下7 种方法。 ", void windowActivated(WindowEvent e):窗口被激活时发生。 ", void windowClosed(WindowEvent e):窗口关闭之后发生。 ", void windowClosing(WindowEvent e):窗口关闭过程中发生。

", void windowDeactivated(WindowEvent e):窗口不再处于激活状态时发生。 ", void windowDeiconified(WindowEvent e):窗口大小从最小到正常时发生。 ", void windowIconified(WindowEvent e):窗口从正常到最小时发生。 ", void windowOpened(WindowEvent e):窗口第一次被打开时发生。 窗口事件类的方法有以下几种。

", getNewState():返回窗口改变之后的新状态。 ", getOldState():返回窗口改变之后的旧状态。 ", getOppositeWindow():返回事件设计的辅助窗口。

", getWindow():返回事件源。

", paramString():生成事件状态的字符串。

假设有一个 frame 框组件对象,窗口事件的使用示例如下。 frame.addWindowListener(new WindowListener() {

public void windowActivated(WindowEvent e) {//窗口被激活时发生 dosomething} public void windowClosed(WindowEvent e) {//窗口关闭之后发生dosomething} public void windowClosing(WindowEvent e) {//窗口关闭过程中发生dosomething} public void windowDeactivated(WindowEvent e) {//窗口不再处于激活状态时发生dosomething} public void windowDeiconified(WindowEvent e) {//窗口大小从最小到正常时发生dosomething} public void windowIconified(WindowEvent e) {//窗口从正常到最小时发生dosomething} public void windowOpened(WindowEvent e) {//窗口第一次被打开时发生dosomething} });

按钮事件类

3 事件监听器

4 事件适配器

java.awt.event 包中定义的事件适配器类包括以下几种。 ", ComponentAdapter(组件适配器)。 ", ContainerAdapter(容器适配器)。 ", FocusAdapter(焦点适配器)。 ", KeyAdapter(键盘适配器)。 ", MouseAdapter(鼠标适配器)。

", MouseMotionAdapter(鼠标运动适配器)。 ", WindowAdapter(窗口适配器)。13

3 事件监听器

4 事件适配器

java.awt.event 包中定义的事件适配器类包括以下几种。 ", ComponentAdapter(组件适配器)。 ", ContainerAdapter(容器适配器)。 ", FocusAdapter(焦点适配器)。 ", KeyAdapter(键盘适配器)。 ", MouseAdapter(鼠标适配器)。

", MouseMotionAdapter(鼠标运动适配器)。 ", WindowAdapter(窗口适配器)。13

本文来源:https://www.bwwdw.com/article/9emw.html

Top