第 6 章 awt/swing 组件及事件处理

104
淮淮淮 淮 6 淮 AWT/Swing 淮淮淮淮淮淮淮 6.1 淮淮淮淮淮淮淮淮 6.2 GUI 淮淮淮淮淮淮淮 6.3 Java 淮淮淮淮淮 6.4 淮淮淮淮淮淮淮 6.5 淮淮淮淮淮淮淮淮淮 6.6 淮淮淮淮淮

Upload: kenneth-garza

Post on 03-Jan-2016

134 views

Category:

Documents


0 download

DESCRIPTION

第 6 章 AWT/Swing 组件及事件处理. 6.1 图形用户界面概述 6.2 GUI 标准组件的使用 6.3 Java 的事件处理 6.4 窗口及菜单设计 6.5 图形界面的布局设计 6.6 建立对话框. 学习提要. 掌握常用的 GUI 标准组件及图形界面的设计方法; 掌握 JAVA 的事件处理机制和常用事件响应代码的编写方法; 掌握容器及布局、菜单、对话框的设计方法. 6.1 图形用户界面概述. 6.1.1 基本概念 ( 1 ) GUI — 图形用户界面 ( Graphics User Interface ) - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

第 6 章 AWT/Swing 组件及事件处理

6.1 图形用户界面概述

6.2 GUI标准组件的使用

6.3 Java的事件处理

6.4 窗口及菜单设计

6.5 图形界面的布局设计

6.6 建立对话框

Page 2: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

学习提要

• 掌握常用的 GUI 标准组件及图形界面的设计方法;

• 掌握 JAVA 的事件处理机制和常用事件响应代码的编写方法;

• 掌握容器及布局、菜单、对话框的设计方法

Page 3: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

6.1 图形用户界面概述6.1.1 基本概念( 1) GUI—图形用户界面( Graphics User Interface )

使用图形的方式借助菜单、按钮等标准界面元素和鼠标操作,帮助用户和计算机之间进行交互。

( 2) AWT——抽象窗口工具集 (abstract window toolkit)

Java 中用来生成图形用户界面的基础类库是 java.awt 包,它是 Java 基本包中最大的一个,定义了所有 GUI组件类,以及其它用于构造图形界面的类。 Sun公司在 JDK1.0 中就提供了 AWT。

为了实现跨平台特性, AWT类库中的各种操作被定义成在一个并不存在的“抽象窗口”中进行。

Page 4: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

AWT 组件的类层次• Component 组件是所有 AWT 组件的基类,提

供了基本的显示和事件处理特征。

Page 5: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

( 3 ) Swing GUI 组件• 在 Java2 中, javax.swing 包被列入 Java 的基础类库

JFC ,其中定义的 Swing GUI 组件相对于 java.awt包的各种 GUI 组件增加了许多功能。

• Swing 组件类 Swing 包含 250 多个类(有些是组件,有些是支持类,

组件的名字都以 J 开头), Swing 提供了 40 多个组件,是 AWT 的 4 倍,用轻量组件(没有本地对等组件)代替了 AWT 的重量组件(与本地对等组件相关联)。

除模仿 AWT 组件所提供的功能外,几乎所有的 Swing替代组件都有其他一些特性,如 Swing 按钮可以显示图标和文本, AWT 按钮只显示文本。

Page 6: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

( 4)设计图形界面的步骤

1 )定义最外层的容器 (Frame,JFrame), 设定布局管理方式 ;

2) 在外层容器中依次加入小容器 (Panel 等 )和标准组件 ;

3) 设计图形界面元素的物理外观 (颜色 ,字体 ,对齐方式等、位置 );

4) 定义界面元素对不同事件 (如鼠标点击等 )的响应,实现界面与用户的交互功能 .

Page 7: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

6.1.2 图形用户界面元素分三类: 容器、控制组件、用户自定义成分。( 1)容器 是用来组织其他界面成分和元素的单元,如窗体( Fram

e 、 JFrame )、面板 (Panel 、 JPanel) 等。主要作用 : 用来容纳、排列其它界面元素。 容器的特点: (1) 可以容纳其他界面元素 ;(2) 通过设置布局方式,来决定

其它界面元素的排列方式。 思考:作为最外层容器的 Frame 和 JFrame ,在其中加

入其它界面元素时有何区别? (理解 JFrame 的 ContentPane)

Page 8: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

( 2)控制组件(标准界面元素)

控件组件是图形界面的最小单位,里面不能再包含其他成分。如:命令按钮、文本域、标签等。控件的作用是完成与用户的一次交互,如接受用户指令、向用户显示文本等。

使用控件的步骤使用控件的步骤:: 创建组件→确定属性 (颜色、字体等 ) → 加到外层容器中→注册事件监听器→重载事件处理方法。

如 Label 、 TextField 、 Button 等。例:创建 Button ,并处理事件 (ActionEvent) 。Button btn=new Button(“ 显示” );add(btn);btn.addActionListener(this);public void actionPerformed(ActionEvent e){

if(e.getSource()==btn) showStatus(“ 你按下了显示按钮 !!”);

}

Page 9: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

6.1.3 用户自定义图形界面成分 自定义成分是指 : 利用 Java 类库中的类及其方法来绘制符合用户特定要求的图形界面成分,也可以将已经存在的图形、动画等加载到当前程序中来。

(1) 绘制图形 (线段、矩形、圆、多边形、弧形 ) Graphics 类——绘制直线、矩形、多边形、圆等。 Point 类——表示一个象素点 Dimension 类——表示宽和高 Rectangle 类——表示一个矩形 Polygon 类——表示一个多边形 Color 类——表示颜色

Page 10: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

(2) 显示文字 Java 中用一个 Font 类的对象来表示一种字体显示效果,包括字体类型、字型和字号。

