收藏 分享(赏)

第07章 图形用户界面的创建.ppt

上传人:cw6mk8 文档编号:6842580 上传时间:2019-04-23 格式:PPT 页数:148 大小:1.94MB
下载 相关 举报
第07章 图形用户界面的创建.ppt_第1页
第1页 / 共148页
第07章 图形用户界面的创建.ppt_第2页
第2页 / 共148页
第07章 图形用户界面的创建.ppt_第3页
第3页 / 共148页
第07章 图形用户界面的创建.ppt_第4页
第4页 / 共148页
第07章 图形用户界面的创建.ppt_第5页
第5页 / 共148页
点击查看更多>>
资源描述

1、第7章 图形用户界面的创建,主讲:朱会东 E-Mail:,本章主要内容,图形用户界面的概述 常用容器类与容器布局管理 事件处理,7.1 图形用户界面的概述,图形用户界面(GUI)是用户与程序交互的窗口,设计和实现图形用户界面时,主要包含两项内容。 (1)创建图形界面中需要的元素,进行相应的布局。 (2)定义界面元素对用户交互事件的响应以及对事件的处理。,用户与计算机系统(各种程序)交互的接口 AWT Swing,AWT,GUI的基本类库位于java.awt包中,这个包被称为抽象窗口工具箱(Abstract Window Toolkit),AWT按照面向对象的思想来创建GUI,它提供了容器类,众

2、多的组件类和布局管理器类。 AWT依赖于本地操作系统 下图显示了AWT的类层次结构。,AWT工具集简介,java.awt包中包含了一个完整的类集以支持GUI程序的设计:,AWT,创建 GUI,通过,java.awt 包,容器,组件,布局管理器,字体,事件,图形和绘制方法,包含 AWT 容器组件,以图形表示的对象允许用户交互,创建并构造用于选择新字体的对象,用于用户和系统交互,AWT包含内容,使用 AWT 图形方法相对于窗口绘制图形,定义 GUI 组件的位置,AWT ( 重量级组件),AWT容器,容器Container能够用来存放别的组件。 有两种类型的容器:Window和Panel。,7.1.

3、1 AWT与Swing,为了使用Java创建的图形界面也能够跨平台,即在不同操作系统中保持相同的外观,从JDK1.2版本开始引入了Swing组件,这些Swing组件位于javax.swing包中,成为JDK基础类库的一部分。 Swing组件是用纯Java语言编写而成的,不依赖于本地操作系统的GUI,Swing组件可以跨平台运行。,Swing,创建 GUI,通过,Javax.swing 包,Swing 包含内容,Swing (轻量级组件,纯Java组件),AWT和Swing是合作关系,而不是用Swing取代了AWT Swing组件都是AWT的Container类的直接子类和间接子类。 Swing

4、组件以“J“开头,除了有与AWT类似的组件外,还增加了一个丰富的高层组件集合,如表格(JTable)、树(JTree)。,7.1.1 AWT与Swing,AWT与Swing顶层窗口类之间的关系,AWT与Swing顶层窗口类之间的关系,分为三类:容器、控制组件和用户自定义成分 (1)容器 容器是用来组织或容纳其他界面成分和元素的组件。 (2)组件它是图形用户界面的最小单位之一,它里面不再包含其他的成分。 (3)用户自定义成分编程人员还可以根据用户的需要,使用各种字型、字体和色彩设计一些几何图形、标志图案等。,7.1.2图形用户界面元素分类,使用组件,通常需要如下的步骤: 创建某控制组件类的对象,

5、指定其大小等属性。 使用某种布局策略,将该控制组件对象加入到某个容器中的指定位置处。 将该组件对象注册给所能产生的事件对应的事件监听程序,重载事件处理方法,实现利用该组件对象与用户交互的功能。,.常用容器类与容器布局管理,容器(Container)实际上是Component的子类,因此容器本身也是一个组件,具有组件的所有性质,另外还具有容纳其它组件和容器的功能。 顶层容器: JApplet, JDialog, JFrame, JWindow 中间容器: JPanel, JScrollPane, JTabledPane 主要功能 组件的管理 布局管理,顶级容器,JFrame:用于框架窗口的类,此

