Upload
kenneth-garza
View
138
Download
0
Embed Size (px)
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
Citation preview
淮海工学院 计算机课程
第 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 )
使用图形的方式借助菜单、按钮等标准界面元素和鼠标操作,帮助用户和计算机之间进行交互。
( 2) AWT——抽象窗口工具集 (abstract window toolkit)
Java 中用来生成图形用户界面的基础类库是 java.awt 包,它是 Java 基本包中最大的一个,定义了所有 GUI组件类,以及其它用于构造图形界面的类。 Sun公司在 JDK1.0 中就提供了 AWT。
为了实现跨平台特性, AWT类库中的各种操作被定义成在一个并不存在的“抽象窗口”中进行。
淮海工学院 计算机课程
AWT 组件的类层次• Component 组件是所有 AWT 组件的基类,提
供了基本的显示和事件处理特征。
淮海工学院 计算机课程
( 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 按钮只显示文本。
淮海工学院 计算机课程
( 4)设计图形界面的步骤
1 )定义最外层的容器 (Frame,JFrame), 设定布局管理方式 ;
2) 在外层容器中依次加入小容器 (Panel 等 )和标准组件 ;
3) 设计图形界面元素的物理外观 (颜色 ,字体 ,对齐方式等、位置 );
4) 定义界面元素对不同事件 (如鼠标点击等 )的响应,实现界面与用户的交互功能 .
淮海工学院 计算机课程
6.1.2 图形用户界面元素分三类: 容器、控制组件、用户自定义成分。( 1)容器 是用来组织其他界面成分和元素的单元,如窗体( Fram
e 、 JFrame )、面板 (Panel 、 JPanel) 等。主要作用 : 用来容纳、排列其它界面元素。 容器的特点: (1) 可以容纳其他界面元素 ;(2) 通过设置布局方式,来决定
其它界面元素的排列方式。 思考:作为最外层容器的 Frame 和 JFrame ,在其中加
入其它界面元素时有何区别? (理解 JFrame 的 ContentPane)
淮海工学院 计算机课程
( 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(“ 你按下了显示按钮 !!”);
}
淮海工学院 计算机课程
6.1.3 用户自定义图形界面成分 自定义成分是指 : 利用 Java 类库中的类及其方法来绘制符合用户特定要求的图形界面成分,也可以将已经存在的图形、动画等加载到当前程序中来。
(1) 绘制图形 (线段、矩形、圆、多边形、弧形 ) Graphics 类——绘制直线、矩形、多边形、圆等。 Point 类——表示一个象素点 Dimension 类——表示宽和高 Rectangle 类——表示一个矩形 Polygon 类——表示一个多边形 Color 类——表示颜色
淮海工学院 计算机课程
(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 是按钮对象
淮海工学院 计算机课程
(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比特代表蓝色的比例。
淮海工学院 计算机课程
例:• 创建自己的颜色: 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(); // 取得前景颜色
淮海工学院 计算机课程
(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 地址。
淮海工学院 计算机课程
例:图形用户界面—自定义成分示例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" );
}
淮海工学院 计算机课程
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 ); // 显示图片
}}
淮海工学院 计算机课程
(5) 实现动画效果 用 Java 实现动画的原理与放映动画片类似,取若干相关的图象,按顺序、连续地在屏幕上先显示,后擦除,循环往复就可以获得动画的效果。
课外实践题: 编写 Java Applet ,实现将若干幅图片按一定的时间间隔 ( 如 1秒 ) ,交替显示 .
(第 1幅第 2幅 … 第 10幅第 1幅… )
淮海工学院 计算机课程
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) : 设置标签对齐方式。
淮海工学院 计算机课程
文本输入框( 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( ) 返回文本
淮海工学院 计算机课程
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();
淮海工学院 计算机课程
多行文本组件( 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) 设置文本框中的文本
淮海工学院 计算机课程
按钮( Button ) ( JButton )
按钮的构造函数: Button ( String text ) // 创建一个带有文本信息的按钮
如果是 JButton ,上面不仅可以显示文字,还可以显示图标。 (Swing 组件比 AWT 组件更生动。 )
淮海工学院 计算机课程
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) …. }
淮海工学院 计算机课程
复选框组件( Checkbox )( JCheckbox )• 复选框的构造函数:Checkbox ( String ) // 带显示标签Checkbox ( String,boolean ) // 带显示标签和初始状
态• true 表示被选中, false 表示未选中。
主要方法 功能void getLabel( ) 返回复选框的显示标签
boolean getState( ) 返回复选框的状态
void setState(boolean ) 设置复选框的状态
void setLabel(String ) 设置复选框的显示标签
淮海工学院 计算机课程
Checkbox 对事件的响应事件类型 单击时,发生选择事件 (ItemEvent)
注册事件监听者 addItemListener( 监听者对象 )
监听者对象要实现的接口 :
ItemListener
接口中的方法 public void itemStateChanged (ItemEvent e)
方法体中判断事件源 e.getItemSelectable()
取得事件源 ( 复选框 )的状态
boolean b=((Checkbox)e. getItemSelectable()). getState();
淮海工学院 计算机课程
单选按钮组件 ( JRadioButton )
• 单选钮组件要先用 CheckboxGroup ()方法构造一个 CheckboxGroup 对象,再用 Checkbox
( String , CheckboxGroup , boolean )方法创建 Checkbox 对象,如果不同的 Checkbox 在创建时属于同一个 CheckboxGroup ,则组成单选按钮组 ( 互斥选择 ) 。
• 单选钮组件的状态属性,为 true/false ,表示选中或未选中。
淮海工学院 计算机课程
单选按钮组件 CheckboxGroup 对事件的响应
• CheckboxGroup 类不是 java.awt.* 包中的类,它是 Object 的直接子类,所以按钮组不能响应事件 ;
• 单选按钮组中的每个单选按钮( CheckBo
x )可以响应 ItemEvent 类的事件。
淮海工学院 计算机课程
组合框 (Choice) ( JComboBox )
淮海工学院 计算机课程
创建组合框:
ChoiceChoice (() // 创建组合框
void add (String) 向组合框中加入一个选项int countItems( ) 返回组合框中的条目数int getSelectedIndex( ) 返回被选中的项的序号String getItem(int ) 返回指定位置的选项信息void removeAll( ) 删除所有选项void remove(int) 删除指定位置的选项void insert(String ,int) 在指定位置加入一个选项void select(String) 选择指定信息的选项
淮海工学院 计算机课程
组合框( Choice )对事件的响应事件类型 单击某个选项时,引发选择事件 ItemEvent
注册监听器 addItemListener( 监听器对象 )
监听器对象要实现的接口
ItemListener
接口中的方法 public void itemStateChanged
(ItemEvent e)
方法体中要获取事件源 e.getItemSelectable()
获取被选中的选项内容 String selectedItem = ((Choice)e.getItemSelecta
ble( )).getSelectedItem( );
淮海工学院 计算机课程
下拉列表组件( List ) ( JList )
淮海工学院 计算机课程
创建列表: 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) 选择指定字符串的选项
淮海工学院 计算机课程
列表组件( 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( );
淮海工学院 计算机课程
滚动条组件( Scrollbar ) ( JScrollbar )
淮海工学院 计算机课程
滚动条的构造函数:Scrollbar () // 垂直滚动条
Scrollbar ( int ) // 指定方向的滚动条 Scrollbar .
HORIZONTAL ( 水平 ) Scrollbar .VERTICAL ( 垂直 )
Scrollbar ( int, int, int, int,int ) // 指定方向、初始值、滚动块大小、最小值、最大值
void setMaximum(int) 设置滚动条的最大值
void setOrientation(int) 设置滚动条的方向void setValue(int) 设置滚动条的当前值
淮海工学院 计算机课程
滚动条组件( Scrollbar )对事件的响应
事件类型 改变滑块位置时,引发调整事件 AdjustmentEvent
注册事件监听器 addAdjustmentListener( );
实现接口 AdjustmentListener
接口中的方法 public void adjustmentValueChanged(AdjustmentEvent e)
获取事件源 e.getAdjustable( )
获取滚动后的数值 e.getValue( )
淮海工学院 计算机课程
6.3 Java 的事件处理6.3.1 基本概念 事件处理三要素:事件源、事件类型、事件监听器 事件源:图形用户界面中引发事件的组件。
事件源可以注册监听器,并向其发送事件对象。 事件类型: Java 的所有事件都封装成一个类,这些事件类定义在 java.awt.event 包中,所有的事件类都继承了 AWTEvent 类的一个方法 getSource() ,返回引发事件的事件源对象。
事件监听器:不同类型的事件发生后,由事件监听器接收事件并调用相应的事件处理方法。
淮海工学院 计算机课程
Java 的事件委托模型
淮海工学院 计算机课程
AWTEvent 类体系结构图AWTEvent
AdjustmentEvent
WindowEventContainerEvent
FocusEvent InputEvent PaintEvent
KeyEventMouseEvent
ActionEvent
ItemEventComponentEvent
TextEvent
淮海工学院 计算机课程
事件适配器( Adapter ) :(1) 事件源 .add***Listener( 监听器对象 );(2) 监听器对象所在的类要实现 ***Listener 接口,并实现接口
中的抽象方法。如果接口中的抽象方法有 2到多个,如 MouseListener , MouseMotionListener , KeyListener,WindowListener 等。则系统定义了 ***Adapter ,让 ***Adapter 实现相应 ***Listener 接口;
(3) 有了 Adapter (适配器),可以定义其子类(重写需要的方法),然后让其子类的对象充当监听器对象。
淮海工学院 计算机课程
6.3.2 动作事件 (ActionEvent ) 的处理 能够触发动作事件的动作有:
点击按纽 (Button) 双击一个列表框 (List) 中的选项 选择菜单项 (MenuItem) 在文本框 (TextField/TextArea) 中敲回车
动作事件对应的事件类是 ActionEvent 类,其主要方法有: (1) public String getActionCommand( )—获得引发
事件的项目信息 例: public void actionPerformed(ActionEvent e)
{ if ( e.getActionCommand( ) == ″ 命令名″ )
…}
淮海工学院 计算机课程
(2) public int getModifiers( )—当动作是同时与功能键配合使用时,获得引发事件的组合键信息,动作事件对应的事件监听器是 ActionListener ,
其主要方法是: actionPerformed(ActionEvent e)实现动作事件的操作过程是: 1 )注册动作监听器 addActionListener( 监听器对象 ) 2) 监听器实现 ActionListener 接口的方法: ac
tionPerformed(ActionEvent e)
淮海工学院 计算机课程
6.3.3 文本事件( TextEvent )的处理
TextEvent 类只包含一个事件,即代表文本框中文本变化的事件 TextValueChanged 。在文本框中删除字符、改变字符、键入字符都将引发这个事件。
引发文本事件的基本组件有两种:单行文本框 Text
Field 和多行文本框 TextArea ,它们都是 TextComp
onent 的子类。
淮海工学院 计算机课程
例 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);
}
淮海工学院 计算机课程
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(""); }}
淮海工学院 计算机课程
6.3.4 选择事件( ItemEvent )的处理• ItemEvent 类只包含一个事件,即代表选择项的选中
状态发生变化的事件 ITEM-STATE-CHANGED 。• 引发这类事件的动作包括:(1) 改变列表类 List 对象选项的选中或不选中状态。(2) 改变下拉列表类 Choice 对象选项的选中或不选中状态。(3) 改变复选按钮类 Checkbox 对象的选中或不选中状态。(4) 改变检测盒菜单项 CheckboxMenuItem 对象的选中或不
选中状态。
淮海工学院 计算机课程
ItemEvent 类的主要方法有:(1) public ItemSelectable getItemSelectable( )
此方法返回引发选中状态变化事件的事件源,包括 List对象、 Choice 对象、 Checkbox 对象等。
(2) public Object getItem( )
此方法返回引发选中状态变化事件的具体选择项,例如用户选中的 Choice 中的具体 item ,通过调用这个方法可以知道用户选中了哪个选项。
(3) public int getStateChange( )
此方法返回具体的选中状态变化类型,它的返回值在 ItemEvent 类的几个静态常量列举的集合之内: ① ItemEvent.SELECTED : 代表选项被选中。 ② ItemEvent.DESELECTED : 代表选项被放弃不选。
淮海工学院 计算机课程
例 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);
}
淮海工学院 计算机课程
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));
} }}
淮海工学院 计算机课程
6.3.5 调整事件( AdjustmentEvent )的处理 AdjustmentEvent 类只包含一个事件—— ADJUST
MENT-VALUE-CHANGED 事件。 与 ItemEvent 事件引发的离散状态变化不同, ADJ
USTMENT-VALUE-CHANGED 是 GUI 组件状态发生连续变化的事件,引发这类事件的具体动作有:
(1) 操纵滚动条 (Scrollbar) 改变其滑块位置。(2) 操纵用户自定义的 Scrollbar 对象的子类组件,改
变其滑块位置。
淮海工学院 计算机课程
AdjustmentEvent 类的主要方法有:
(1) public Adjustable getAdjustable( )
这个方法返回引发状态变化事件的事件源,能够引发状态变化事件的事件源都是实现了 Adjustable 接口的类。
(2) public int getAdjustmentType( )
这个方法返回状态变化事件的状态变化类型,其返回值在 AdjustmentEvent 类的几个静态常量所列举的集合之内。
AdjustmentEvent.BLOCK-DECREMENT : 代表点击滚动条下方引发块状下移的动作。
AdjustmentEvent.BLOCK-INCREMENT : 代表点击滚动条上方引发块状上移的动作。
AdjustmentEvent.TRACK :代表拖动滚动条滑块的动作。
淮海工学院 计算机课程
AdjustmentEvent.UNIT-DECREMENT : 代表点击滚动条下三角按钮引发最小单位下移的动作。
AdjustmentEvent.UNIT-INCREMENT : 代表点击滚动条上三角按钮引发最小单位上移的动作。
通过调用 getAdjustmentType( ) 方法并比较其返回值,就可以得知用户发出的哪种操作引发了哪种连续的状态变动。
(3) public int getValue( )
getValue( ) 方法可以返回调整后滑块对应的最新数值。
淮海工学院 计算机课程
例 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); }
淮海工学院 计算机课程
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));
}
}
}
淮海工学院 计算机课程
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()——返回鼠标事件是否为弹出菜单的触发器。
淮海工学院 计算机课程
鼠标事件对应的事件监听器有两个:(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 )鼠标按钮松开时的处理方
法
淮海工学院 计算机课程
MouseMotionListener (或 MouseMotionAdapter )的主要方法:
(1)MouseMoved ( MouseEvent e ) 鼠标移动时的处理方法(2)MouseDragged ( MouseEvent e )拖动鼠标时的处理方法 实现鼠标事件的过程:1)注册 MouseListener 监听器 addMouseListener (),当事件
源所在的类已经实现 MouseListener 接口时,参数可用 this ,否则需要创建或继承一个 MouseListener 。
2) 实现 MouseListener 接口的 5个主要方法。 鼠标移动事件的实现与此类似。
淮海工学院 计算机课程
例:鼠标响应 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()+")双击了鼠标。 "); }
淮海工学院 计算机课程
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(" 您拖动了鼠标。 "); }}
淮海工学院 计算机课程
6.3. 7 键盘事件处理 在具有键盘焦点的组件中按下或释放键盘等操作时,
都会发生键盘事件。键盘事件对应的事件类是 KeyEvent 类, Java.awt.event.KeyEvent 主要方法有:
(1)getKeyCode( )— 获得按下或释放的键代码(2)getKeyChar( )— 获得按下或释放的键的字符串 键盘事件对应的事件监听器为: KeyListener 或 KeyAd
apter 。KeyListener 的主要方法:(1)keyPressed(KeyEvent e)——按下键时的处理方法(2)keyReleased(KeyEvent e)——释放键时的处理方法
淮海工学院 计算机课程
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();
淮海工学院 计算机课程
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); }
淮海工学院 计算机课程
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(); }}
淮海工学院 计算机课程
淮海工学院 计算机课程
6.3.8 窗口事件处理 有 Window 及其扩展( Frame 、 Dialog)等才能激发窗口事件。窗口事件对应的类为 WindowEvent ,监听器为 WindowListener (或 WindowAdapter ),其主要方法有:
windowOpened ( WindowEvent e )——打开窗口 windowClosed ( WindowEvent e )——关闭窗口 windowClosing( WindowEvent e )—窗口正在被关闭 windowActivated ( WindowEvent e )——激活状态的事件处理
windowDeactivated ( WindowEvent e )——无效状态的事件处理
淮海工学院 计算机课程
WindowEvent 类的主要方法—— public window getWindow (); 返回引发当前事件的具体窗口,与 getSource ()方法返回的是相同的事件引用,但 getSource ()返回类型是 Object ,而 getWindow ()返回的是具体的 Window 对象。
实现窗口事件的操作过程一般用到适配器,步骤:1)注册 WindowListener 监听器 : addWindowListener (),参数用 WindowAdapter ;
2)实现 WindowAdapter 接口的若干方法。
淮海工学院 计算机课程
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); }}
淮海工学院 计算机课程
淮海工学院 计算机课程
6.4.1 面板组件( Panel )( JPanel )• Panel 属于无边框容器,无边框容器包括 Panel 和 A
pplet ,其中 Panel 是 Container 的子类, Applet 是Panel 的子类。
• 创建面板: Panel () // 用默认的布局管理器( FlowLayout ) 创建 面板 Panel ( LayoutManager layout ) // 用指定的布局管理器( FlowLayout )创建面板
6.4 窗口及菜单设计
淮海工学院 计算机课程
6.4.2 框架窗口组件( Frame ) ( JFrame )
Frame 是独立于浏览器的可独立运行的主窗口,通常用于开发桌面应用程序。 Frame拥有边界和标题栏设置,大小、内容可以调整。 Frame 是容器,里面需要加入组件,也可以加入菜单,可以在上面绘图。
• Frame 的创建 Frame ()——创建一个没有窗口标题的窗口框架
Frame ( String )——创建一个指定窗口标题的窗口框架
淮海工学院 计算机课程
• Frame 的主要方法方法 功能void setIconImage(Image ) 设置窗口的图标Image getIconImage( ) 获得窗口的图标MenuBar getMenuBar( ) 获得窗口的菜单栏void setTitle(String ) 设置窗口的标题String getTitle( ) 获得窗口的标题boolean isResizable( ) 如果窗口大小可变返回真值void setMenuBar(MenuBar ) 设置窗口的菜单栏void remove(MenuComponent) 从窗口中去掉指定的菜单栏void dispose( ) 清除窗口对象
淮海工学院 计算机课程
6.4.5 菜单组件 菜单栏( MenuBar ) ( JMenuBar )菜单组件 菜单( Menu ) ( JMenu ) 菜单项( MenuItem ) ( JMenuItem ) 一般菜单栏放置在 Frame窗口中,只要调 用 setMenuBar ()方法即可。
菜单项
菜单
菜单栏
淮海工学院 计算机课程
1. 菜单栏MenuBar
( 1 )创建菜单栏: MenuBar ()( 2 ) MenuBar 的主要方法
void add(Menu) 将指定菜单加入菜单栏
int countMenu( ) 返回菜单栏中的菜单数
Menu getMenu(int) 返回指定位置上的菜单
void remove(int) 删除指定位置上的菜单
void remove(MenuComponent) 删除指定的菜单组件
淮海工学院 计算机课程
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) 删除指定的菜单组件
淮海工学院 计算机课程
3. 菜单项 MenuItem
( 1 )用指定标签创建菜单项: MenuItem ( String )( 2 ) MenuItem 的主要方法
void disable( ) 使菜单项无效void enable() 使菜单项有效
void setEnabled(boolean) 设置菜单项是否有效String getLabel( ) 获取菜单项的标签boolean isEnabled () 返回菜单项是否有效void setLabel(String ) 设置菜单项的标签
淮海工学院 计算机课程
4. 子菜单项 CheckboxMenuItem (带勾)( 1 )用指定标签创建一个可选菜单项: CheckboxMenuItem ( String )( 2 )用指定标签和初始状态创建一个可选菜单项: CheckboxMenuItem ( String , boolean )( 3 ) MenuItem 的主要方法
boolean getState( ) 返回子菜单项的状态void setState(boolean ) 设置子菜单项的状态
淮海工学院 计算机课程
5. 快捷菜单 PopupMenu
( 1 )用指定标签创建菜单: PopupMenu ( String )( 2 ) PopupMenu 的主要方法
void show(Component, int, int) 在指定组件的指定位置显示快捷菜单
淮海工学院 计算机课程
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);
淮海工学院 计算机课程
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()); } } } );
淮海工学院 计算机课程
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);
}
淮海工学院 计算机课程
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(“ 下拉菜单
示例 "); } }
淮海工学院 计算机课程
淮海工学院 计算机课程
6.5 图形界面的布局设计
每一个容器组件都有一个默认的布局管理方式,也可以用 setLayout 方法来设置其他布局管理器。一旦确定了布局管理方式,容器组件就可以用 add
方法加入组件。 布局管理器用来确定组件在容器中的位置和大小,
AWT 中定义了布局管理器接口 LayoutManager 的实现类来实现此功能。
淮海工学院 计算机课程
LayoutManager 的实现类: FlowLayout
BorderLayout
GridLayout
GridBagLayout
CardLayout
null6.5.1 FlowLayout 布局管理器FlowLayout 是一种最简单的布局管理,是 Panel
的默认布局。它以流式自左向右、自上而下地放置容器中的组件,其默认方式为居中对齐方式,也可以手工设置左对齐或右对齐。
淮海工学院 计算机课程
• 创建默认的 FlowLayout 布局管理器: FlowLayout ()• 以指定的对齐方式创建: FlowLayout ( int ) • 以指定的对齐方式及间距创建 FlowLayout 布局管理器:
FlowLayout ( int , int , int )
FlowLayout.LEFT FlowLayout.RIGHT FlowLayout.CENTER
对齐方式
组件行间距
组件列间距
淮海工学院 计算机课程
6.5.2 BorderLayout 布局管理器• BorderLayout 是 Frame 和 Dialog 的默认布局。它将整
个容器分为东、西、南、北、中 5 个部分,加入组件时需要指明放置的位置。
创建默认的 BorderLayout 布局管理器: BorderLayout () 以指定的行、列间距创建 BorderLayout 布局管理器: BorderLayout ( int , int )
组件行间距
组件列间距
淮海工学院 计算机课程
BorderLayout 的主要方法int getHgap( ) 返回组件间距
int getVgap( ) 返回列间距
void setHgap(int) 设置组件间距
void setVgap(int) 设置列间距
淮海工学院 计算机课程
6.5.3 GridLayout 布局管理器• GridLayout 布局将容器划分成 m 行 x n 列大小相同
的格子,组件放在格子中。• 创建默认的 GridLayout 布局,所有组件在一行显示: GridLayout ()• 以指定的行数、列数创建 GridLayout 布局: GridLayout ( int , int ) • 以指定的行数、列数、行间距、列间距创建布局: GridLayout ( int , int , int , int )
淮海工学院 计算机课程
GridLayout 的主要方法int getHgap( ) 返回组件间距int getVgap( ) 返回列间距void setHgap(int) 设置组件间距
void setVgap(int) 设置列间距int getRows( ) 获取网格的行数int getColumns( ) 获取网格的列数 void setRows(int) 设置网格的行数void setColumns(int ) 设置网格的列数
淮海工学院 计算机课程
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()); //随机加入空白}
}}
淮海工学院 计算机课程
6.5.4 GridBagLayout 布局管理器• GridBagLayout 布局将容器划分成很多矩形小格子,
每个组件可以占用一个或多个单元,从而可以指定每个组件所占空间的大小
• 创建默认的 GridBagLayout 布局: GridBagLayout () 通过设置和组件有关的 GridContaints 对象的属性来分配每个组件,然后调用 GridBagLayout 的 setContaints
方法将组件与 GridContaints 对象关联,最后将组件加入容器中。
淮海工学院 计算机课程
GridContaints 对象的常用属性( 1 ) gridwidth, gridheight
这两个参数决定组件所占空间单元的行数和列数,默认值为 1 。
( 2 ) fill
当组件显示区域比其尺寸大时,该参数确定怎样重新定义组件大小,其默认值为: GridBagContaints.NORE (不重新定义大小)
还可以为: GridBagContaints.Horizontal (水平方向拉伸填满 )
GridBagContaints.Vertical ( 垂直方向拉伸填满 )
GridBagContaints.BOTH ( 两个方向拉伸填满 )
( 3 ) weightx, weighty 指定分配多余空间的方式
淮海工学院 计算机课程
6.5.5 CardLayout 布局管理器
• CardLayout 布局将容器中的组件象扑克牌一样排列,每次只能显示最上面的一张。
• 创建默认的 CardLayout 布局: CardLayout ()• 以指定的行间距、列间距创建 GridLayout 布局: CardLayout ( int , int ) 将组件(通常是 Panel )以 CardLayout 加入时,需要
指定一个名字,如: add(“ONE”, Panel)
淮海工学院 计算机课程
CardLayout 的主要方法int getHgap( ) 返回组件间距int getVgap( ) 返回列间距
void setHgap(int) 设置组件间距
void setVgap(int) 设置列间距void first( ) 显示第一个加入布局的组件void last( ) 显示最后一个加入布局的组件void next( ) 显示当前组件的下一个组件void previous( ) 显示当前组件的前一个组件
淮海工学院 计算机课程
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 坐标、长、宽
淮海工学院 计算机课程
6.6 建立对话框
6.6.1 对话框类 (Dialog) ( JDialog )• Dialog 用来显示或者提示输入信息,与
用户进行交互。• Dialog 是一个容器组件,上面可以放置各类组件。
淮海工学院 计算机课程
Dialog 与 Frame 的区别:( 1 ) Dialog 不能自动实现菜单容器类;( 2 ) Dialog依赖于其他窗口,当所依赖的窗口最小
化时,对话框自动消失;当其所依赖的窗口恢复时,对话框也自动恢复;
( 3 ) Dialog 有模式( model )和非模式两种,模式对话框只让应用程序响应对话框内的事件,而不能响应其他窗体中的事件,非模式对话框可以响应其他窗体中的事件。
淮海工学院 计算机课程
• 对话框组件的创建( 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( ) 显示或隐藏对话框
淮海工学院 计算机课程
6.6.2 文件对话框 (FileDialog) ( JFileChooser )
FileDialog 是 Dialog 的子类, 文件对话框主要用于打开和保存文件时让用户选择文件名,一般文件对话框是由操作系统提供的标准对话框。
• 文件对话框的属性变量 ( 1 ) FileDialog.LOAD——打开文件对话框 ( 2 ) FileDialog.SAVE——保存文件对话框
淮海工学院 计算机课程
• 文件对话框的创建( 1 ) FileDialog ( Frame )——创建指定父窗
体的对话框( 2 ) FileDialog ( Frame , String )——创
建指定父窗体和标题的对话框( 3 ) FileDialog ( Frame , String , int )—
—创建指定父窗体、标题和模式的对话框。当模式为 FileDialog.LOAD时即打开文件对话框,当模式为 FileDialog.SAVE时即保存文件对话框。
淮海工学院 计算机课程
• 文件对话框的主要方法
String getDirectory( ) 返回用户选定文件所在的路径
void setDirectory(String )
设置文件的路径
String getFile( ) 返回用户选定文件的名称int getMode () 返回对话框的模式void setFile ( String ) 设置文件名称
淮海工学院 计算机课程
6.6.3 消息对话框 消息对话框是有模式对话框,可以用 javax. swing.
JOptionPane 类的静态方法来创建: public static void showMessageDialog(
Component parentComponent,
String message,
String title,
int messageType)
例: JOptionPane. showMessageDialog ( this," 上课不能睡觉! ",
"警告对话框 ", JOptionPane. WARNING_MESSAGE);
淮海工学院 计算机课程
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 );
淮海工学院 计算机课程
6.6.5 颜色对话框颜色对话框是有模式对话框,可以用 javax. swin
g. JColorChooser 类的静态方法来创建: public static Color showDialog(
Component parentComponent, String title, Color initialColor)
例:
Color newColor=JColorChooser.showDialog(this," 选择颜色 ", Color.red);
淮海工学院 计算机课程
小结
• 常用 AWT/Swing 组件的属性、方法、可响应的不同事件、使用示例
• Java 的事件处理机制
• 菜单、窗口、对话框的使用
• Java 的布局设计