Font.PLAIN ——正常字型常量 Font.BOLD ——加粗 Font.ITALIC ——倾斜1) 创建字体对象Font MyFont=new Font(“TimesRoman”,Font.BOLD,12);2 )使用字体对象 g.setFont(MyFont); //g是 Graphics 对象 btn.setFont(MyFont); //btn 是按钮对象

Page 11: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

(3) 控制颜色 java.awt.Color-- 代表颜色。可以直接使用系统定义好的颜色常量 ( 如 Color.blue) ,也可以通过R、 G、 B三色比例来创建自己的 Color 对象。

1) Color 类的构造函数 public Color(int Red,int Green,int Blue); // 每个参数的取值范围在 0-255之间。 public Color(float Red, float Green, float Blue); // 每个参数的取值范围在 0-1.0 之间。 public Color(int RGB); // 指明 RGB三色的比例,这个参数的 0-7 比特代表红色的比

例, 8-15 比特代表绿色的比例, 16-23比特代表蓝色的比例。

Page 12: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

例:• 创建自己的颜色: Color blueColor= new Color(0,0,255);

g.setColor(blueColor);• 利用系统的颜色常量: g.setColor(Color.blue);

2) GUI 控件的颜色设置方法public void setBackground(Color c); // 设置背景颜色public Color getBackground(); // 取得背景颜色public void setForeground(Color c); // 设置前景颜色public Color getForeground(); // 取得前景颜色

Page 13: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

(4) 显示图象 Java 中可以利用 Graphics 类的 drawImage()方法显示图象。 drawImage() 方法的格式如下:

drawImage (参数 1 ,参数 2 ,参数 3 ) 参数 1:Image 对象,可以用系统为 Applet 类定义的 getImage ()方法获得 ;参数 2 、参数 3: 显示时图象左上角的 X、 Y 坐标。

getImage (参数 1 ,参数 2 ) 参数 1: 图象文件所在的 URL 地址 参数 2: 图象文件的文件名getDocumentBase () 获取含有该 Applet 的 HTML文件的 URL 地址。

Page 14: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

例:图形用户界面—自定义成分示例import java.awt.*;

import java.applet.Applet;

public class TestGraphics extends Applet

{

Image myImage ;

Font myFont=new Font(" 黑体 ",Font.BOLD,20);

Color myColor=new Color(120,25,180);

public void init()

{

myImage = getImage(getDocumentBase(), "fys.jpg" );

}

Page 15: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

public void paint(Graphics g) {

g.drawLine(30,5,40,5); // 画线g.setColor(Color.blue); // 设置字体颜色

g.drawRect(40,10,50,20); // 画空长方形 g.setColor(Color.red); setBackground(Color.yellow); // 设置背景颜色 g.fillRect(60,30,70,40); // 画实体长方形

g.setFont(myFont); g.drawString(" 大家好! ",100,200); g.setColor(myColor); g.drawString(g.getFont().toString(),10,250); g.drawImage(myImage, 150, 10, this ); // 显示图片

}}

Page 16: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

(5) 实现动画效果 用 Java 实现动画的原理与放映动画片类似,取若干相关的图象,按顺序、连续地在屏幕上先显示,后擦除,循环往复就可以获得动画的效果。

课外实践题: 编写 Java Applet ,实现将若干幅图片按一定的时间间隔 ( 如 1秒 ) ,交替显示 .

(第 1幅第 2幅 … 第 10幅第 1幅… )

Page 17: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

6.2 常用的 GUI 标准组件 AWT ( Swing )介绍

标签( Label )( J Label ) Label 的构造函数: Label ( String ):指定标签文字 Label ( String , int ) : 指定标签文字及对齐方

式 0= Label .LEFT 1= Label .RIGHT 2= Label.CENTER

void setAlignment(int) : 设置标签对齐方式。

Page 18: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

文本输入框( TextField ) ( JTextField ) ( JPasswordField 密码输入框)

TextField 的构造函数: TextField (int) TextField (String) TextField(String,int) 指定初始文本及长度

主要方法 功能char getEchoChar( ) 返回回显的字符void setEchoChar(char) 设置回显字符(密码)

void setEditable(boolean) 设置文本域是否为只读状态int getColumns( ) 返回文本域的列数void setText(String) 设置文本string getText( ) 返回文本

Page 19: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

TextField 对事件的响应事件类型 按回车动作事件

ActionEvent

修改文本文本事件 TextEvent

实现接口 ActionListener TextListener

接口的方法 public void actionPerformed

(ActionEvent e)

public void textValueChanged

(TextEvent e)

获取文本框的对象引用

e.getSource() e.getSource()

获取改变后的文本内容 String s=((TextField)e. getSource()).getText();

Page 20: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

多行文本组件( TextArea ) (JTextArea )• 多行文本组件的构造函数:

TextArea ( int , int ) // 用指定的行数、列数创建 TextArea (String) // 用指定的初始文本创建 TextArea (String , int , int ) // 用指定的初始文本、行数、列

数创建 TextArea ( String , int, int, int ) // 用指定的初始文本、行

数、列数及滚动条创建• 事件响应与 TextField 相同。

int getColumns( ) 返回多行文本的列数void append (String ) 插入字符串String getText( ) 返回文本框中的文本void setText(String) 设置文本框中的文本

Page 21: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

按钮( Button ) ( JButton )

按钮的构造函数: Button ( String text ) // 创建一个带有文本信息的按钮

如果是 JButton ,上面不仅可以显示文字,还可以显示图标。 (Swing 组件比 AWT 组件更生动。 )

Page 22: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

Button 对事件的响应• 单击按钮可以引发动作事件( ActionEvent )• btn. addActionListener( 监听器对象 )• 监听器对象要实现 ActionListener 接口• 在实现接口的方法 public void actionPerformed() 中可以

用 e.getSource() 方法获取被点击的按钮对象• 也可以用 e.getActionCommand() 方法获取按钮的标签