6、窗口带有边框、标题、用于关闭和最小化窗口的图标等。带 GUI 的应用程序通常至少使用一个框架窗口。 JDialog:用于对话框的类。 JApplet:用于使用 Swing 组件的 Java Applet 的类。,中间容器,JPanel:最灵活、最常用的中间容器。 JScrollPane:与 JPanel 类似,但还可在大的组件或可扩展组件周围提供滚动条。 JTabbedPane:包含多个组件,但一次只显示一个组件。用户可在组件之间方便地切换。 JToolBar:按行或列排列一组组件(通常是按钮)。,Swing 容器组件,主窗口,Swing 应用程序,创建容器,设置容器大小 (对框架及面板而言)

7、,设置容器可见度 (对框架及面板而言),创建顶层容器,顶层容器(每个应用 程序中至少有一个),内容面板,主要显示区域包含GUI 中的可视组件,javax.swing 包,常见容器,JFrame,JScrollPane,JPanel,1. 扩展 java.awt.Frame 类 2. 用于在 Swing 程序中创建窗口 3. 包含边框、标题和用于关闭和图标化窗口的按钮,1. 中间容器 2. 用于将较小的轻量级组件组合在一起 3. 与内容窗格相似,面板在默认情况下不透明,管理视区、滚动条及可选的行和列的标题视区,Swing 容器,JFrame是Application程序的图形用户界面容器,是一个有

8、边框、标题、用于关闭和最小化窗口的图标等的容器。带 GUI 的应用程序通常至少使用一个框架窗口。,7.2.1 顶层容器(JFrame),JFrame与Frame的最大区别在于前者不能直接通过add()方法加入组件,也不能直接通过setLayout()方法设置布局。,JFrame类常用的两种构造方法: (1)JFrame()构造一个初始时不可见的新窗体。 (2)JFrame(String title)方法创建一个标签为title的JFrame对象 创建窗体时有两种方式: (1)直接编写代码调用JFrame类的构造器。 (2)继承JFrame类,在继承的类中编写代码对窗体进行详细地刻画,这种方式比

9、较适合窗体比较复杂的情况,7.2.1 顶层容器(JFrame),在加入控制组件之前首先要得到窗口的内容窗格。要想将组件放入内容窗格,可以使用两种方法: (1)通过getContentPane()方法获得其默认的内容窗格,返回类型为Container容器。 (2)通过创建一个新的内容窗格取代顶层容器默认的内容窗格。通常的做法是创建一个JPanel的实例,将组件添加到JPanel实例中,setContentPane()方法将设置为新的内容窗格。,7.2.1 顶层容器(JFrame),JPanel contentPane=new JPanel( ); /设置布局格式,JPanel默认布局为FlowL

