第11章 图形用户界面设计new.ppt_第1页
第11章 图形用户界面设计new.ppt_第2页
第11章 图形用户界面设计new.ppt_第3页
第11章 图形用户界面设计new.ppt_第4页
第11章 图形用户界面设计new.ppt_第5页
免费预览已结束,剩余151页可下载查看

下载本文档

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

文档简介

第十一章,图形用户界面设计,1几种布局管理器的使用,构造复杂布局。2事件模型,AWT事件及其相应的监听器接口。3.各种AWT组件(按钮、复选框、复选框组、选择框、画布、标签和文本域)常用属性和方法的掌握4.各种AWT组件(列表、框架、面板和各种对话框)常用属性和方法的掌握,难重点,图形用户界面设计,11.1AWT组件概述11.2布局管理11.3事件处理,11.1AWT组件概述,早期的JDK版本中提供了Java抽象窗口工具集(AbstractWindowToolkit,AWT),其目的是为程序员创建图形用户界面提供支持。AWT组件定义在java.awt包中,包括组件类、组件布局类等。,Java.awt的继承关系,1组件,组件(component)是构成图形用户界面的基本成分和核心元素。组件类(Component)是一个抽象类,是AWT组件类层次结构的根类,实际使用的组件都是Component类的子类。Component类提供对组件操作的通用方法,包括设置组件位置、设置组件大小、设置组件字体、响应鼠标或键盘事件、组件重绘等。,2容器,容器(container)是一种特殊组件,它能容纳其他组件。它在可视区域内显示其它组件。容器是组件,在容器之中还可以放置其它容器,可以使用多层容器构成富于变化的界面。,3窗口与面板,容器有2种:窗口(window)和面板(panel)。窗口可独立存在,可被移动,也可被最大化和最小化,有标题栏、边框,可添加菜单栏。面板不能独立存在,必须包含在另一个容器中。面板没有标题,没有边框,不可添加菜单栏。一个窗口可以包含多个面板,一个面板也可以包含另一个面板,但面板不能包含窗口。窗口类Window和面板类Panel都是容器类Container的子类。,4框架与对话框,窗口类Window主要有2个子类:框架类(Frame)和对话框类(Dialog)。,框架(Frame),框架(frame)是一种带标题栏并且可以改变大小的窗口。应用程序中,使用框架作为容器,在框架中放置组件。框架类在实例化时默认是最小化的、不可见的,必须通过setSize()方法设置框架大小,通过setVisible(true)方法使框架可见。,Frame的构造方法,Frame的成员方法,对话框(dialog),对话框(dialog)也是一种可移动的窗口,它比框架简单,没有太多的控制元素,如最大化按钮、状态栏等。对话框不能作为应用程序的主窗口,它依赖于一个框架窗口而存在,当框架窗口关闭时,对话框也关闭。对话框类Dialog的构造方法必须声明对话框所依赖的框架窗口。,例-创建窗口,importjava.awt.*;classFrmAppstaticFramefra=newFrame(FrmApp);publicstaticvoidmain(Stringargs)fra.setSize(250,150);fra.setLocation(100,200);fra.setVisible(true);System.out.println(State:+fra.getState();System.out.println(Title:+fra.getTitle();System.out.println(Visible:+fra.isVisible();,程序运行时,出现如图所示的窗口,并在屏幕上显示如下所示的文本信息:State:0Title:FrmAppVisible:true,5标签,标签类(Label)组件用于显示一行文本信息。标签只能显示信息,不能用于输入。,Label的构造方法,Label的成员方法,例-在窗口中建立1个标签,importjava.awt.*;classLabApppublicstaticvoidmain(Stringargs)Framefra=newFrame(LabApp);Labellab=newLabel();/创建1个空标签fra.setSize(250,150);lab.setText(Thisisalabel);/为标签添加标题lab.setAlignment(Label.CENTER);lab.setBackground(Color.white);/引用Component类的方法设置标签背景颜色,lab.setForeground(Color.black);/引用Component类的方法设置标签标题颜色Fontfnt=newFont(Serief,Font.ITALIC+Font.BOLD,22);lab.setFont(fnt);fra.add(lab);fra.setVisible(true);,程序运行时,出现如图所示的窗口。,6按钮,按钮是最常见的一种组件,用来控制程序运行的方向。用户单击按钮时,计算机将执行一系列命令,完成一定的功能。按钮通过java.awt包的Button类创建。,Button的构造方法,java.awt.Button的方法,例-在窗口中建立一个按钮,importjava.awt.*;classButtapppublicstaticvoidmain(Stringargs)Framefra=newFrame(ButtApp);fra.setSize(250,170);fra.setLayout(null);/关闭页面设置Buttonbutt=newButton(click);butt.setSize(100,50);butt.setLocation(75,60);fra.add(butt);fra.setVisible(true);,程序运行时,出现如图所示的窗口。,7文本编辑组件,文本编辑组件有文本行和文本区。文本行是一个单行文本编辑框,用于输入一行文字。文本行由java.awt包中的TextField类来创建。,TextField的构造方法,TextField的成员方法,例-创建文本行,importjava.awt.*;classTextApppublicstaticvoidmain(Stringargs)Framefra=newFrame(文本框程序);TextFieldtxt1=newTextField(50);TextFieldtxt2=newTextField(TextField,50);fra.setBounds(0,0,300,200);fra.setLayout(null);txt1.setBounds(50,50,130,20);/设置文本框的大小txt2.setBounds(50,100,130,30);fra.add(txt1);fra.add(txt2);fra.setVisible(true);,程序运行时,出现如图所示的窗口。,11.2布局管理,Java提供了多种风格和特点的布局管理器,每一种布局管理器指定一种组件相对位置和大小布局。布局管理器是容器类所具有的特性,每种容器都有一种默认的布局管理器。,11.2布局管理,在java.awt包中共提供了5个布局管理器类:FlowLayoutBorderLayoutCardLayoutGridLayoutGridBagLayout每个类都是java.lang.Object类的子类。,11.2.1BorderLayout类,BorderLayout(边布局)的布局策略是把容器内的空间划分为东、西、南、北、中5个区域,这5个区域分别用英文的East、West、South、North、Center表示。向容器中加入每个组件都要指明它放在容器的哪个区域。如果某个区域没有分配组件,则其他组件可以占据它的空间。,BorderLayout类的构造方法,例-应用BorderLayout布局,在窗口中加入5个按钮,采用BorderLayout布局。importjava.awt.*;classBorLaypublicstaticvoidmain(Stringargs)Framefrm=newFrame(BorderLayout);BorderLayoutlayout=newBorderLayout(5,7);frm.setBounds(0,0,300,200);frm.setLayout(layout);ButtonbutN,butS,butW,butE,butC;butN=newButton(northbutton);butS=newButton(southbutton);,butW=newButton(westbutton);butE=newButton(eastbutton);butC=newButton(centerbutton);frm.add(butN,BorderLayout.NORTH);frm.add(butS,BorderLayout.SOUTH);frm.add(butW,BorderLayout.WEST);frm.add(butE,BorderLayout.EAST);frm.add(butC,BorderLayout.CENTER);frm.setVisible(true);,程序运行结果如图所示。,11.2.2FlowLayout,FlowLayout(流式布局)的布局策略提供按行布局组件方式,将组件按照加入的先后顺序从左向右排列,当一行排满之后转到下一行继续按照从左向右的顺序排列。组件保持自己的尺寸,一行能容纳的组件的数目随容器的宽度变化。,FlowLayout类的构造方法,例-使用FlowLayout布局,importjava.awt.*;importjavax.swing.*;publicclassFlowLaypublicstaticvoidmain(Stringargs)Framefrm=newFrame(BorderLayout);FlowLayoutlayout=newFlowLayout();frm.setBounds(0,0,200,200);frm.setLayout(layout);Buttonbut1,but2;TextFieldtxt1,txt2;but1=newButton(button1);but2=newButton(button2);txt1=newTextField(text1,10);txt2=newTextField(text2,10);,frm.add(but1);frm.add(but2);frm.add(txt1);frm.add(txt2);frm.setVisible(true);,运行程序出现如图所示的界面:,初始界面增大窗口宽度后的界面,11.2.3GridLayout,GridLayout(网格布局)管理器将容器划分为大小相等的若干行乘若干列的网格,组件按照从左到右、从上到下的的顺序依此放入各网格中。每个组件占满1格。组件大小随网格大小变化。如果组件数比网格数多,系统将自动增加网格数;如果组件数比网格数少,未用的网格区空闲。,GridLayout类的构造方法,例-使用GridLayout布局,importjava.awt.*;publicclassGridLaypublicstaticvoidmain(Stringargs)Framefrm=newFrame(GridLayout);GridLayoutlayout=newGridLayout(2,2);/定义2行2列的GridLayoutfrm.setBounds(0,0,200,200);frm.setLayout(layout);Stringnames=butt1,butt2,butt3,butt4;,for(inti=0;inames.length;i+)frm.add(newButton(namesi);frm.setVisible(true);,运行程序出现如图所示的界面。,使用AWT开发GUI程序需要4个步骤。选择一个合适的容器(Container)。确定一种布局管理器(LayoutManager)。添加各种组件(Component)。进行事件处理(EventHandling)。,我们可以打个家居设计的比喻。首先要选择一套房屋,这里相当于AWT的容器概念。然后要对房屋进行整体布局设计,比如一共需要几个房间,每个房间的大小和尺寸等,这里相当于AWT的布局管理器概念。整体布局规划好之后,我们开始布置每个房间,将各种家具或电器设备(相当于AWT的组件)安放在合适的位置。最后是确保家具或电器能够正常工作,例如,当使用电视机遥控调节音量时,电视机会正常做出反应,这里相当于AWT组件的事件处理。,11.3事件处理,上一节中的主要内容是如何放置各种组件,使图形界面更加丰富多彩,但是还不能响应用户的任何操作,要能够让图形界面接收用户的操作,就必须给各个组件加上事件处理机制。在事件处理的过程中,主要涉及三类对象。,11.3事件处理,11.3.1委托事件模型,JDK1.1之后采用委托事件模型(delegationeventmodel)。,1事件,事件(event)是指一个状态的改变,或者一个动作的发生。用户对界面操作在java语言上的描述,以类的形式出现,例如键盘操作对应的事件类是KeyEvent。单击一个按钮,将产生单击事件;单击窗口关闭按钮,产生窗口关闭事件。,2事件类,在Java中,用不同的类处理不同的事件。在java.awt.event包中定义了许多事件类,如单击事件类(ActionEvent)和窗口事件类(WindowEvent)。,3事件源,事件由用户操作组件产生,被操作的组件称为事件源,事件源是事件发生的场所,通常就是各个组件,例如按钮Button。例如,用户单击一个按钮,产生单击事件,按钮则是事件源;用户单击窗口关闭按钮,产生窗口关闭事件,窗口组件是事件源。,4事件监听器,在图形界面程序中,不仅需要创建组件,而且还需指定组件所能响应的事件,以及该事件发生时需要执行的动作(语句序列)。,4事件监听器,一个组件能响应哪些事件,响应事件后需执行的语句序列存放在什么位置,这些功能由事件监听器负责。为了实现此功能,在开发程序时,用户需要做以下2件事:向事件源注册事件监听器实现事件处理方法,5.事件运作流程,按照委托事件模型,事件运作流程如下:在程序中,实现事件监听器接口(实现接口中声明的所有抽象方法),向事件源注册事件监听器;程序运行过程中,用户在事件源上引发某种事件(执行某种操作)时,Java产生事件对象;事件源将事件对象传递给事件监听器;事件监听器根据事件对象的种类,调用相应的事件处理方法进行事件处理。,6确定事件监听器,在编写事件处理的程序代码时,首先必须确定事件源与事件监听器。事件源的选择通常比较容易。事件监听器必须是实现事件监听器接口的类对象。,7编写事件处理程序代码,在事件处理程序中,必须实现事件监听器接口中声明的事件处理方法。事件处理方法以事件对象作为参数。当事件源上发生事件时,产生的事件对象将以参数形式传递给事件处理方法。在事件处理方法中,可以访问事件对象的成员。,例-处理按钮单击事件,创建一个窗口程序类,当用户单击窗口中的按钮时,将窗口的背景设置为红色。importjava.awt.*;importjava.awt.event.*;classButtEventAppextendsFrameimplementsActionListenerstaticButtEventAppfrm=newButtEventApp();publicstaticvoidmain(Stringargs)frm.setTitle(ButtEventApp);frm.setSize(300,160);frm.setLayout(null);Buttonbtn;,btn=newButton(push);btn.setBounds(120,80,60,30);btn.addActionListener(frm);frm.add(btn,BorderLayout.CENTER);frm.setVisible(true);publicvoidactionPerformed(ActionEvente)frm.setBackground(Color.red);,例-利用内部类处理按钮单击事件,importjava.awt.*;importjava.awt.event.*;classInnClassEventstaticFramefrm=newFrame();,内部类是在其它类的内部声明的类,包含内部类的类称为外部类,此时内部类成为外部类的成员,内部类具有成员的4种访问权限,也可以声明为static。本例程序的功能与上例相同,程序代码不同之处是采用内部类对象作为事件监听器。,publicstaticvoidmain(Stringargs)frm.setTitle(ButtEventApp);frm.setSize(300,160);frm.setLayout(null);Buttonbtn;btn=newButton(push);btn.setBounds(120,80,60,30);btn.addActionListener(newInnCla();frm.add(btn,BorderLayout.CENTER);frm.setVisible(true);,staticclassInnClaimplementsActionListenerpublicvoidactionPerformed(ActionEvente)frm.setBackground(Color.red);,11.3.2事件类和监听器接口,1事件类Java定义的多数事件类在java.awt.event包中。AWTEvent类是所有事件类的祖先类,它又继承了java.util.EventObject类,而EventObject类又继承了java.lang.Object类,Java.awt.event的继承关系图,AWT事件共有10类,可以归为两大类:低级事件和高级事件。java.util.EventObject类是所有事件对象的基础父类,所有事件都是由它派生出来的。AWT的相关事件继承于java.awt.AWTEvent类,这些AWT事件分为两大类:低级事件和高级事件,低级事件是指基于组件和容器的事件,当一个组件上发生事件,如:鼠标的进入,点击,拖放等,或组件的窗口开关等,触发了组件事件。高级事件是基于语义的事件,它可以不和特定的动作相关联,而依赖于触发此事件的类,如在TextField中按Enter键会触发ActionEvent事件,滑动滚动条会触发AdjustmentEvent事件,或是选中项目列表的某一条就会触发ItemEvent事件。,低级事件ComponentEvent(组件事件:组件尺寸的变化,移动)ContainerEvent(容器事件:组件增加,移动)WindowEvent(窗口事件:关闭窗口,窗口闭合,图标化)FocusEvent(焦点事件:焦点的获得和丢失)KeyEvent(键盘事件:键按下、释放)MouseEvent(鼠标事件:鼠标单击,移动)高级事件(语义事件)ActionEvent(动作事件:按钮按下,TextField中按Enter键)AdjustmentEvent(调节事件:在滚动条上移动滑块以调节数值)ItemEvent(项目事件:选择项目,不选择项目改变)TextEvent(文本事件,文本对象改变),2事件监听器接口,Java中的每个事件类都有一个监听器接口,接口中声明了一个或多个抽象的事件处理方法。如果一个类实现事件监听器接口,其对象就可以作为对应事件的监听器,具备监视和处理事件的能力。,事件监听器接口和事件监听器接口中的方法,AWT中组件和可触发的事件类,3事件适配器类,Java提供了一种简便办法,为包含多个事件处理方法的每个事件监听器接口提供了一个抽象类,称为适配器(adapt)类,类名带有Adapter标记。每个适配器类实现一个事件监听器接口,用空方法体实现该接口中的每个抽象方法。,例如,WindowAdapter类实现WindowListener接口,用空方法体实现WindowListener接口中声明的以下方法:windowClosing(WindowEvente)windowClosed(WindowEvente)windowOpened(WindowEvente)windowActivated(WindowEvente)windowDeactivated(WindowEvente)windowIconified(WindowEvente)windowDeiconified(WindowEvente),监听器接口与对应的适配器类,4注册事件监听器的方法,11.3.3处理ActionEvent事件,当用户单击按钮(Button)、选择列表框(List)选项、选择菜单项(MenuItem),或是在文本行(TextField)输入文字并按下Enter键,便触发动作事件(ActionEvent),触发事件的组件将ActionEvent类的对象传递给事件监听器,事件监听器负责执行actionPerformed()方法进行相应的事件处理。,11.3.3处理ActionEvent事件,ActionEvent类继承了EventObject类的一个常用的方法getSource(),其功能是返回事件源(对象)名。ActionEvent类本身还定义了一些成员,如getActionCommand(),其功能是返回事件源的字符串信息。,例-处理ActionEvent事件,编程实现:窗口中有标题为button1和button2的2个按钮和1个标签,当单击任一按钮时,标签显示该按钮的标题。importjava.awt.*;importjava.awt.event.*;classActEventextendsFrameimplementsActionListenerstaticActEventfrm=newActEvent();staticButtonbtn1,btn2;staticLabellbl;,publicstaticvoidmain(Stringargs)frm.setTitle(ActionEvent);frm.setSize(240,160);frm.setLayout(newFlowLayout();btn1=newButton(button1);btn2=newButton(button2);lbl=newLabel(noclicking);btn1.addActionListener(frm);btn2.addActionListener(frm);frm.add(btn1);frm.add(btn2);frm.add(lbl);frm.setVisible(true);,publicvoidactionPerformed(ActionEvente)if(e.getSource()=btn1)lbl.setText(button1clicked);elselbl.setText(button2clicked);,运行程序,出现如图所示的界面。,(a)初始界面(b)单击第1个按钮后的界面(c)单击第2个按钮后的界面,11.3.4处理ItemEvent事件,当窗口中的选项组件Checkbox(选择框)和List(列表框)等被选择时,发生选项事件(itemevent)。Java用ItemEvent类处理选项事件。ItemEvent类事件的监听器必须实现ItemListener接口,实现其中声明的itemStateChanged()方法:publicvoiditemStateChanged(ItemEvente)程序运行过程中,当用户选择选项组件时,该方法被执行。,例-处理ItemEvent事件,编程实现:窗口中有标题为green和yellow的2个单选按钮和1个文本行,当选择任一单选按钮时,文本行中显示该单选按钮的标题。importjava.awt.*;importjava.awt.event.*;classIteEventextendsFrameimplementsItemListenerstaticIteEventfrm=newIteEvent();staticCheckboxchb1,chb2;staticTextFieldtxt1;,publicstaticvoidmain(Stringargs)frm.setTitle(ItemEvent);frm.setSize(240,160);frm.setLayout(newFlowLayout();CheckboxGroupgrp=newCheckboxGroup();chb1=newCheckbox(green);chb2=newCheckbox(yellow);txt1=newTextField(Noneisselected);chb1.setCheckboxGroup(grp);chb2.setCheckboxGroup(grp);chb1.addItemListener(frm);chb2.addItemListener(frm);frm.add(chb1);frm.add(chb2);frm.add(txt1);frm.setVisible(true);,publicvoiditemStateChanged(ItemEvente)if(e.getSource()=chb1)txt1.setText(greenisselected);elseif(e.getSource()=chb2)txt1.setText(yellowisselected);,运行程序,出现如图所示的界面。,(a)初始界面(b)单击green后的界面(c)单击yellow后的界面,11.3.5处理TextEvent事件,当TextField或TextArea组件中的文本改变时,触发文本事件(TextEvent),Java用TextEvent类处理该事件。TextEvent类事件的监听器必须实现TextListener接口,实现其中声明的textValueChanged()方法:publicvoidtextValueChanged(TextEvente)程序运行过程中,当TextField或TextArea组件中文本改变时,该方法被执行。,例-处理TextEvent事件,编程实现:窗口中有2个文本行,当向上面的文本行输入文本时,下面文本行中同时显示所输入的文本。importjava.awt.*;importjava.awt.event.*;classTexEventextendsFrameimplementsTextListenerstaticTexEventfrm=newTexEvent();staticTextFieldtxt1,txt2;,publicstaticvoidmain(Stringargs)frm.setTitle(TextEvent);frm.setSize(240,160);frm.setLayout(newFlowLayout();txt1=newTextField(20);txt2=newTextField(20);txt1.addTextListener(frm);frm.add(txt1);txt2.setEditable(false);frm.add(txt1);frm.add(txt2);frm.setVisible(true);,publicvoidtextValueChanged(TextEvente)txt2.setText(txt1.getText();,运行程序,出现如图所示的界面。,(a)初始界面(b)在第1个文本行输入文本时的界面,11.3.6处理KeyEvent事件,当按下键盘中的任一键时,将触发键盘事件(keyevent),Java用KeyEvent类处理该事件。,KeyEvent类的成员方法,KeyListener接口的成员方法,例-处理TextEvent事件,编程实现:窗口中有1个文本行和1个文本区,当按下某字符时,在文本行中显示该字符;当键被按下事件发生时,在文本区显示被按下的字符;当键被释放事件发生时,在文本区显示被释放的字符;当键入字符事件发生时,在文本区显示被输入的字符。importjava.awt.*;importjava.awt.event.*;publicclassKeysEventextendsFrameimplementsKeyListenerstaticKeysEventfrm=newKeysEvent();staticTextFieldtxf;staticTextAreatxa;,publicstaticvoidmain(Stringargs)frm.setTitle(KeyEvent);frm.setSize(240,200);frm.setLayout(newFlowLayout();txf=newTextField(20);txa=newTextArea(6,20);txa.setEditable(false);txf.addKeyListener(frm);frm.add(txf);frm.add(txa);frm.setVisible(true);,publicvoidkeyPressed(KeyEvente)txa.setText();txa.append(e.getKeyChar()+ispressed!n);publicvoidkeyReleased(KeyEvente)txa.append(e.getKeyChar()+isreleased!n);publicvoidkeyTyped(KeyEvente)txa.append(e.getKeyChar()+istyped!n);,运行程序,出现如图所示的界面:,(a)初始界面(b)在文本行输入字符r时的界面,例-利用KeyAdapter类处理TextEvent事件,编程实现:窗口中有2个文本行,当键入某字符时,在第1个文本行中显示该字符,并利用KeyAdapter类处理键入字符事件,在第1个文本行中显示“xisentered”,其中x表示被键入的字符。importjava.awt.*;importjava.awt.event.*;publicclassKeysEvent2extendsFramestaticKeysEvent2frm=newKeysEvent2();staticTextFieldtxt1,txt2;,publicstaticvoidmain(Stringargs)frm.setTitle(KeyEvent);frm.setSize(240,130);frm.setLayout(newFlowLayout();txt1=newTextField(20);txt2=newTextField(20);txt2.setEditable(false);txt1.addKeyListener(newKeysAdapter();frm.add(txt1);frm.add(txt2);frm.setVisible(true);,staticclassKeysAdapterextendsKeyAdapterpublicvoidkeyTyped(KeyEvente)txt2.setText(e.getKeyChar()+isentered!);,运行程序,出现如图所示的界面。,(a)初始界面(b)在第1个文本行输入字符t时的界面,11.3.7处理MouseEvent事件,当按下鼠标键、鼠标指针进入或离开某一区域,或者移动、拖动鼠标时,触发鼠标事件(mouseevent)。Java用MouseEvent类处理该事件。,MouseEvent类中成员方法,Java提供了MouseListener和MouseMotionListener接口,用来处理MouseEvent事件。MouseListener接口用来处理以下事件:鼠标指针进入某一区域按下鼠标键释放鼠标键鼠标单击(按下和释放鼠标键的整个过程)鼠标指针离开某一区域,MouseListener接口的成员方法,MouseMotionListener接口用来处理以下2个事件:鼠标在某一区域移动鼠标在某一区域拖动(按下鼠标键不放移动鼠标)处理这2个事件的监听器必须实现MouseMotionListener接口,MouseMotionListener接口的成员方法,例-利用MouseListener接口处理MouseEvent事件,编程实现:窗口中有2个文本区,当鼠标指针进入和离开第1个文本区时,在第2个文本区显示相应信息;当在第1个文本区单击鼠标、按下和释放鼠标键时,分别显示其事件及发生的位置信息。importjava.awt.*;importjava.awt.event.*;publicclassMouEventextendsFrameimplementsMouseListenerstaticMouEventfrm=newMouEvent();staticTextAreatxa1,txa2;,publicstaticvoidmain(Stringargs)frm.setTitle(MouEvent);frm.setSize(240,300);frm.setLayout(newFlowLayout();txa1=newTextArea(5,30);txa2=newTextArea(8,30);txa2.setEditable(false);txa1.addMouseListener(frm);frm.add(txa1);frm.add(txa2);frm.setVisible(true);,publicvoidmouseEntered(MouseEvente)/鼠标进入事件处理txa2.setText(Mouseenterstxa1n);publicvoidmouseClicked(MouseEvente)/鼠标单击事件处理txa2.append(Mouseiscliskedat+e.getX()+,+e.getY()+n);publicvoidmousePressed(MouseEvente)/鼠标按键事件处理txa2.append(Mouseispressedat+e.getX()+,+e.getY()+n);,publicvoidmouseReleased(MouseEvente)/鼠标键释放事件处理txa2.append(Mouseisreleasedat+e.getX()+,+e.getY()+n);publicvoidmouseExited(MouseEvente)/鼠标离开事件处理txa2.append(Mouseexitsfromtxa1);,运行程序,出现如图所示的界面。,(a)初始界面(b)发生MouseEvent事件后的界面,例-利用MouseMotionListener接口处理MouseEvent事件,编程实现:窗口中有1个文本区和2个文本行,当鼠标在文本区内移动时,在第1个文本行显示移动信息;当鼠标在文本区内拖动时,在第1个文本行显示拖动信息。importjava.awt.*;importjava.awt.event.*;publicclassMouEvent2extendsFrameimplementsMouseMotionListenerstaticMouEvent2frm=newMouEvent2();staticTextAreatxa;staticTextFieldtxt1,txt2;,publicstaticvoidmain(Stringargs)frm.setTitle(MouEvent);frm.setSize(240,200);frm.setLayout(newFlowLayout();txa=newTextArea(5,30);txt1=newTextField(30);txt2=newTextField(30);txa.setEditable(false);txa.addMouseMotionListener(frm);frm.add(txa);frm.add(txt1);frm.add(txt2);frm.setVisible(true);,publicvoidmouseMoved(MouseEvente)/处理鼠标移动事件txt1.setText(Mouseismovedintxa);publicvoidmouseDragged(MouseEvente)/处理鼠标拖动事件txt2.setText(Mouseisdraggedintxa);,运行程序,出现如图所示的界面。,(a)初始界面(b)发生MouseEvent事件后的界面,例-利用MouseMotionAdapter类处理MouseEvent事件,实现上例功能。,importjava.awt.*;importjava.awt.event.*;publicclassMouEvent3extendsFramestaticMouEvent2frm=newMouEvent2();staticTextAreatxa;staticTextFieldtxt1,txt2;,publicstaticvoidmain(Stringargs)frm.setTitle(MouEvent);frm.setSize(240,200);frm.setLayout(newFlowLayout();txa=newTextArea(5,30);txt1=newTextField(30);txt2=newTextField(30);txa.setEditable(false);txa.addMouseMotionListener(newMouMotionAdapter();frm.add(txa);frm.add(txt1);frm.add(txt2);frm.setVisible(true);,staticclassMouMotionAdapterextendsMouseMotionAdapterpublicvoidmouseMoved(MouseEvente)/处理鼠标移动事件txt1.setText(Mouseismovedintxa);publicvoidmouseDragged(MouseEvente)/处理鼠标拖动事件txt2.setText(Mouseisdraggedintxa);,11.3.8处理WindowEvent事件,当创建窗口,将窗口缩小成图标,由图标转成正常大小,或关闭窗口时,触发窗口事件(windowevent)。Java用WindowEvent类处理该类事件,并提供了WindowListener接口,用来监听该类事件。,WindowListener接口的成员方法,例-处理WindowEvent事件,编程实现:当窗口打开、关闭、缩小为图标和由图标转换成一般状态时,在屏幕上显示相应信息。importjava.awt.*;importjava.awt.event.*;publicclassWinEventextendsFrameimplementsWindowListenerstaticWinEventfrm=newWinEvent();,publicstaticvoidmain(Stringargs)frm.setTitle(MouEvent);frm.setSize(240,200);frm.addWindowListener(frm);frm.setVisible(true);publicvoidwindowClosing(WindowEvente)System.out.println(windowClosing()method);System.exit(0);publicvoidwindowClosed(WindowEvente),publicvoidwindowActivated(WindowEvente)publicvoidwindowDeactivated(WindowEvente)publicvoidwindowIconified(WindowEvente)System.out.println(windowIconified()method);publicvoidwindowDeiconified(WindowEvente)System.out.println(windowDeiconified()method);publicvoidwindowOpened(WindowEvente)System.out.println(windowOpened()method);,程序运行过程中,单击最小化按钮使窗口缩小成图标,再单击缩小成图标的窗口,使其恢复到一般状态,最后再单击关闭按钮将窗口关闭,屏幕上的显示信息如图所示。,11.4绘图,Java提供了绘图类Graphics,用来在组件上绘图。通过调用Graphics的方法可以绘制直线、圆、圆弧、任意曲线等图形。,1Graphics类,Graphics类提供了很多绘图方法,绘图所使用的坐标系与屏幕、窗口相同。水平方向是X轴,向右为正,垂直方向是Y轴,向下为正,坐标源点(0,0)位于屏幕的左上角。任一点(x,y)的x坐标表示该点距坐标源点在水平方向的像素,y表示距坐标源点在垂直方向的像素。,Graphics类的成员方法,2在组件上绘图,在java.awt.Component类中声明了绘图方法paint(),其声明如下:publicvoidpaint(Graphicsg),2在组件上绘图,在paint()方法中,通过Graphics对象g调用绘图方法,在组件上绘制图形。paint()方法的执行方式与普通方法不同,它不是由用户编写代码调用执行,而是由系统自动执行。程序运行过程中,当创建或刷新一个组件时,系统自动执行该组件的paint(Graphicsg)方法,绘制相应图形。因此,一个类如果需要在组件上绘图,则该类必须声明为继承某个Java组件类,并且覆盖paint()方法(只要把绘图操作g.xxx()放在此方法中即可),

温馨提示

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

评论

0/150

提交评论