或事先为该按钮设置的命令名例: Button btn=new Button(“ 按钮标签” ); btn.setActionCommand(“ 命令名” ); public void actionPerformed (ActionEvent e) { if (e. getActionCommand() ==“ 命令名” ) … 或 if (e.getSource()==btn) …. }

Page 23: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

复选框组件( Checkbox )( JCheckbox )• 复选框的构造函数:Checkbox ( String ) // 带显示标签Checkbox ( String,boolean ) // 带显示标签和初始状

态• true 表示被选中, false 表示未选中。

主要方法 功能void getLabel( ) 返回复选框的显示标签

boolean getState( ) 返回复选框的状态

void setState(boolean ) 设置复选框的状态

void setLabel(String ) 设置复选框的显示标签

Page 24: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

Checkbox 对事件的响应事件类型 单击时,发生选择事件 (ItemEvent)

注册事件监听者 addItemListener( 监听者对象 )

监听者对象要实现的接口 :

ItemListener

接口中的方法 public void itemStateChanged (ItemEvent e)

方法体中判断事件源 e.getItemSelectable()

取得事件源 ( 复选框 )的状态

boolean b=((Checkbox)e. getItemSelectable()). getState();

Page 25: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

单选按钮组件 ( JRadioButton )

• 单选钮组件要先用 CheckboxGroup ()方法构造一个 CheckboxGroup 对象,再用 Checkbox

( String , CheckboxGroup , boolean )方法创建 Checkbox 对象,如果不同的 Checkbox 在创建时属于同一个 CheckboxGroup ,则组成单选按钮组 ( 互斥选择 ) 。

• 单选钮组件的状态属性,为 true/false ,表示选中或未选中。

Page 26: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

单选按钮组件 CheckboxGroup 对事件的响应

• CheckboxGroup 类不是 java.awt.* 包中的类,它是 Object 的直接子类,所以按钮组不能响应事件 ;

• 单选按钮组中的每个单选按钮( CheckBo

x )可以响应 ItemEvent 类的事件。

Page 27: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

组合框 (Choice) ( JComboBox )

Page 28: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

创建组合框:

ChoiceChoice (() // 创建组合框

void add (String) 向组合框中加入一个选项int countItems( ) 返回组合框中的条目数int getSelectedIndex( ) 返回被选中的项的序号String getItem(int ) 返回指定位置的选项信息void removeAll( ) 删除所有选项void remove(int) 删除指定位置的选项void insert(String ,int) 在指定位置加入一个选项void select(String) 选择指定信息的选项

Page 29: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

组合框( Choice )对事件的响应事件类型 单击某个选项时,引发选择事件 ItemEvent

注册监听器 addItemListener( 监听器对象 )

监听器对象要实现的接口

ItemListener

接口中的方法 public void itemStateChanged

(ItemEvent e)

方法体中要获取事件源 e.getItemSelectable()

获取被选中的选项内容 String selectedItem = ((Choice)e.getItemSelecta

ble( )).getSelectedItem( );

Page 30: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

下拉列表组件( List ) ( JList )

Page 31: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

创建列表: List () // 创建列表 List ( int ) // 以指定的可见行数创建列表 List ( int,boolean ) // 指定可见行数和是否允许多项选择

String getSelectedItem(int ) 返回被选中的选项int countItems( ) 返回下拉列表的条目数int getSelectedIndex() 返回被选中项的序号String getItem(int ) 返回指定位置的字符串Void removeAll( ) 删除所有选项void remove(int) 删除指定位置的选项void addItem(String ,int) 在指定位置加入一个选项void addItem (String) 向列表末尾加入一个选项void select(String) 选择指定字符串的选项

Page 32: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

列表组件( List )对事件的响应

事件类型 双击某选项时,引发动作事件 (ActionEvent)

单击某选项时,引发选择事件 (ItemEvent)

注册监听器 addActionListener( ) addItemListener( )

实现接口 ActionListener ItemListener

接口中的方法

public void actionPerformed

(ActionEvent e)

public void itemStateChanged

(ItemEvent e)

获取事件源 e.getSource() e.getItemSelectable()

获取选中项的文本

e.getActionCommand();

或: ((List ) e.getSource()). getSelectedItem( );

String s = ((List)e.getItemSelectable( )).getSelectedItem( );

Page 33: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

滚动条组件( Scrollbar ) ( JScrollbar )

Page 34: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

滚动条的构造函数:Scrollbar () // 垂直滚动条

Scrollbar ( int ) // 指定方向的滚动条 Scrollbar .

HORIZONTAL ( 水平 ) Scrollbar .VERTICAL ( 垂直 )

Scrollbar ( int, int, int, int,int ) // 指定方向、初始值、滚动块大小、最小值、最大值

void setMaximum(int) 设置滚动条的最大值

void setOrientation(int) 设置滚动条的方向void setValue(int) 设置滚动条的当前值

Page 35: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

滚动条组件( Scrollbar )对事件的响应

事件类型 改变滑块位置时,引发调整事件 AdjustmentEvent

注册事件监听器 addAdjustmentListener( );

实现接口 AdjustmentListener

接口中的方法 public void adjustmentValueChanged(AdjustmentEvent e)

获取事件源 e.getAdjustable( )

获取滚动后的数值 e.getValue( )

Page 36: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

6.3 Java 的事件处理6.3.1 基本概念 事件处理三要素:事件源、事件类型、事件监听器 事件源:图形用户界面中引发事件的组件。

事件源可以注册监听器,并向其发送事件对象。 事件类型: Java 的所有事件都封装成一个类,这些事件类定义在 java.awt.event 包中,所有的事件类都继承了 AWTEvent 类的一个方法 getSource() ,返回引发事件的事件源对象。

事件监听器:不同类型的事件发生后,由事件监听器接收事件并调用相应的事件处理方法。

Page 37: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

Java 的事件委托模型

Page 38: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

AWTEvent 类体系结构图AWTEvent

AdjustmentEvent

WindowEventContainerEvent

FocusEvent InputEvent PaintEvent

KeyEventMouseEvent

ActionEvent

ItemEventComponentEvent

TextEvent

Page 39: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

事件适配器( Adapter ) :(1) 事件源 .add***Listener( 监听器对象 );(2) 监听器对象所在的类要实现 ***Listener 接口,并实现接口

中的抽象方法。如果接口中的抽象方法有 2到多个,如 MouseListener , MouseMotionListener , KeyListener,WindowListener 等。则系统定义了 ***Adapter ,让 ***Adapter 实现相应 ***Listener 接口;

(3) 有了 Adapter (适配器),可以定义其子类(重写需要的方法),然后让其子类的对象充当监听器对象。

Page 40: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

6.3.2 动作事件 (ActionEvent ) 的处理 能够触发动作事件的动作有:

点击按纽 (Button) 双击一个列表框 (List) 中的选项 选择菜单项 (MenuItem) 在文本框 (TextField/TextArea) 中敲回车

动作事件对应的事件类是 ActionEvent 类,其主要方法有: (1) public String getActionCommand( )—获得引发

事件的项目信息 例: public void actionPerformed(ActionEvent e)

{ if ( e.getActionCommand( ) == ″ 命令名″ )

…}

Page 41: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

(2) public int getModifiers( )—当动作是同时与功能键配合使用时,获得引发事件的组合键信息,动作事件对应的事件监听器是 ActionListener ,

其主要方法是: actionPerformed(ActionEvent e)实现动作事件的操作过程是: 1 )注册动作监听器 addActionListener( 监听器对象 ) 2) 监听器实现 ActionListener 接口的方法: ac

