第9章 java 可视化编程(二).doc

上传人:asd****56 文档编号:70333583 上传时间:2023-01-19 格式:DOC 页数:43 大小:562.50KB
返回 下载 相关 举报
第9章 java 可视化编程(二).doc_第1页
第1页 / 共43页
第9章 java 可视化编程(二).doc_第2页
第2页 / 共43页
点击查看更多>>
资源描述

《第9章 java 可视化编程(二).doc》由会员分享,可在线阅读,更多相关《第9章 java 可视化编程(二).doc(43页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第9章 可视化编程(二)2总体概要2相关知识2学习重点2内容框架39.1事件监听器39.1.1事件和事件监听接口3(一)事件概述3(二)事件类(java.awt包)49.1.2实现事件监听接口6(一)事件监听接口6(二)事件监听器的注册与注销8(三)事件适配器8(四)组适配器类(Adapter)89.2常用事件方法89.2.1动作事件8(一)ActionEvent对象的常用方法9(二)动作事件的实现99.2.2焦点事件10(一)FocusListener接口的方法10(二)焦点事件的实现119.2.3按键事件12(一)KeyListener接口的构造方法12(二)KeyEvent接口的常用方法

2、12(三)按键事件的实现129.2.4菜单事件14(一)MenuListener接口方法14(二)菜单事件的实现149.2.5鼠标事件和鼠标移动事件16(一)MouseListener和MouseMotionListener中的方法16(二)鼠标事件实现169.2.6窗口事件18(一)windowListener接口的方法18(二)WindowEvent对象常用的方法18(三)窗口事件的实现199.3窗口组件209.3.1窗口219.3.2窗口的构造方法219.3.3窗口的常用方法219.3.4窗口的用途219.4框架229.4.1Frame的构造方法229.4.2Frame的常用方法229.

3、4.3创建可关闭框架229.4.5框架事件适配器249.4.6在框架中加入组件269.4.7多重框架279.5对话框299.5.1对话框的构造方法299.5.2对话框的常用方法309.5.3创建自定义对话框309.6菜单339.6.1菜单中常用的构造方法339.6.2创建菜单339.7综合实例36记事本369.8小结369.9习题36参考:计算器37第9章 可视化编程(二)总体概要l 知道事件l 了解事件监听器,事件适配器,以及常用的事件类l 理解掌握GUI组件注册事件监听器的实现l 掌握常用的事件监听接口l 理解与掌握事件的用法l 熟练掌握事件方法: 动作事件,焦点事件,按键事件,菜单事件,

4、鼠标事件,鼠标移动事件,窗口事件l 理解可关闭的窗口l 熟练掌握在窗口中添加组件和菜单l 掌握创建自定义对话框相关知识l 知道application程序有什么用,怎么去实现l 了解Application程序与applet程序的区别l 区分Javax.Swing和java.awt包中相应组件的区别和联系学习重点l 事件源、事件处理器l 向组件添加方法l 能熟练的用抽象窗口工具箱编写application程序l 能灵活的把GUI组件添加到相应窗口中的位置内容框架按键事件图形用户介面二组件事件事件监听器窗口Window(JWindow)焦点事件Frame(JFrame)菜单常用事件方法Dialog(

5、JDialog)动作事件实现事件监听接口事件和事件监听接口窗体事件鼠标事件和鼠标移动事件菜单事件9.1事件监听器9.1.1事件和事件监听接口(一)事件概述在面向对象的程序设计中,事件消息(Event Message)是对象间通信的基本方式。在图形用户界面程序中,GUI组件对象根据用户的交互产生各种类型的事件消息,这些事件消息由应用程序的事件处理代码捕获,在进行相应的处理后驱动消息响应对象做出反应。 面向对象程序设计中需要明确两个在事件处理过程中的对象:事件源和事件处理器。例如,当用户在按钮上点击鼠标时,该按钮对象就是事件源。处理该按钮被按下事件的方法就称为事件处理器。在事件处理器对象中,可以利

6、用Java事件对象Event中定义的getAvtionCommand方法获取引发该事件动作时的字符串参数。Java GUI组件对象能够产生事件的诱因很多,例如用户利用鼠标来点击按钮、拉动滚动条、窗口的覆盖、遮挡以及鼠标在绘图区中移动等。在JDK1.2以前的版本中定义的事件消息只能由指定的事件处理对象进行处理,不能对事件消息进行传播(Propogate)。为了解决事件消息不能在Java对象间进行传播的问题,JDK1.2(Java2)版对消息处理和响应模型进行了更新,定义了“事件代理模型”。该模型根据对象的事件消息处理方式,将消息处理对象分为事件对象(Event Class)、事件监听接口对象(E

7、vent Listener)、事件适配器对象(Event Adapter)和事件容许对象(Event Enabling)。Java将用户在用户界面中引发的事件封装成为事件对象,所有与该事件有关的信息和参数均封装在事件对象中。定义在java.util包中的EventObject对象是所有这些事件对象的公共父对象。另外,在java.awt包中定义的AWTEvent抽象类中,定义了各种事件类型的标识以及获取这些事件标识的方法,因此该对象也是所有类型事件对象的抽象父类。定义在java.awt.event包中的事件对象的定义和继承关系如下图所示:ItemEventJava.awt.AWTEventAct

8、ionEventJava.awt.EventObjectAdjustmentEventInputEventKeyEventComponentEventFocusEventContainerEventWindowEventMouseEventTextEvent图9-1(二)事件类(java.awt包)事件类是真正封装了事件消息的对象。Java.awt.event提供一组事件类用以代表窗口元素可能引发的种种事件类型。所有的事件类都从java.awt.AWTEvent派生而来,而AWTEvent又是类java.util.EventObject的子类。这些事件从概念上又可分为两大类:低级事件类(low

9、-leve)和语义事件类(semantic)。低级事件类型代表低级输入或对可视组件的窗口系统进行界面改动的事件,如组件的移动,窗口的关闭,键盘输入等,语义事件类型则代表用户有意识的对窗口进行操作以选择执行某项功能的事件,如菜单的选择,滚动条拖动。对所有定义的事件类型,java.awt.event都提供了相对应的监听接口,这些接口都从类java.util.EventListener派生而来,都封装有若干个处理某类事件不周情形的抽象方法。事件类型事件名称引发情况描述Sem anticActionEvent选中菜单,按下按扭等指示发生了组件定义的动作的语义事件, 当特定于组件的动作(比如被按下)发生

10、时,由组件(比如 Button)生成此高级别事件。事件被传递给每一个 ActionListener 对象,这些对象是使用组件的 addActionListener 方法注册的,用以接收这类事件。注:要使用键盘在 Button 上触发 ActionEvent,请使用空格键。AdjustmentEvent滚动条位置改变由实现了 Adjustable 接口的对象所发出的调整事件。ItemEvent列表框,选择框等选项选中,撤销选择指示项被选定或取消选定的语义事件。此高级事件是在用户已选定项或取消选定项时由 ItemSelectable 对象(如 List)生成的。该事件被传递到每个 ItemList

11、ener 对象,这些对象都已使用组件的 addItemListener 方法注册接收此类事件TextEvent文本框输入,修改等指示对象文本已改变的语义事件。当某个对象(如 TextComponent)的文本改变时,该对象将生成此高级别事件。该事件被传递给每一个使用组件的 addTextListener 方法注册以接收这种事件的 TextListener 对象。Low-levelComponentEvent组件移动,组件大小变化指示组件被移动、大小被更改或可见性被更改的低级别事件(它也是其他组件级事件的根类)。ContainerEvent窗口内组件的添加,删除指示容器内容因为添加和移除组件而更

12、改的低级别事件。FocusEvent窗口激活,拖动滚动条指示 Component 已获得或失去输入焦点的低级别事件。此低级别事件由 Component(比如 TextField)生成。事件被传递给每一个 FocusListener 或 FocusAdapter 对象,这些对象使用 Component 的 addFocusListener 方法注册,以接收这类事件。(FocusAdapter 对象实现 FocusListener 接口。)当发生该事件时,所有这类侦听器对象都将获得此 FocusEventInputEvent键盘输入,鼠标操作所有组件级别输入事件的根事件类。 输入事件通常由产生输入

13、事件的源代码进行处理,而在此之前,将他们提交到侦听器中。这样就允许侦听器和组件子类“使用”事件,以便源代码不会以默认方式处理事件。例如,在 Button 组件上使用 mousePressed 事件将阻止 Button 被激活。InputMethodEvent输入方法事件包含有关使用输入方法进行撰写的文本的信息。只要文本发生变化,输入方法就会发送一个事件。如果当前正在使用输入方法的文本组件是活动的客户端,则将事件指派给该组件。否则,将事件指派给单独的组合窗口。KeyEvent某键按下,某键松开指示组件中发生击键的事件。 当按下、释放或键入某个键时,由组件对象(如文本字段)生成此低级别事件。该事件

14、被传递给每一个 KeyListener 或 KeyAdapter 对象,这些对象使用组件的 addKeyListener 方法注册,以接收此类事件。(KeyAdapter 对象实现 KeyListener 接口。)发生事件时,所有此类侦听器对象都获取此 KeyEventMouseEvent鼠标移动,鼠标按下MouseEvent 接口提供与鼠标事件相关联的特定上下文信息。 从 UIEvent 继承的 detail 属性指示在用户操作期间同一屏幕位置上鼠标按键被按下和释放的次数。用户开始此操作时属性值为 1,对每个完整的按下和释放序列增加 1。如果用户在 mousedown 和 mouseup 之

15、间移动鼠标,则将值设置为 0,指示没有进行单击操作。WindowEvent窗口关闭,窗口图标化等指示窗口状态改变的低级别事件。当打开、关闭、激活、停用、图标化或取消图标化 Window 对象时,或者焦点转移到 Window 内或移出 Window 时,由 Window 对象生成此低级别事件。图9-2说明按照产生事件消息的对象类型不同,可以将Java事件对象分为低层事件对象和高层事件对象两种类型。Java应用程序中的对象实例正是通过这些对象,实现对象驱动与消息传递.在以事件内容为AWT事件对象模型中,AWT组件对象产生事件消息,由事件适配器进行调动后,将事件类型传递给相应的事件响应方法。9.1.

16、2实现事件监听接口(一)事件监听接口事件监听接口在实际使用时,用户需要建立自己的事件处理类,如MyListener,它必须实现用户要处理的事件所对应的接口,即完成接口定义的抽象方法,然后,在引发事件的组件对象上用”addListener”方法添加事件处理类对象,例如为button添加ActionEvent处理对象的语句为:button.addActionListener(MyListener);接口事件类别接口说明描述ActionListenerActionEvent动作命令监听接口定义了一个接收动作事件的方法void actionPerformed(ActionEvent e)Adjustm

17、entListenerAdjustmentEvent数值调整监听接口定义了一个接收调整事件的方法void adjustmentValueChange(AdustmentEvent e)ComponentListenerComponentListener组件监听接口定义了四个方法来识别何时隐藏、移动、改变大小、显示组件void componentHidden(ComponentEvent e)void componentMoved(ComponentEvent e)void componentResized(ComponentEvent e)void componentShown(Compone

18、ntEvent e)ContainerListenerContainerEvent容器监听接口定义两个方法来识别何时从容器中加入或除去组件void componentAdded(ContainerEvent e)void componentRemoved(ContainerEvent e)FocusListenerFocusListener焦点监听接口定义两个方法来识别何时组件获得或失去焦点void focusGained(FocusEvent e)void focusLost(FocusEvent e)ItemListenerItemLIstener选项事件监听接口定义一个方法来识别何时项目

19、状态改变void itemStateChange(ItemEvent e)KeyListenerKeyEvent键盘监听接口定义三个方法来识别何时键按下、释放和键入字符事件void keyPressed(KeyEvent e)void keyReleased(KeyEvent e)void keyTyped(KeyEvent e)MouseLitenerMouseEvent鼠标监听接口定义五个方法来识别何时鼠标单击、进入组件、离开组件、按下和释放事件void mouseClicked(MouseEvent e)void mouseEntered(MouseEvent e)void mouseE

20、xited(MouseEvent e)void mousePressed(MouseEvent e)void mouseReleased(MouseEvnet e)MouseMotionListenerMouseEvent鼠标动作监听接口定义两个方法来识别何时鼠标拖运和移动void mouseDragged(MouseEvent e)void mouseMoved(MouseEvent e)TextListenerTextEvent文本监听接口定义一个方法来识别何时文本值改变void textValueChanged(TextEvent e)WindowListenerWindowEvent窗

21、口监听接口定义七个方法来识别何时窗口激活、关闭、失效、最小化、还原、打开和退出void windowActivated(WindowEvent e) /激活void windowClosed(WindowEvent e) /关闭void windowDeactivated(WindowEvent e) /失效void windowDeiconified(WindowEvent e) /还原void windowIconified(WindowEvent e) /最小化void windowOpened(WindowEvent e) /打开void windowClosing(WindowEve

22、nt e) / 退出图9-3(二)事件监听器的注册与注销 注册监听器:Public void add(Listener); 注销监听器:Public void remove(Listener);(三)事件适配器由于有的监听接口处理多种事件,定义的抽象方法较多,因而当我们直接实现这些接口时,需要完成所有的方法,这是比较麻烦又没有必要的,为了方便使用,java.awt.event提供了一(四)组适配器类(Adapter)这是一组抽象类,它们实现了相应的监听接口,但所有的方法都是空方法,没有具体语句。使用时,我们派生出自己的适配器类,然后重写需要的事件处理方法,不再要求完成所有的方法。适配器类适配器

23、说明对应的监听者ComponentAdapter组件适配器ComponenetListenterContainerAdapter容器适配器ContaierLIstenerFocusAdapter焦点适配器FocusLIstenerKeyAdapter键盘适配器FocusLIsteberMouseAdapter鼠标适配器MouseListenerMouseMotionAdapter鼠标动作适配器MouseMotionLIstenerWindwAdapter窗口适配器WindowLIstener图9-4【注意】事件适配器提供了一种简单的实现监听器的手段,可以缩短程序代码,但是,由于java的单一继

24、承机制,当需要多种监听器或此类已有父类时,就无法采用事件适配器了。对于ActionListener、AdjustListener、ItemListener和TextListener,由于它们只定义了一个方法,所以没有提供相应的适配器类。9.2常用事件方法9.2.1动作事件当用户用Button(JButton)、CheckBox(JCheckBox)、TextField(JTextField)或JradioButton等组件的时候将出现动作事件。接口ActionListener只有惟一的一个方法actionPerformed(ActionEvent e)它的形式是:pubilc void act

25、ionPerformed(ActionEvent e) /方法体。(一)ActionEvent对象的常用方法我们可以通过这些方法可以进行事件的信息处理操作,需要注意的是,这些方法都是它本身所包括的方法不包括其父类的方法。 Public String getActionCommand()返回与此动作相关的命令字符串 Public int getModifiers()返回发生此动作事件期间按下的组合键。 Public long getWhen()返回发生此事件时的时间戳。 Pulbic String paramString()返回标识此动作事件的参数字符串。(二)动作事件的实现【例】动作事件的实现

26、,程序代码名为ALTest.java,代码如下所示package bedeck;import javax.swing.*;import java.awt.event.*;public class ALTest extends JFrameJButton b1 = new JButton(单击事件测试);JTextArea ta = new JTextArea(单击按钮就文本区的内容就会发生变化,5,10);public ALTest()super(单击事件测试);this.setSize(400,280);/* * 单击事件 * */b1.addActionListener(new Actio

27、nListener() public void actionPerformed(ActionEvent e)ta.setText(你已点击按钮了n命令字符串:+e.getActionCommand()+n事件发生时间:+e.getWhen()+n事件源:+e.getSource(););this.setLayout(null); /使用手工布局this.addWindowListener(new WindowAdapter()public void windowClosing(WindowEvent e)System.exit(0); /关闭窗口);/* * 设置组件的位置 * */b1.se

28、tBounds(10, 30, 85, 35); ta.setBounds(100, 30, 230, 90);this.add(b1);this.add(ta);this.setVisible(true);public static void main(String a)new ALTest(); /实例化ALTest图9-5说明:如果在程序中是使用swing包中的Jframe对象,可以不添加关闭事件,即可关闭窗口,但需注意的是,要设置Jframe的大小,否则窗口只显示一个标题栏。运行结果如9-6所示图9-69.2.2焦点事件当图形化界面上的某个组件失去焦点的时候,发生焦点事件。得到焦点的组

29、件说明该组件正处于活动状态,如果某个文本域含有焦点,如JTextField(TextField),则在它的域内显示一个光标,如果某个组件上有焦点,如JButton(Button),则按钮上将出现 一个用虚线组的轮廓。(一)FocusListener接口的方法 focusGained(FocusEvente)组件获得键盘焦点时调用。 focusLost(FocusEvente)组件失去键盘焦点时调用。 FocusEvent对象的常用方法 Public Component getOppositeComponent()返回此焦点更改中涉及的另一个 Component。 Public boolean

30、isTemporary()将焦点更改事件标识为暂时性的或持久性的。 Public String paramString()返回标识此事件的参数字符串。(二)焦点事件的实现【例】焦点事件的实现,程序名为FETest.java,代码如下所示package bedeck;import java.awt.event.*;import javax.swing.*;import java.awt.*;import java.io.*;public class FETest extends JFrame implements FocusListenerJTextField jtf = new JTextFi

31、eld(文本框,10);JTextArea jta = new JTextArea(文本区的默认内容,10,5);public FETest()super(焦点事件的实现);this.setSize(350,320);this.setLayout(new BorderLayout();jtf.addFocusListener(this);this.add(North,jtf);this.add(Center,jta);this.setVisible(true);public static void main(String a)new FETest();/* * FocusListener接口的

32、实现 * */public void focusGained(FocusEvent e)jtf.setText();jta.setText(文本框获取焦点);public void focusLost(FocusEvent e)jtf.setText(已失去了焦点);jta.setText(文本框失去焦点);图9-7运行结果如9-8所示图9-8【注意】提供轻量级组件的 scrollable 视图,JScrollPane 不支持重量级组件9.2.3按键事件在健盘上按下或者放开键的时候会发生按键事件,任何组件都可以产生这种事件。(一)KeyListener接口的构造方法 keyPressed(Ke

33、yEvente)按下某个键时调用此方法。 keyReleased(KeyEvente)释放某个键时调用此方法。 keyTyped(KeyEvente)键入某个键时调用此方法。(二)KeyEvent接口的常用方法 Public Char getKeyChar()返回在键盘上按下的字符 Public int getKeyCode()返回与此事件中的键相关联的整数 keyCode。 Public int getKeyLocation()返回产生此按键事件的键位置。 Public String paramString()返回标识此事件的参数字符串。 Public void setKeyChar(cha

34、rkeyChar)设置 keyCode 值,以表明某个逻辑字符。 Pubic void setKeyCode(intkeyCode)设置 keyCode 值,以表明某个物理键。(三)按键事件的实现【例】按件事件的实现,程序名为KLTest.java,程序代码如下所示package bedeck;import java.awt.event.*;import java.awt.*;import javax.swing.*;/* *application程序 * */public class KLTest extends JFrame implements KeyListenerJLabel jl

35、= new JLabel(请在文本框中输入内容:);JTextField jtf = new JTextField(10);JTextArea jta = new JTextArea(这是按健事件之前的内容,8,23);public KLTest()super(按键事件的实现);this.setSize(350, 250);jtf.addKeyListener(this); /向文本区添加按健事件jta.setAutoscrolls(true);this.setLayout(new FlowLayout(); /设置布局方式this.add(jl);this.add(jtf);this.add

36、(jta);this.setVisible(true);/* * 实现按键事件中接口的方法 * */public void keyPressed(KeyEvent e)System.out.println(sdgds);jta.setText(健盘按键按下);public void keyReleased(KeyEvent e)jta.setText(健盘按键放开);public void keyTyped(KeyEvent e)jta.setText(键盘字符是:nt+e.getKeyChar()+n键盘字符码是:nt+e.getKeyCode()+n事件字符为:nt+e.paramStri

37、ng();/* * main()方法 * */public static void main(String a)new KLTest();图9-9运行结果如9-10所示图9-109.2.4菜单事件菜单事件只是针对Menu(JMenu)和MenuItem(JmenuItem)组件进行的,当菜单进行选择、取消、删除的时候产生这种事件。(一)MenuListener接口方法 Public void menuCanceled(MenuEvente)取消菜单时调用。 Public void menuDeselected(MenuEvente)取消选择某个菜单时调用。 Public void menuSe

38、lected(MenuEvente)选择某个菜单时调用。 (二)菜单事件的实现【例】菜单事件的实现,程序代码如MLTest.java,代码如下所示package bedeck;import java.awt.event.*;import javax.swing.*;import javax.swing.event.*;import java.awt.*;public class MLTest extends JFrame implements MenuListenerJMenuBar jmb = new JMenuBar();JMenu jm1 = new JMenu(菜单一);JMenu j

39、m2 = new JMenu(菜单二);JMenu jm3 = new JMenu(菜单三);JMenuItem jmi11 = new JMenuItem(选项一);JMenuItem jmi12 = new JMenuItem(选项二);JMenuItem jmi21 = new JMenuItem(选项一);JTextArea jta = new JTextArea(这是默的内容);public MLTest()super(菜单事件的实现);this.setSize(320,250);this.setLayout(new BorderLayout();jmb.add(jm1);jm1.a

40、dd(jmi11);jm1.add(jmi12);jmb.add(jm2);jm2.add(jmi21);jmb.add(jm3);jm1.addMenuListener(this);this.add(North,jmb);this.add(Center,jta);this.setVisible(true);public static void main(String a)new MLTest();public void menuCanceled(MenuEvent e)jta.setText(菜单被取消);public void menuSelected(MenuEvent e)jta.se

41、tText(不再选择);public void menuDeselected(MenuEvent e)jta.setText(被选中);图9-11说明:菜单在以面的内容进行讲解运行结果如9-2所示图9-129.2.5鼠标事件和鼠标移动事件鼠标事件只是鼠标5个状态点上的事件,鼠标移动是鼠标在移动过程中发生的事件。(一)MouseListener和MouseMotionListener中的方法 Public void mouseClicked(MouseEvente)鼠标按键在组件上单击(按下并释放)时调用。 Public void mouseEntered(MouseEvente)鼠标进入到组件

42、上时调用。 Public void mouseExited(MouseEvente)鼠标离开组件时调用。 Public void mousePressed(MouseEvente)鼠标按键在组件上按下时调用。 Public void mouseReleased(MouseEvente)鼠标按钮在组件上释放时调用。 Public void mouseDragged(MouseEvente)鼠标按键在组件上按下并拖动时调用。 Public void mouseMoved(MouseEvente)鼠标光标移动到组件上但无按键按下时调用。(二)鼠标事件实现【例】鼠标事件的实现,程序名为MMLTest.

43、java,程序代码如下示:package bedeck;import java.awt.*;import java.awt.event.*;import javax.swing.*;public class MMLTest extends JFrame implements MouseListener,MouseMotionListenerJPanel jp = new JPanel();String listenerContent = ;JTextArea jta = new JTextArea(文本域默认的内容,5,10);JLabel jb = new JLabel(在Jpanel中);

44、public MMLTest()super(鼠标事件的实现);this.setSize(320 ,250);this.setLayout(new FlowLayout();jp.add(jb);jp.addMouseListener(this);jp.setSize(5, 30);jp.setBackground(Color.BLUE);jp.addMouseMotionListener(this);this.add(jp);this.add(jta);this.setVisible(true);public static void main(String a)new MMLTest();/* * 鼠标事件接口的实现 * */public void mouseClicked(MouseEvent e)listenerContent = 鼠标在该区域单

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