java AWT教程整理精品文档Word文档格式.docx
- 文档编号:19732658
- 上传时间:2023-01-09
- 格式:DOCX
- 页数:11
- 大小:22.77KB
java AWT教程整理精品文档Word文档格式.docx
《java AWT教程整理精品文档Word文档格式.docx》由会员分享,可在线阅读,更多相关《java AWT教程整理精品文档Word文档格式.docx(11页珍藏版)》请在冰豆网上搜索。
按钮按下,TextField中按Enter键)
AdjustmentEvent(调节事件:
在滚动条上移动滑块以调节数值)
ItemEvent(项目事件:
选择项目,不选择”项目改变”)
TextEvent(文本事件,文本对象改变)
5.2.2事件监听器
每类事件都有对应的事件监听器,监听器是接口,根据动作来定义方法。
例如,与键盘事件KeyEvent相对应的接口是:
publicinterfaceKeyListenerextendsEventListener{
publicvoidkeyPressed(KeyEventev);
publicvoidkeyReleased(KeyEventev);
publicvoidkeyTyped(KeyEventev);
}
注意到在本接口中有三个方法,那么java运行时系统何时调用哪个方法?
其实根据这三个方法的方法名就能够知道应该是什么时候调用哪个方法执行了。
当键盘刚按下去时,将调用keyPressed()方法执行,当键盘抬起来时,将调用keyReleased()方法执行,当键盘敲击一次时,将调用keyTyped()方法执行。
又例如窗口事件接口:
publicinterfaceWindowListenerextendsEventListener{
publicvoidwindowClosing(WindowEvente);
//把退出窗口的语句写在本方法中
publicvoidwindowOpened(WindowEvente);
//窗口打开时调用
publicvoidwindowIconified(WindowEvente);
//窗口图标化时调用
publicvoidwindowDeiconified(WindowEvente);
//窗口非图标化时调用
publicvoidwindowClosed(WindowEvente);
//窗口关闭时调用
publicvoidwindowActivated(WindowEvente);
//窗口激活时调用
publicvoidwindowDeactivated(WindowEvente);
//窗口非激活时调用
}
AWT的组件类中提供注册和注销监听器的方法:
◇注册监听器:
publicvoidadd(listener);
◇注销监听器:
publicvoidremove(listener);
例如Button类:
(查API)
publicclassButtonextendsComponent{
……
publicsynchronizedvoidaddActionListener(ActionListenerl);
publicsynchronizedvoidremoveActionListener(ActionListenerl);
……}
5.2。
3AWT事件及其相应的监听器接口
(1)
3AWT事件及其相应的监听器接口
(2)
例5。
10说明事件处理模型的应用。
例5.10
importjava.awt.*;
importjava.awt。
event.*;
publicclassThreeListenerimplementsMouseMotionListener,MouseListener,WindowListener{
//实现了三个接口
privateFramef;
privateTextFieldtf;
publicstaticvoidmain(Stringargs[])
{
ThreeListenertwo=newThreeListener();
two.go();
}
publicvoidgo(){
f=newFrame(”Threelistenersexample”);
f。
add(newLabel(”Clickanddragthemouse"
),”North”);
tf=newTextField(30);
f.add(tf,"
South"
);
//使用缺省的布局管理器
addMouseMotionListener(this);
//注册监听器MouseMotionListener
addMouseListener(this);
//注册监听器MouseListener
f.addWindowListener(this);
//注册监听器WindowListener
setSize(300,200);
setVisible(true);
}
publicvoidmouseDragged(MouseEvente){
//实现mouseDragged方法
Strings="
Mousedragging:
X=”+e。
getX()+"
Y="
+e。
getY();
tf.setText(s);
publicvoidmouseMoved(MouseEvente){}
//对其不感兴趣的方法可以方法体为空
publicvoidmouseClicked(MouseEvente){}
publicvoidmouseEntered(MouseEvente){
Strings="
Themouseentered"
;
tf.setText(s);
}
publicvoidmouseExited(MouseEvente){
Themousehasleftthebuilding"
tf。
setText(s);
publicvoidmousePressed(MouseEvente){}
publicvoidmouseReleased(MouseEvente){}
publicvoidwindowClosing(WindowEvente){
//为了使窗口能正常关闭,程序正常退出,需要实现windowClosing方法
System。
exit
(1);
}
publicvoidwindowOpened(WindowEvente){}
publicvoidwindowIconified(WindowEvente){}
publicvoidwindowDeiconified(WindowEvente){}
publicvoidwindowClosed(WindowEvente){}
publicvoidwindowActivated(WindowEvente){}
publicvoidwindowDeactivated(WindowEvente){}
}
上例中有如下几个特点:
1.可以声明多个接口,接口之间用逗号隔开。
……implementsMouseMotionListener,MouseListener,WindowListener;
2.可以由同一个对象监听一个事件源上发生的多种事件:
f.addMouseMotionListener(this);
f。
addWindowListener(this);
则对象f上发生的多个事件都将被同一个监听器接收和处理.
3.事件处理者和事件源处在同一个类中。
本例中事件源是Framef,事件处理者是类ThreeListener,其中事件源Framef是类ThreeListener的成员变量.
4.可以通过事件对象获得详细资料,比如本例中就通过事件对象获得了鼠标发生时的坐标值。
publicvoidmouseDragged(MouseEvente){
Strings="
Mousedragging:
X=”+e.getX()+"
Y=”+e。
getY();
tf.setText(s);
Java语言类的层次非常分明,因而只支持单继承,为了实现多重继承的能力,Java用接口来实现,一个类可以实现多个接口,这种机制比多重继承具有更简单、灵活、更强的功能.在AWT中就经常用到声明和实现多个接口。
记住无论实现了几个接口,接口中已定义的方法必须一一实现,如果对某事件不感兴趣,可以不具体实现其方法,而用空的方法体来代替。
但却必须所有方法都要写上。
4事件适配器
Java语言为一些Listener接口提供了适配器(Adapter)类.可以通过继承事件所对应的Adapter类,重写需要方法,无关方法不用实现。
事件适配器为我们提供了一种简单的实现监听器的手段,可以缩短程序代码.但是,由于java的单一继承机制,当需要多种监听器或此类已有父类时,就无法采用事件适配器了.
1.事件适配器--EventAdapter
下例中采用了鼠标适配器:
*;
importjava。
awt.event.*;
publicclassMouseClickHandlerextendsMouseAdaper{
publicvoidmouseClicked(MouseEvente)//只实现需要的方法
{……}
java.awt.event包中定义的事件适配器类包括以下几个:
1.ComponentAdapter(组件适配器)
2.ContainerAdapter(容器适配器)
3.FocusAdapter(焦点适配器)
4.KeyAdapter(键盘适配器)
5.MouseAdapter(鼠标适配器)
6.MouseMotionAdapter(鼠标运动适配器)
7.WindowAdapter(窗口适配器)
2.用内部类实现事件处理
内部类(innerclass)是被定义于另一个类中的类,使用内部类的主要原因是由于:
◇一个内部类的对象可访问外部类的成员方法和变量,包括私有的成员。
◇实现事件监听器时,采用内部类、匿名类编程非常容易实现其功能。
◇编写事件驱动程序,内部类很方便.
因此内部类所能够应用的地方往往是在AWT的事件处理机制中.
例5.11
importjava。
awt.*;
awt。
event.*;
publicclassInnerClass{
privateFramef;
privateTextFieldtf;
publicInnerClass(){
f=newFrame("
Innerclassesexample"
);
tf=newTextField(30);
}
publicvoidilaunchFrame(){
Labellabel=newLabel(”Clickanddragthemouse”);
f。
add(label,BorderLayout。
NORTH);
f.add(tf,BorderLayout.SOUTH);
addMouseMotionListener(newMyMouseMotionListener());
/*参数为内部类对象*/
f.setVisible(true);
}
classMyMouseMotionListenerextendsMouseMotionAdapter{/*内部类开始*/
publicvoidmouseDragged(MouseEvente){
Strings="
Mousedragging:
x="
+e.getX()+"
Y="
tf。
setText(s);
};
publicstaticvoidmain(Stringargs[]){
InnerClassobj=newInnerClass();
obj。
launchFrame();
}
}//内部类结束
}
3.匿名类(AnonymousClass)
当一个内部类的类声名只是在创建此类对象时用了一次,而且要产生的新类需继承于一个已有的父类或实现一个接口,才能考虑用匿名类,由于匿名类本身无名,因此它也就不存在构造方法,它需要显示地调用一个无参的父类的构造方法,并且重写父类的方法.所谓的匿名就是该类连名字都没有,只是显示地调用一个无参的父类的构造方法。
12
importjava.awt.*;
importjava.awt。
publicclassAnonymousClass{
privateFramef;
privateTextFieldtf;
publicAnonymousClass(){
f=newFrame("
tf=newTextField(30);
publicvoidlaunchFrame(){
Labellabel=newLabel("
Clickanddragthemouse"
f.add(label,BorderLayout.NORTH);
f。
add(tf,BorderLayout.SOUTH);
addMouseMotionListener(newMouseMotionAdapter(){//匿名类开始
publicvoidmouseDragged(MouseEvente){
Strings=”Mousedragging:
x=”+e.getX()+"
tf。
}
});
//匿名类结束
f.setSize(300,200);
f.setVisible(true);
}
publicstaticvoidmain(Stringargs[]){
AnonymousClassobj=newAnonymousClass();
obj.launchFrame();
其实大家仔细分析一下,例5.11和5.12实现的都是完全一样的功能,只不过采取的方式不同.5。
11中的事件处理类是一个内部类,而5。
12的事件处理类是匿名类,可以说从类的关系来说是越来越不清楚,但是程序也越来越简练。
熟悉这两种方式也十分有助于大家编写图形界面的程序。
5.3AWT组件库
(1)
本节从应用的角度进一步介绍AWT的一些组件,目的使大家加深对AWT的理解,掌握如何用各种组件构造图形化用户界面,学会控制组件的颜色和字体。
下面是一些常用的组件的介绍:
1.按钮(Button)
按钮是最常用的一个组件,其构造方法是:
Buttonb=newButton(”Quit"
当按钮被点击后,会产生ActionEvent事件,需ActionListener接口进行监听和处理事件。
ActionEvent的对象调用getActionCommand()方法可以得到按钮的标识名,缺省按钮名为label。
用setActionCommand()可以为按钮设置组件标识符。
2。
复选框(Checkbox)
复选框提供简单的”on/off”开关,旁边显示文本标签。
构造方法如下:
setLayout(newGridLayout(3,1));
add(newCheckbox("
one”,null,true));
add(newCheckbox(”two"
));
three"
复选框用ItemListener来监听ItemEvent事件,当复选框状态改变时用getStateChange()获取当前状态。
使用getItem()获得被修改复选框的字符串对象。
例5.13
classHandlerimplementsItemListener{
publicvoiditemStateChanged(ItemEventev){
Stringstate=”deselected"
;
if(ev。
getStateChange()==ItemEvent.SELECTED){
state=”selected"
System.out。
println(ev.getItem()+"
"
+state);
}
3.复选框组(CheckboxGroup)
使用复选框组,可以实现单选框的功能。
方法如下:
setLayout(newGridLayout(3,1));
CheckboxGroupcbg=newCheckboxGroup();
one"
,cbg,true));
two"
,cbg,false));
5。
3AWT组件库
(2)
4。
下拉式菜单(Choice)
下拉式菜单每次只能选择其中的一项,它能够节省显示空间,适用于大量选项.
ChoiceColorchooser=newChoice();
Colorchooser.add(”Green”);
Colorchooser.add(”Red"
Colorchooser.add("
Blue”);
Choice用ItemListener接口来进行监听
5.Canvas
一个应用程序必须继承Canvas类才能获得有用的功能,比如创建一个自定义组件。
如果想在画布上完成一些图形处理,则Canvas类中的paint()方法必须被重写.
Canvas组件监听各种鼠标,键盘事件。
当在Canvas组件中输入字符时,必须先调用requestFocus()方法.
14
*;
event.*;
util。
publicclassMyCanvasimplementsKeyListener,MouseL
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java AWT教程整理精品文档 AWT 教程 整理 精品 文档