tionPerformed(ActionEvent e)

Page 42: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

6.3.3 文本事件( TextEvent )的处理

TextEvent 类只包含一个事件,即代表文本框中文本变化的事件 TextValueChanged 。在文本框中删除字符、改变字符、键入字符都将引发这个事件。

引发文本事件的基本组件有两种:单行文本框 Text

Field 和多行文本框 TextArea ,它们都是 TextComp

onent 的子类。

Page 43: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

例 6-7 TextComponentEvent.javaimport java.applet.*;import java.awt.*;import java.awt.event.*;public class TextComponentEvent extends Applet implements T

extListener,ActionListener{ TextField tf; TextArea ta;

public void init() {

tf = new TextField(45); ta = new TextArea(10,45); add(tf); add(ta);

tf.addActionListener(this); tf.addTextListener(this);

}

Page 44: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

public void textValueChanged(TextEvent e) { if(e.getSource()==tf) ta.setText(((TextField)e.getSource()).getText

()); }

public void actionPerformed(ActionEvent e) { if(e.getSource()==tf) ta.setText(""); }}

Page 45: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

6.3.4 选择事件( ItemEvent )的处理• ItemEvent 类只包含一个事件,即代表选择项的选中

状态发生变化的事件 ITEM-STATE-CHANGED 。• 引发这类事件的动作包括:(1) 改变列表类 List 对象选项的选中或不选中状态。(2) 改变下拉列表类 Choice 对象选项的选中或不选中状态。(3) 改变复选按钮类 Checkbox 对象的选中或不选中状态。(4) 改变检测盒菜单项 CheckboxMenuItem 对象的选中或不

选中状态。

Page 46: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

ItemEvent 类的主要方法有:(1) public ItemSelectable getItemSelectable( )

此方法返回引发选中状态变化事件的事件源,包括 List对象、 Choice 对象、 Checkbox 对象等。

(2) public Object getItem( )

此方法返回引发选中状态变化事件的具体选择项,例如用户选中的 Choice 中的具体 item ,通过调用这个方法可以知道用户选中了哪个选项。

(3) public int getStateChange( )

此方法返回具体的选中状态变化类型,它的返回值在 ItemEvent 类的几个静态常量列举的集合之内: ① ItemEvent.SELECTED : 代表选项被选中。 ② ItemEvent.DESELECTED : 代表选项被放弃不选。

Page 47: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

例 6-10 TestChoice.javaimport java.applet.*;import java.awt.*;import java.awt.event.*;public class TestChoice extends Applet implements ItemListener{

Choice size; Button btn; public void init() {

size = new Choice(); size.add("10"); size.add("14"); size.add("18"); add(size); btn = new Button("效果 "); add(btn); size.addItemListener(this);

}

Page 48: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

public void itemStateChanged(ItemEvent e) {

Choice temp; Font oldF; String s; int si; if(e.getItemSelectable( ) instanceof Choice) {

oldF = btn.getFont();temp = (Choice)(e.getItemSelectable());s = temp.getSelectedItem();si = Integer.parseInt(s);btn.setFont (new Font(oldF.getName(),oldF.getStyle(),si));

} }}

Page 49: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

6.3.5 调整事件( AdjustmentEvent )的处理 AdjustmentEvent 类只包含一个事件—— ADJUST

MENT-VALUE-CHANGED 事件。 与 ItemEvent 事件引发的离散状态变化不同, ADJ

USTMENT-VALUE-CHANGED 是 GUI 组件状态发生连续变化的事件,引发这类事件的具体动作有:

(1) 操纵滚动条 (Scrollbar) 改变其滑块位置。(2) 操纵用户自定义的 Scrollbar 对象的子类组件,改

变其滑块位置。

Page 50: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

AdjustmentEvent 类的主要方法有:

(1) public Adjustable getAdjustable( )

这个方法返回引发状态变化事件的事件源,能够引发状态变化事件的事件源都是实现了 Adjustable 接口的类。

(2) public int getAdjustmentType( )