10、ayout contentPane.setLayout(new BorderLayout()contentPane. add(button, BorderLayout.CENTER);frame. setContentPane(contentPane);,JFrame jFrame=new JFrame(“Hello“); /获得与JFrame关联的contentPane,contentPane默认的布局管理器为BorderLayout Container contentPane =jFrame.getContentPane(); contentPane.setLayout(new GridL

11、ayout(2, 1); contentPane.add(jLabel) ; contentPane.add(jButton);,JFrame的常用方法,设置框架的大小 public void setSize(int width, int height) 设置框架是否可见 public void setVisible(boolean b) 设置布局方式 public void setLayout(LayoutManager mgr) 添加组件 public Compnent add(Component comp),JFrame的setDefaultCloseOperation(int oper

12、ation)方法用来决定如何响应用户关闭窗体的操作,参数operation有以下可选值: JFrame.DO_NOTHING_ON_CLOSE:什么也不做。 JFrame.HIDE_ON_CLOSE :隐藏窗体,这是JFrame的默认选项。 JFrame.EXIT_ON_CLOSE :结束程序。,基本的 Swing 应用程序,import javax.swing.*; public class HelloSwing public static void main(String args) JFrame frame = new JFrame(“HelloSwing“);JLabel label

13、= new JLabel(“你好,Swing“);frame.getContentPane().add(label); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.setSize(300,200);frame.setVisible(true); ,导入必要的包,一般还需导入:import java.awt.*;import java.awt.event.*;,设置一个 顶级容器,创建一个 Swing组件,将组件添加到 容器内容窗格,实现了在单击“关闭”按钮时, 可以关闭窗口。如果使用的 早期版本的平台,则需要通过事件监听

14、器实现,7.2.2中间容器面板类(JPanel),面板不是一个单独的窗口,它只是包含在窗口中的一个区域,必须被添加到其他容器内部。 面板是可以将许多组件组合起来的一种容器。 最简单的创建面板的方式就是通过面板的构造函数 JPanel() 来进行。 面板也可以嵌套,由此可以设计出复杂的图形用户界面。,JPanel类的常用构造方法如下: public JPanel( )使用默认的FlowLayout方式创建具有双缓冲的JPanel对象。 public JPanel(FlowLayoutManager layout) 在构建对象时指定布局格式。,7.2.2中间容器面板类(JPanel),JPanel

15、的常用方法,设置布局方式 public void setLayout(LayoutManager mgr) 设置面板的大小 public void setSize(int width, int height) 设置背景颜色public void setBackground(Color color); 添加组件 Public Compnent add(Component comp),使用容器示例,import java.swing.*;class JPanelTest extends JPanel public static void main(String args) JPanelTest j

16、p= new JPanelTest();JFrame jf=new JFrame(“正在测试面板!“);jf.add(jp);jf.setSize(300,200);jf.setVisible(true); ,使用GUI组件必须导入该包,将面板添加到 框架窗体中,滚动窗口,可以把一个组件放到一个滚动窗口中,然后通过滚动条来观察这各组件。与JPanel不同的是,它带有滚动条,且只能向滚动窗口添加一个组件 。,7.2.3中间容器滚动面板类(JscrollPane),7.2.3中间容器滚动面板类(JscrollPane),JScrollPane类常用的构造方法: JScrollPane( )创建一个

17、空的JScrollPane JScrollPane(Component view)创建一个显示指定组件内容的JScrollPane,只要组件的内容超过视图大小就会显示水平和垂直滚动条。 JScrollPane(int vsbPolicy,int hsbPolicy)创建一个具有指定滚动条策略的空(无视口的视图)JScrollPane,常用的成员方法: public void setHorizontalScrollBarPolicy(int policy) 确定水平滚动条何时显示在滚动窗格上选项有: ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AS_NEED

18、ED 设置水平滚动条只在需要时显示,默认策略 ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER 水平滚动条永远不显示 ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS 水平滚动条一直显示,7.2.3中间容器滚动面板类(JscrollPane),public void setVerticalScrollBarPolicy(int policy) 确定垂直滚动条何时显示在滚动窗格上。合法值是: ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED设置垂直滚动条只在需

19、要时显示,默认策略 ScrollPaneConstants.VERTICAL_SCROLLBAR_NEVER 垂直滚动条永远不显示 ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS 垂直滚动条一直显示 public void setViewportView(Component view) 创建一个视口并设置其视图。,7.2.3中间容器滚动面板类(JscrollPane),当界面上需要放置的组件很多时,可以使用的另一种容器是JTabbedPane。JTabbedPane容器与我们日常使用的卡片盒类似,它由多个称为标签框架的卡片和表明该框架的标签组成。每个

20、标签框架和标签都自成一个系统(也可称为一张卡片),我们可以在标签框架中加入各式各样的组件及功能。由于这些卡片被叠放在一起,为了使用方便,卡片上的标签在顶行或底部排成一行(也可以在左边或右边排成一列),当用鼠标点击某一个标签时,这个标签所在的卡片(标签框架窗口)就会被翻到最上面,显示出此框架的内容。,JTabbedPane容器,JTabbedPane类的继承关系如下: java.lang.Objectjava.awt.Componentjava.awt.Containerjavax.swing.JComponentjavax.swing.JTabbedPane 可以使用下述两个构造方法创建JTa

21、bbedPane类的对象: JTabbedPane( ):创建一个空的JTabbedPane对象。 JTabbedPane(int tapposition):创建一个空的JTabbedPane对象,并指定标签的位置,如TOP、BOTTOM、LEFT或RIGHT。,【示例程序cc.java】 建立带多个卡片的窗口。 import javax.swing.*; import java.awt.*; import java.awt.event.*; public class cc extends JFrame / 创建 JTabbedPane 对象,并指定标签显示在上方JTabbedPane jta

22、b=new JTabbedPane(JTabbedPane.TOP); JScrollPane sp; /声明JScrollPane对象public static void main(String args ) cc f=new cc( );f.setTitle(“JTabbedPane对象的应用“);f.setSize(300,300); f.setVisible(true);,public cc( ) JLabel lb =new JLabel6; /声明JLabel 数组Icon pic; /创建图片对象String title; /创建标签名称对象for(int i=1;i=5;i+)

23、 pic=new ImageIcon(“00“+i+“.jpg“); /获得图片lbi=new JLabel( ); /创建 JLabel 对象lbi.setIcon(pic); /设定 JLabel 图标title = “第 “+ String.valueOf(i) +“ 页“; /设定标签名称jtab.add(title,lbi); /将 JLabel 对象加入 jtab,getContentPane( ).add(jtab); /将 jtab 加入到窗口中int v=ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED;int h=Scroll

24、PaneConstants.HORIZONTAL_SCROLLBAR_AS_NEEDED;sp=new JScrollPane(jtab,v,h); /创建JScrollPane对象,并加载jtab对象getContentPane( ).add(sp); /将 sp 加入窗口中addWindowListener(new WinLis( );class WinLis extends WindowAdapter public void windowClosing(WindowEvent e) System.exit(0); ,图 程序cc的运行结果,7.2.4布局管理器,用户界面上的组件可以按不同

25、方式排列。 Java使用布局管理器来管理这些排列方式。 每当需要重新调整屏幕大小或重新绘制屏幕上任一项目时,就要用到布局管理器。 AWT提供一组用来进行布局管理的类,称为布局管理器或布局。所有布局都实现 LayoutManager接口。,7.2.4布局管理器,每个容器(Container对象)都有一个与它相关的缺省的布局管理器。 - Applet 的缺省布局是 FlowLayout 在没有设置新的布局前,在容器中添加组件都按照该容器的缺省布局排列。 可以通过setLayout( )方法为容器设置新的布局。,7.2.4布局管理器,为了将组件排列在容器中合适的位置上,Java.awt包中共定义了五

26、种布局编辑类,分别是FlowLayout,BorderLayout,CardLayout,GridLayout和GridBagLayout,这五个类都是java.lang.Object类的直接子类。Javax.swing包中定义了4种布局编辑类,分别是BoxLayout、ScrollPaneLayout、ViewportLayout和OverlayLayout。,1.FlowLayout布局管理器FlowLayout的布局策略是将遵循这种布局策略的容器中的组件按照加入的先后顺序从左向右排列,当一行排满之后就转到下一行继续从左至右排列. FlowLayout定义在java.awt包中.,7.2.

27、4布局管理器,FlowLayout mylayout = new FlowLayout(); FlowLayout exLayout = new FlowLayout(FlowLayout.RIGHT); setLayout(exlayout); / 为容器设置新布局,1.FlowLayout布局管理器,容器,流布局是面板的默认布局管理器,左上角,右下角,依次排序的组件,垂直或水平间距,7.2.4布局管理器,组件采用从左到右,从上到下逐行摆放。, setLayout(new FlowLayout(int align,int hgap, int vgap),FlowLayout.LEFT Flo

28、wLayout.RIGHT FlowLayout.CENTER 缺省是居中,2.BorderLayout布局管理器 每个BorderLayout管理的容器被为东、西、南、北、中五个区域,这五个区域分别用字符串常量 BorderLayout.EAST、 BorderLayout.WEST、 BorderLayout.SOUT、 BorderLayout.NORTH、 BorderLayout.CENTER 表示,每个区域,都可以加入一个组件,往容器内加入组件时都应该指明把它放在容器的哪个区域中,7.2.4布局管理器,BorderLayout 2-1,上边的组件,左 边 的 组 件,右 边 的 组

29、 件,下边的组件,容器,North,South,East,West,CENTER,7.2.4布局管理器,3.GridLayout布局管理器 是一种网格式的布局管理器,它将容器空间划分成若干行乘若干列的网格,而每个组件按添加的顺序从左到右、从上到下占据这些网格,每个组件占据一格,7.2.4布局管理器,行,列,组件大小相同,重新调整组件大小 以适合各自的单元,指定网格中的行数和列数,创建网格布局,GridLayout布局管理器,GridLayout布局管理器,GridLayout布局管理器,. . . Button btn; / 声明按钮数组String str=“1“,“2“,“3“,“4“,“

30、5“,“6“,“7“,“8“,“9“;setLayout(new GridLayout(3,3);btn=new Buttonstr.length; / 创建按钮数组for(int i=0;istr.length;i+)btni=new Button(stri); add(btni);,CardLayout布局管理器,使用CardLayout 的容器可以容纳多个组件,但是实际上同一时刻容器只能从这些组件中选出一个来显示,就像一叠“扑克牌”每次只能显示最上面一张一样,这个被显示的组件将占据所有的容器空间,依次排序。 卡片通常为一个 Panel 对象。 每当需要许多面板切换,而每个面板需要显示为不

31、同布局时,可以使用卡片布局。,public class CardLayoutDemo extends JFrame public exam01() JButton bt1 = new JButton(“按钮A“); JButton bt2 = new JButton(“按钮B“); JButton bt3 = new JButton(“按钮C“); CardLayout card = new CardLayout(20, 20); Container cp = getContentPane(); cp.setLayout(card); cp.add(“a“, bt1); cp.add(“b“,

32、 bt2); cp.add(“c“, bt3); card.next(cp); / 显示按钮B setSize(400, 300); setVisible(true); public static void main(String args) new CardLayoutDemo (); ,4.BoxLayout布局管理器 它将容器中的组件按水平方向排成一行或者垂直方向排成一列。当组件排成一行时,每个组件可以有不同的宽度,当排成一列时,每个组件可以有不同的高度。 BoxLayout布局管理器构造方法是:BoxLayout(Container target,int axis)其中,target是

33、容器对象,表示要为哪个容器设置此布局管理器;axis指明target中组件的排列方式,7.2.4布局管理器,BoxLayout类常用的成员方法,javax.swing包中定义了一个专门使用BoxLayout布局管理器的特殊容器Box类 Box的构造函数为:Box(int axis),axis表示水平排列的BoxLayout.X_AXIS或垂直排列的BoxLayout.Y_AXIS。 可使用Box类提供的创建Box实例的静态方法创建: public static Box creatHorizontalBox( ) public static Box creatVerticalBox( ),7.2

34、.4布局管理器,为方便布局管理,Box类还提供了4种透明组件Glue、Strut、Rigid和Filler,可以将这些透明组件插入其他组件的中间。这4种透明组件的作用是: Glue:将Glue两边的组件挤到容器的两端。 Strut:将Strut两端的组件按水平或垂直方向指定的大小分开。 Rigid:可以设置二维的限制,将组件按水平或垂直方向指定的大小分开。 Filler:不仅可以设置二维的限制,将组件按水平或垂直方向指定的大小分开,而且还可以设置最大、较佳、最小的长宽大小,7.2.4布局管理器,Box类常用的成员方法,使用BoxLayout时需要注意的事项,(1) 当组件按BoxLayout布

35、局排列好后,不管窗口缩小或放大都不会变动。(2) 当使用水平排列方式时,若放进去的组件不等高,则系统将会使所有的组件与最高组件等高。(3) 当放在同一行的组件超出容器的宽度时,系统不会自动换行,需要用户自行处理。,如何选择布局管理器,要使组件尽量充满容器空间 BorderLayoutGridBagLayout 要使组件以自然大小紧凑的在一行中显示 FlowLayout 组件大小相同,并且成行或成列显示 GridLayout,7.3 事件处理,GUI程序是由事件(event)驱动的 当用户与GUI交互可以产生事件(events) 一些常见的交互方式 移动鼠标、用鼠标点击按钮、在文本框中输入数据

36、、关闭窗口等 设计和实现图形用户界面的工作主要有两个: 一是创建组成界面的各种成分和元素,构成完整的图形用户界面的物理外观; 二是定义图形用户界面的事件和各界面元素对不同事件的响应,实现图形用户界面与用户的交互功能。,7.3 事件处理,Java 最新的事件处理方法是基于委托事件模型,整个“委托事件模型”由产生事件的对象(事件源)、事件对象及监听者对象之间的关系所组成。 事件源生成事件并将其发送至一个或多个监听器 监听器简单地等待,直到它收到一个事件。一旦事件被接受,监听器将处理这些事件,然后返回。,用户交互,事 件,单击鼠标,按下/释放鼠标按钮,对象状态改变,调用事件处理,确定发生的事件的类型

37、,确定生成的事件的组件,编写合适的代码处理事件,7.3.1 事件处理模型,源对象,监听器,事件,传播,事件的实例,方法,传递途径,代理事件模型,Swing 中的 GUI 组件,适配器对象,7.3.1 事件处理模型,7.3.1 事件处理模型,主要涉及三种对象和一个接口 事件源(An event source) 事件对象(An event object) 事件监听器(event listener(s) 处理事件的接口(event interface),事件源 能够产生事件的对象都可以成为事件源,如文本框、按钮、下拉式列表等 事件对象 封装了包含所发生的各种事件的有效信息 信息包括: 事件源的引用、

38、以及事件监听器在处理事件时所需要的其它各种信息 事件信息被包含在类AWTEvent或其子类的实例对象中,7.3.1 事件处理模型,事件监听器 接受事件对象,并处理事件对象,事件源通过调用相应的方法将某个对象作为自己的监视器。例如,对于文本框,这个方法是: addActionListener(监视器);创建该监视器对象的类必须声明实现相应的接口 处理事件的接口 接口中声明的是事件对应的处理方法,当事件源发生事件时,监视器就自动调用执行被类实现的某个接口方法。,7.3.1 事件处理模型,按钮单击事件示例,public class MyEventTest extends Panel Button m

39、yButton = new Button(“蓝色“);. . . / 创建面板或其他 GUI 组件 MyListener myAction = new MyListener();MyButton.addActionListener(myAction);private class MyListener implements ActionListener public MyListener() . . . / 初始化 public void actionPerformed(ActionEvent event) . . ./需要为事件进行的操作 ,实现了ActionListener接口的监听器,实现

40、了actionPerformed方法,以便根据参数 ActionEvent 对象的信息对事件做出响应,为按钮事件 注册监听器,对于某种类型的事件XXXEvent, 必须定义相应的事件监听器类,该类需要实现针对特定事件的特定接口XXXListener;例如: ActionEvent ActionListener 事件源中,必须注册该类事件的监听器,使用addXXXListener(XXXListener ) 来注册监听器。 事件发生后,产生表示特定事件的事件对象,事件对象被传递给已经注册的事件监听器,调用监听器中的特定方法处理事件,事件处理的一般方法:,处理事件示意图,不同事件源上发生的事件种类

41、不同,不同的事件有不同的监听者处理。所以在java.awt.event包和javax.swing.event包中还定义了很多其他事件类。每个事件类都有一个对应的接口,接口中声明了若干个抽象的事件处理方法,事件的监听程序类需要实现相应的接口,7.3.2 事件及监听者,7.3.2 事件及监听者,事件体系结构,事件对象,java.util.EventObject类EventObject类是所有事件对象的基础类,所有的事件类都是由它派生出来的。public class EventObject implements java.io.Serializable protected transient Obj

42、ect source;public EventObject(Object source);public Object getSource();public String toString();,事件监听器接口,每类事件都有对应的事件监听器接口 监听器是实现接口的类,根据动作来定义方法。 interface KeyListener extends EventListener public void keyPressed(KeyEvent ev);public void keyTeleased(KeyEvent ev);public void keyTyped(KeyEvent ev);,注册和注

43、销监听器,注册监听器: public void add(listener); 注销监听器: public void remove(listener); 每个组件都有注册和注销监听器的方法,1.AWT中的常用事件类及其监听者,和AWT有关的所有事件类都由java.awt.AWTEvent类派生 ,它也是EventObject类的子类。AWT事件共有10类,可以归为两大类: 低级事件 高级事件。,1.AWT中的常用事件类及其监听者,低级事件是指基于组件和容器的事件,如:鼠标的进入,点击,拖放等。低级事件主要包括: ComponentEvent、ContainerEvent、WindowEvent、

44、FocusEvent、KeyEvent、MouseEvent 高级事件是基于语义的事件,它可以不和特定的动作相关联,而依赖于触发此事件的类,如在TextField中按Enter键会触发ActionEvent事件。高级事件主要包括: ActionEvent、AdjustmentEvent、ItemEvent、TextEvent,AWT 事件类型 2-1,AWT 事件类型 2-2,监听器接口,监听器通过实现 java.awt.event 包中定义的一个或多个接口来创建。 在发生事件时,事件源将调用监听器定义的相应方法。 有兴趣接收事件的任何监听器类都必须实现监听器接口。,监听器接口列表 2-1,监

45、听器接口列表 2-2,2.Swing中的常用事件类及其监听者,使用Swing组件时,对于比较低层的事件需要使用AWT包提供的处理方法对事件进行处理。在javax.swing.event包中也定义了一些事件类表7.2列出了常用的Swing事件及其相应的监听器接口。,7.3.3窗口事件,当一个窗口被激活、禁止、关闭、正在关闭、最小化、恢复、打开时将生成窗口事件WindowEvent 。 WindowEvent类的主要方法有getWindow( )和getSource( )。 这两个方法的区别是:getWindow( )方法返回引发当前WindowEvent事件的具体窗口,返回值是具体的Window

46、对象;getSource( )方法返回的是相同的事件引用,其返回值的类型为Object,事件WindowEvent 对应的监听器接口是WindowListener 需要实现的方法如下: windowActivated、 windowClosed windowClosing、 windowDeactivated windowDeiconified、windowIconified windowOpened,窗口事件示例,class MyFrame extends Frame boolean w; public MyFrame() w=false; setTitle(“测试适配器类“); setSi

47、ze(300, 200); MyPanel panel = new MyPanel(); add(panel); addWindowListener(new MyWindowAdapter();private class MyWindowAdapter extends WindowAdapterpublic void windowClosing(WindowEvent wevent)if(w) dispose();else System.exit(0); ,实现了windowClosing方法,以响应窗口关闭时的事件,import java.awt.*;import java.awt.even

48、t.*;public class MyAdapterDemopublic static void main(String args) MyFrame frm = new MyFrame();frm.show();,7.3.4事件适配器,为了使事件处理变得简单,Java 为具有多个方法的监听器接口提供适配器类。适配器类实现并提供了一个事件监听器接口中的所有的方法,但这些方法都是空方法。 例如WindowAdapter类实现了WindowListener接口。因此,可以使用WindowAdapte的子类创建的对象做监视器,在子类中重写所需要的接口方法即可,事件接口与适配器类,事件接口与适配器类,当按下、释放或敲击键盘上一个键时,就发生了键盘事件keyEvent 。 事件源使用addKeyListener方法注册监视器。 生成 keyEvent 时将调用 KeyListener接口对象。如果程序需要处理特殊的键,如方向键,需要通过调用keyPressed( ) 方法来处理。,public void keypressed(keyEvent k)int keyCode = k.getKeyCode();if ( keyCode = k.VK_RIGHT & k.isShiftDown() . . . ,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 网络科技 > 图形图像

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报