这个方法返回状态变化事件的状态变化类型,其返回值在 AdjustmentEvent 类的几个静态常量所列举的集合之内。

AdjustmentEvent.BLOCK-DECREMENT : 代表点击滚动条下方引发块状下移的动作。

AdjustmentEvent.BLOCK-INCREMENT : 代表点击滚动条上方引发块状上移的动作。

AdjustmentEvent.TRACK :代表拖动滚动条滑块的动作。

Page 51: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

AdjustmentEvent.UNIT-DECREMENT : 代表点击滚动条下三角按钮引发最小单位下移的动作。

AdjustmentEvent.UNIT-INCREMENT : 代表点击滚动条上三角按钮引发最小单位上移的动作。

通过调用 getAdjustmentType( ) 方法并比较其返回值,就可以得知用户发出的哪种操作引发了哪种连续的状态变动。

(3) public int getValue( )

getValue( ) 方法可以返回调整后滑块对应的最新数值。

Page 52: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

例 6-12 TestSlider.java import java.applet.*;import java.awt.*;import java.awt.event.*;public class TestSlider extends Applet implements AdjustmentListener{ Scrollbar mySlider; TextField sliderValue; public void init() { setLayout(new BorderLayout()); mySlider = new Scrollbar(Scrollbar.HORIZONTAL,0,100,0,Integer.MAX_

VALUE); mySlider.setUnitIncrement(1); mySlider.setBlockIncrement(50); add("South",mySlider); mySlider.addAdjustmentListener(this); sliderValue = new TextField(30); add("Center",sliderValue); }

Page 53: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

public void adjustmentValueChanged(AdjustmentEvent e)

{

int value;

if(e.getAdjustable() == mySlider)

{

value = e.getValue();

sliderValue.setText(new Integer((int)value).toString());

sliderValue.setBackground(new Color(value));

}

}

}

Page 54: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

6.3.6 鼠标事件处理 触发鼠标事件的事件源通常是一个容器,当鼠标进入、离开、在容器中单击鼠标、拖动鼠标等,都会发生鼠标事件。鼠标事件对应的事件类是 MouseEvent 类,主要包含如下方法:

(1)public int getX( )——发生鼠标事件的 X 坐标(2)public int getY( )——发生鼠标事件的 Y 坐标(3)public int getButton ( )—— 返回鼠标事件发生在哪个按键上(4)public int getClickCount ()—— 返回鼠标点击事件的点击次数(5)public boolean isPopupTrigger()——返回鼠标事件是否为弹出菜单的触发器。

Page 55: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

鼠标事件对应的事件监听器有两个:(1)MouseListener (或 MouseAdapter )对应鼠标事件,(2)MouseMotionListener (或 MouseMotionAdapter )对应鼠标

移动事件, MouseListener (或 MouseAdapter )的主要方法 :(1)MouseClicked ( MouseEvent e )单击鼠标时的处理方法(2)MouseEntered ( MouseEvent e )鼠标进入时的处理方法(3)MouseExited ( MouseEvent e ) 鼠标离开时的处理方法(4)MousePressed ( MouseEvent e )鼠标按钮按下时的处理方法(5)MouseReleased ( MouseEvent e )鼠标按钮松开时的处理方

Page 56: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

MouseMotionListener (或 MouseMotionAdapter )的主要方法:

(1)MouseMoved ( MouseEvent e ) 鼠标移动时的处理方法(2)MouseDragged ( MouseEvent e )拖动鼠标时的处理方法 实现鼠标事件的过程:1)注册 MouseListener 监听器 addMouseListener (),当事件

源所在的类已经实现 MouseListener 接口时,参数可用 this ,否则需要创建或继承一个 MouseListener 。

2) 实现 MouseListener 接口的 5个主要方法。 鼠标移动事件的实现与此类似。

Page 57: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

例:鼠标响应 ResponseToMouse .javaimport java.applet.*;import java.awt.*;import java.awt.event.*;public class ResponseToMouse extends Applet

implements MouseListener, MouseMotionListener

{ String s="shubiao "; public void init() { this.addMouseListener(this); this.addMouseMotionListener(this); } public void mouseClicked(MouseEvent e) { if(e.getClickCount()==1) showStatus(" 您在 ("+e.getX()+","+e.getY()+") 单击了鼠标左键。 "); else if(e.getClickCount()==2) showStatus(" 您在 ("+e.getX()+","+e.getY()+")双击了鼠标。 "); }

Page 58: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

public void mouseEntered(MouseEvent e) { showStatus(" 鼠标进入 Applet 。 "); } public void mouseExited(MouseEvent e) { showStatus(" 鼠标离开 Applet 。 "); } public void mousePressed(MouseEvent e) { s=" 您按下了鼠标。。。。。。。 "; repaint(); } public void mouseReleased(MouseEvent e) { s=“ 您松开了鼠标。 "; repaint(); }

} public void mouseMoved(MouseEvent e) { showStatus(" 您移动了鼠标,新位置在 ("+e.getX()+","+e.getY()+") 。 "); } public void mouseDragged(MouseEvent e) { showStatus(" 您拖动了鼠标。 "); }}

Page 59: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

6.3. 7 键盘事件处理 在具有键盘焦点的组件中按下或释放键盘等操作时,

都会发生键盘事件。键盘事件对应的事件类是 KeyEvent 类, Java.awt.event.KeyEvent 主要方法有:

(1)getKeyCode( )— 获得按下或释放的键代码(2)getKeyChar( )— 获得按下或释放的键的字符串 键盘事件对应的事件监听器为: KeyListener 或 KeyAd

apter 。KeyListener 的主要方法:(1)keyPressed(KeyEvent e)——按下键时的处理方法(2)keyReleased(KeyEvent e)——释放键时的处理方法

Page 60: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

import java.awt.BorderLayout;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JTextArea;import javax.swing.JTextField;public class KeyEventDemo extends JFrame { private JTextArea jta; private JTextField jtf; public KeyEventDemo(){ // 创建窗体中的各个组件对象 jta = new JTextArea(); jtf = new JTextField();

Page 61: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

JPanel p1 = new JPanel(); jtf.addKeyListener(new KeyEvents()); // 组装各个组件 this.setTitle("KeyEvent演示程序 "); this.setSize(270, 450); this.setLayout(new BorderLayout()); this.add(jta,BorderLayout.CENTER); p1.setLayout(new BorderLayout()); p1.add(jtf,BorderLayout.CENTER); this.add(p1,BorderLayout.SOUTH); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOS

E); this.setVisible(true); }

Page 62: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

class KeyEvents extends KeyAdapter //KeyEvents 类是内部类 !! { public void keyPressed(KeyEvent e) { String s = " 你按下的键是: " + e.getKeyChar(); s += "\n这个键对应的编码是: " + e.getKeyCode(); jta.setText(s); } public void keyReleased(KeyEvent e) { jtf.setText(""); } } public static void main(String[] args) { new KeyEventDemo(); }}

Page 63: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

Page 64: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

6.3.8 窗口事件处理 有 Window 及其扩展( Frame 、 Dialog)等才能激发窗口事件。窗口事件对应的类为 WindowEvent ,监听器为 WindowListener (或 WindowAdapter ),其主要方法有:

windowOpened ( WindowEvent e )——打开窗口 windowClosed ( WindowEvent e )——关闭窗口 windowClosing( WindowEvent e )—窗口正在被关闭 windowActivated ( WindowEvent e )——激活状态的事件处理

windowDeactivated ( WindowEvent e )——无效状态的事件处理

Page 65: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

WindowEvent 类的主要方法—— public window getWindow (); 返回引发当前事件的具体窗口,与 getSource ()方法返回的是相同的事件引用,但 getSource ()返回类型是 Object ,而 getWindow ()返回的是具体的 Window 对象。

实现窗口事件的操作过程一般用到适配器,步骤:1)注册 WindowListener 监听器 : addWindowListener (),参数用 WindowAdapter ;

2)实现 WindowAdapter 接口的若干方法。

Page 66: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

import java.awt.*; import java.awt.event.*;import javax.swing.JFrame; import javax.swing.JLabel;

public class TestWindowEvent{ public static void main(String[] args) { JFrame frame = new JFrame("WindowEvent 示例 "); frame.setLayout(new BorderLayout()); frame.add(new JLabel(“WindowAdapter已经实现了 WindowListener 接口

中的所有方法 !!"),BorderLayout.CENTER); frame.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.out.println("窗口正在被关闭 "); }}); frame.setSize(600, 600); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setVisible(true); }}

Page 67: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

Page 68: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

6.4.1 面板组件( Panel )( JPanel )• Panel 属于无边框容器,无边框容器包括 Panel 和 A

pplet ,其中 Panel 是 Container 的子类, Applet 是Panel 的子类。

• 创建面板: Panel () // 用默认的布局管理器( FlowLayout ) 创建 面板 Panel ( LayoutManager layout ) // 用指定的布局管理器( FlowLayout )创建面板

6.4 窗口及菜单设计

Page 69: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

6.4.2 框架窗口组件( Frame ) ( JFrame )

Frame 是独立于浏览器的可独立运行的主窗口,通常用于开发桌面应用程序。 Frame拥有边界和标题栏设置,大小、内容可以调整。 Frame 是容器,里面需要加入组件,也可以加入菜单,可以在上面绘图。

• Frame 的创建 Frame ()——创建一个没有窗口标题的窗口框架

Frame ( String )——创建一个指定窗口标题的窗口框架

Page 70: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

• Frame 的主要方法方法 功能void setIconImage(Image ) 设置窗口的图标Image getIconImage( ) 获得窗口的图标MenuBar getMenuBar( ) 获得窗口的菜单栏void setTitle(String ) 设置窗口的标题String getTitle( ) 获得窗口的标题boolean isResizable( ) 如果窗口大小可变返回真值void setMenuBar(MenuBar ) 设置窗口的菜单栏void remove(MenuComponent) 从窗口中去掉指定的菜单栏void dispose( ) 清除窗口对象

Page 71: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

6.4.5 菜单组件 菜单栏( MenuBar ) ( JMenuBar )菜单组件 菜单( Menu ) ( JMenu ) 菜单项( MenuItem ) ( JMenuItem ) 一般菜单栏放置在 Frame窗口中,只要调 用 setMenuBar ()方法即可。

菜单项

菜单

菜单栏

Page 72: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

1. 菜单栏MenuBar

( 1 )创建菜单栏: MenuBar ()( 2 ) MenuBar 的主要方法

void add(Menu) 将指定菜单加入菜单栏

int countMenu( ) 返回菜单栏中的菜单数

Menu getMenu(int) 返回指定位置上的菜单

void remove(int) 删除指定位置上的菜单

void remove(MenuComponent) 删除指定的菜单组件

Page 73: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

2. 菜单 Menu( 1 )用指定标签创建菜单: Menu ( String )( 2 ) Menu 的主要方法

void add(MenuItem) 增加一个菜单项void add(String) 增加一个带指定标签的菜单项

void addSeparator() 加分隔线int countItems( ) 返回菜单的菜单项数int getItem(int) 返回指定位置上的菜单项void remove(int) 删除指定位置上的菜单void remove(MenuComponent) 删除指定的菜单组件

Page 74: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

3. 菜单项 MenuItem

( 1 )用指定标签创建菜单项: MenuItem ( String )( 2 ) MenuItem 的主要方法

void disable( ) 使菜单项无效void enable() 使菜单项有效

void setEnabled(boolean) 设置菜单项是否有效String getLabel( ) 获取菜单项的标签boolean isEnabled () 返回菜单项是否有效void setLabel(String ) 设置菜单项的标签

Page 75: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

4. 子菜单项 CheckboxMenuItem (带勾)( 1 )用指定标签创建一个可选菜单项: CheckboxMenuItem ( String )( 2 )用指定标签和初始状态创建一个可选菜单项: CheckboxMenuItem ( String , boolean )( 3 ) MenuItem 的主要方法

boolean getState( ) 返回子菜单项的状态void setState(boolean ) 设置子菜单项的状态

Page 76: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

5. 快捷菜单 PopupMenu

( 1 )用指定标签创建菜单: PopupMenu ( String )( 2 ) PopupMenu 的主要方法

void show(Component, int, int) 在指定组件的指定位置显示快捷菜单

Page 77: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

import javax.swing.*;

import java.awt.event.*;

import java.awt.*;

class EditWindow extends JFrame implements ActionListener

{ JPopupMenu menu;

JMenuItem itemCopy,itemCut,itemPaste;

JTextArea text;

EditWindow(String s)

{

super(s); setSize(260,270);

setLocation(120,120); setVisible(true);

Page 78: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

menu=new JPopupMenu(); itemCopy=new JMenuItem("拷贝 "); itemCut=new JMenuItem("剪切 "); itemPaste=new JMenuItem("粘贴 "); menu.add(itemCopy); menu.add(itemCut); menu.add(itemPaste); text=new JTextArea(); text.addMouseListener( new MouseAdapter() { public void mousePressed(MouseEvent e) { if(e.ge

tModifiers()==InputEvent.BUTTON3_MASK) { menu.show(text,e.getX(),e.getY()); } } } );

Page 79: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);

Container con=getContentPane();

con.add(new JScrollPane(text),BorderLayout.CENTER);

con.validate();

validate();

itemCopy.addActionListener(this);

itemCut.addActionListener(this);

itemPaste.addActionListener(this);

}

Page 80: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

public void actionPerformed(ActionEvent e) { if(e.getSource()==itemCopy) text.copy(); else if(e.getSource()==itemCut) text.cut(); else if(e.getSource()==itemPaste) text.paste(); } }

public class Example { public static void main(String args[]) { EditWindow win=new EditWindow(“ 下拉菜单

示例 "); } }

Page 81: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

Page 82: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

6.5 图形界面的布局设计

每一个容器组件都有一个默认的布局管理方式,也可以用 setLayout 方法来设置其他布局管理器。一旦确定了布局管理方式,容器组件就可以用 add

方法加入组件。 布局管理器用来确定组件在容器中的位置和大小,

AWT 中定义了布局管理器接口 LayoutManager 的实现类来实现此功能。

Page 83: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

LayoutManager 的实现类: FlowLayout

BorderLayout

GridLayout

GridBagLayout

CardLayout

null6.5.1 FlowLayout 布局管理器FlowLayout 是一种最简单的布局管理,是 Panel

的默认布局。它以流式自左向右、自上而下地放置容器中的组件,其默认方式为居中对齐方式,也可以手工设置左对齐或右对齐。

Page 84: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

• 创建默认的 FlowLayout 布局管理器: FlowLayout ()• 以指定的对齐方式创建: FlowLayout ( int ) • 以指定的对齐方式及间距创建 FlowLayout 布局管理器:

FlowLayout ( int , int , int )

FlowLayout.LEFT FlowLayout.RIGHT FlowLayout.CENTER

对齐方式

组件行间距

组件列间距

Page 85: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

6.5.2 BorderLayout 布局管理器• BorderLayout 是 Frame 和 Dialog 的默认布局。它将整

个容器分为东、西、南、北、中 5 个部分,加入组件时需要指明放置的位置。

创建默认的 BorderLayout 布局管理器: BorderLayout () 以指定的行、列间距创建 BorderLayout 布局管理器: BorderLayout ( int , int )

组件行间距

组件列间距

Page 86: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

BorderLayout 的主要方法int getHgap( ) 返回组件间距

int getVgap( ) 返回列间距

void setHgap(int) 设置组件间距

void setVgap(int) 设置列间距

Page 87: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

6.5.3 GridLayout 布局管理器• GridLayout 布局将容器划分成 m 行 x n 列大小相同

的格子,组件放在格子中。• 创建默认的 GridLayout 布局,所有组件在一行显示: GridLayout ()• 以指定的行数、列数创建 GridLayout 布局: GridLayout ( int , int ) • 以指定的行数、列数、行间距、列间距创建布局: GridLayout ( int , int , int , int )

Page 88: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

GridLayout 的主要方法int getHgap( ) 返回组件间距int getVgap( ) 返回列间距void setHgap(int) 设置组件间距

void setVgap(int) 设置列间距int getRows( ) 获取网格的行数int getColumns( ) 获取网格的列数 void setRows(int) 设置网格的行数void setColumns(int ) 设置网格的列数

Page 89: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

import java.applet.*;import java.awt.*;import java.awt.event.*;public class TestGridLayout extends Applet{ public void init() {

setLayout(new GridLayout(5,6)); //GridLayout 布局策略 5 行 6 列 30网格for(int i=0;i<5;i++)

for(int j=0;j<6;j++){

// if((int)(Math.random()*100)>=0) if((int)(Math.random()*100)>=50)

add(new Button(Integer.toString(i*6+j))); //随机加入按钮 else

add(new Label()); //随机加入空白}

}}

Page 90: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

6.5.4 GridBagLayout 布局管理器• GridBagLayout 布局将容器划分成很多矩形小格子,

每个组件可以占用一个或多个单元,从而可以指定每个组件所占空间的大小

• 创建默认的 GridBagLayout 布局: GridBagLayout () 通过设置和组件有关的 GridContaints 对象的属性来分配每个组件,然后调用 GridBagLayout 的 setContaints

方法将组件与 GridContaints 对象关联,最后将组件加入容器中。

Page 91: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

GridContaints 对象的常用属性( 1 ) gridwidth, gridheight

这两个参数决定组件所占空间单元的行数和列数,默认值为 1 。

( 2 ) fill

当组件显示区域比其尺寸大时,该参数确定怎样重新定义组件大小,其默认值为: GridBagContaints.NORE (不重新定义大小)

还可以为: GridBagContaints.Horizontal (水平方向拉伸填满 )

GridBagContaints.Vertical ( 垂直方向拉伸填满 )

GridBagContaints.BOTH ( 两个方向拉伸填满 )

( 3 ) weightx, weighty 指定分配多余空间的方式

Page 92: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

6.5.5 CardLayout 布局管理器

• CardLayout 布局将容器中的组件象扑克牌一样排列,每次只能显示最上面的一张。

• 创建默认的 CardLayout 布局: CardLayout ()• 以指定的行间距、列间距创建 GridLayout 布局: CardLayout ( int , int ) 将组件(通常是 Panel )以 CardLayout 加入时,需要

指定一个名字,如: add(“ONE”, Panel)

Page 93: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

CardLayout 的主要方法int getHgap( ) 返回组件间距int getVgap( ) 返回列间距

void setHgap(int) 设置组件间距

void setVgap(int) 设置列间距void first( ) 显示第一个加入布局的组件void last( ) 显示最后一个加入布局的组件void next( ) 显示当前组件的下一个组件void previous( ) 显示当前组件的前一个组件

Page 94: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

6.5.6 null 布局管理器• null 布局管理器将主动权交给用户,由用户使

用坐标系统来放置每个组件,即调用组件的 setBounds ()方法来设置位置和大小。

如: this.setLayout(null);

Label L3=new Label(“test”);

L3.setBounds(new Rectangle(108, 2, 98, 37));

add(L3);

x 、 y 坐标、长、宽

Page 95: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

6.6 建立对话框

6.6.1 对话框类 (Dialog) ( JDialog )• Dialog 用来显示或者提示输入信息,与

用户进行交互。• Dialog 是一个容器组件,上面可以放置各类组件。

Page 96: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

Dialog 与 Frame 的区别:( 1 ) Dialog 不能自动实现菜单容器类;( 2 ) Dialog依赖于其他窗口,当所依赖的窗口最小

化时,对话框自动消失;当其所依赖的窗口恢复时,对话框也自动恢复;

( 3 ) Dialog 有模式( model )和非模式两种,模式对话框只让应用程序响应对话框内的事件,而不能响应其他窗体中的事件,非模式对话框可以响应其他窗体中的事件。

Page 97: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

• 对话框组件的创建( 1 ) Dialog ( Frame , boolean )——以指定父窗

体和指定模式创建对话框( 2 ) Dialog ( Frame , String , boolean )——以

指定父窗体、指定标题和指定模式创建对话框

boolean isModel( ) 获取对话框的模式, true=模式Boolean isResizable( ) 如果对话框可变大小,返回 true

void setTitle(String ) 设置对话框的标题String getTitle( ) 获得对话框的标题String paramString() 返回对话框的参数字符串void setSize( ) 设置对话框的大小void setVisible( ) 显示或隐藏对话框

Page 98: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

6.6.2 文件对话框 (FileDialog) ( JFileChooser )

FileDialog 是 Dialog 的子类, 文件对话框主要用于打开和保存文件时让用户选择文件名,一般文件对话框是由操作系统提供的标准对话框。

• 文件对话框的属性变量 ( 1 ) FileDialog.LOAD——打开文件对话框 ( 2 ) FileDialog.SAVE——保存文件对话框

Page 99: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

• 文件对话框的创建( 1 ) FileDialog ( Frame )——创建指定父窗

体的对话框( 2 ) FileDialog ( Frame , String )——创

建指定父窗体和标题的对话框( 3 ) FileDialog ( Frame , String , int )—

—创建指定父窗体、标题和模式的对话框。当模式为 FileDialog.LOAD时即打开文件对话框,当模式为 FileDialog.SAVE时即保存文件对话框。

Page 100: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

• 文件对话框的主要方法

String getDirectory( ) 返回用户选定文件所在的路径

void setDirectory(String )

设置文件的路径

String getFile( ) 返回用户选定文件的名称int getMode () 返回对话框的模式void setFile ( String ) 设置文件名称

Page 101: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

6.6.3 消息对话框 消息对话框是有模式对话框,可以用 javax. swing.

JOptionPane 类的静态方法来创建: public static void showMessageDialog(

Component parentComponent,

String message,

String title,

int messageType)

例: JOptionPane. showMessageDialog ( this," 上课不能睡觉! ",

"警告对话框 ", JOptionPane. WARNING_MESSAGE);

Page 102: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

6.6.4 确认对话框 确认对话框是有模式对话框,可以用 javax. swing.

JOptionPane 类的静态方法来创建: public static int showConfirmDialog(

Component parentComponent,

Object message,

String title,

int optionType)

例: JOptionPane. showConfirmDialog( this,"大家看清楚了吗? ", "确认对话框 ", JOptionPane.YES_NO_OPTION );

Page 103: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

6.6.5 颜色对话框颜色对话框是有模式对话框,可以用 javax. swin

g. JColorChooser 类的静态方法来创建: public static Color showDialog(

Component parentComponent, String title, Color initialColor)

例:

Color newColor=JColorChooser.showDialog(this," 选择颜色 ", Color.red);

Page 104: 第 6 章  AWT/Swing 组件及事件处理

淮海工学院 计算机课程

小结

• 常用 AWT/Swing 组件的属性、方法、可响应的不同事件、使用示例

• Java 的事件处理机制

• 菜单、窗口、对话框的使用

• Java 的布局设计