资源描述
,单击此处编辑母版标题样式,2,#,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第,16,章 图形界面编程,图形用户界面(,Graphical User Interface,)简称,GUI,,提供了一种更加直观、友好的与用户进行交互的方式。利用,Java,语言进行图形用户界面操作主要由,java.awt,和,javax.swing,两个包来完成。其中,,AWT,包是图形用户界面处理的基本工具包,,Swing,包在,AWT,包的基础上进行了升级、扩展,具有更加强大的图形界面开发功能。本章在了解,AWT,包功能的基础上,重点讲解,Swing,的功能。,1,2025/4/20 周日,16.1 AWT,简介,Java 1.0,的出现带来了抽象窗口工具箱(,AWT,)。设计目标是希望构建一个通用的,GUI,,使得利用它编写的程序能够运行在所有的平台上,以实现,Sun,公司提出的口号“一次编写,随处运行”。,Java AWT,中包含了许多类来支持,GUI,设计。,AWT,由,Java,的,java.awt,包提供,该包中有许多用来设计,GUI,的组件类,如按钮、菜单、列表、文本框等组件类;同时还包含窗口、面板等容器类。,AWT,的具体层次结构如图,16.1,所示。,2,2025/4/20 周日,16.1 AWT,简介,Java,提供了一系列,AWT,软件包,其中主要的包及包的描述如图,16.2,所示。,3,2025/4/20 周日,16.1 AWT,简介,java.awt,包提供了基本的,Java,程序的,GUI,设计工具。主要包括组件、容器和布局管理器三个概念,其具体描述如图,16.3,所示。,4,2025/4/20 周日,16.2 Swing,简介,Swing,是,Java,基础类库(,Java Foundation Classes,)中有关图形界面的类库。,Swing,扩展自,AWT,。例如,JFrame,扩展自,Frame,,,JButton,扩展自,Component,等。基本上,AWT,中的每种控件都能在,Swing,中找到替代品,比如,AWT,中的,Button,对应于,Swing,中的,JButton,,,AWT,中的,TextField,对应于,Swing,中的,JTextField,等。,5,2025/4/20 周日,16.2 Swing,简介,Swing,包是,JFC,(,Java Foundation Classes,)的一部分,它由许多包组成,这些包的名称及描述如表,16.1,所示。,包名,包的描述,Com.sum.swing.plaf.motif,实现,Motif,界面样式代表类,Com.sum.java.swing.plaf.windows,实现,Windows,界面样式的代表类,javax.swing,Swing,组件和使用工具,javax.swing.border,Swing,轻量组件的边框,javax.swing.colorchooser,JcolorChooser,的支持类,/,接口,javax.swing.event,事件和侦听器类,javax.swing.filechooser,JFileChooser,的支持类,/,接口,javax.swing.pending,未完全实现的,Swing,组件,javax.swing.plaf,抽象类,定义,UI,代表的行为,javax.swing.plaf.basic,实现所有标准界面样式公共基类,javax.swing.plaf.metal,它们实现,Metal,界面样式代表类,javax.swing.table,Jtable,组件,javax.swing.text,支持文档的显示和编辑,javax.swing.text.html,支持显示和编辑,HTML,文档,javax.swing.text.html.parser,Html,文档的分析器,javax.swing.text.rtf,支持显示和编辑,RTF,文件,javax.swing.tree,Jtree,组件的支持类,javax.swing.undo,支持取消操作,6,2025/4/20 周日,16.3,容器类,窗口(,JFrame,)、面板(,JPanel,)和对话框(,J,)是,Swing,中提供用来创建表示图形用户界面的类。该类的对象将被当作容器使用,所有的,Swing,组件都必须被添加到容器中,才能被显示出来。,7,2025/4/20 周日,16.3.1 JFrame,类,JFrame,是一个窗口容器组件,可以被显示在用户桌面上,同时也是一个框架,在其中,可以添加需要的其他的,Swing,组件。,JFrame,是少数几个不是通过绘制的方式显示的,Swing,组件。,JFrame,类的构造方法如图,16.5,所示。,8,2025/4/20 周日,16.3.1 JFrame,类,JFrame,类中还提供了一些与窗口有关的方法。其主要方法与方法描述如表,16.2,所示。,方法,方法描述,public void setVisible(boolean b),判断窗体是否可见。如果参数,b,为,true,则表示显示该窗体,否则表示不可见,public void setBackground(Color c),设置窗体背景颜色,public void setTitle(String s),设置标题。其中参数,s,表示要显示在窗体边界中的标题,public String getTitle(),获取窗体边界的标题。如果没有标题则返回空字符串,public void pack(),调整适合其子组件的大小和布局窗口的大小,public void setResizable(boolean resizable),设置窗口大小是否可以调整,public Container getContentPane(),返回此窗体的,contentPane,对象,public void setLayout(LayoutManager manager),设置布局管理器,public void validate(),验证容器及其容器中的组件,9,2025/4/20 周日,16.3.2 JDialog,类,JDialog,是一个用来创建对话框的类,是,Dialog,类的子类。创建的,JDialog,对象可以用来向用户返回信息,接收用户的输入,实现与用户的交互。,JDialog,与,JFrame,的区别在于:,JDialog,对象需要依赖于其他的对话框(比如,Jframe,)而存在,当它所依赖的对话框关闭或最小化的时候,该对话框也随之关闭或最小化。,10,2025/4/20 周日,16.3.2 JDialog,类,JDialog,类创建对话框对象的构造方法如图,16.7,所示。,JDialog,类中的主要方法及方法描述如表,16.3,所示。,方法,方法描述,String getTitle(),用于获取对话框的名字,void setTitle(String s),用于设置对话框的名字,void setModal(boolean b),用于设置对话框的模式,setSize(int width,int height),用于设置对话框的大小,void setVisible(boolean b),用于设置对话框是否可见,11,2025/4/20 周日,16.3.3,JPanel,类,在得到了,JFrame,的内容面板后我们就可以直接将其他的,Swing,组件放在其中,或者直接在上面描绘图画或文字,但是习惯上一般不会这么做。通常会将这些图画或文字信息描绘在名为,JPanel,的容器上,然后再将,JPanel,实例放在内容面板上。这样可以使得面板上的布局更合理。,JPanel,通常只作为纯粹的容器来使用,它不能像框架、窗口或者对话框那样独立存在。,JPanel,的构造方法如图,16.9,所示。,12,2025/4/20 周日,16.4 Swing,常用基本组件,创建图形用户界面,GUI,,就是为了让计算机程序更好的和用户交互。,Java Swing,提供了二十多种不同的用户界面组件。所有的,Swing,组件都是从,javax.swing.Jcomponent,类中派生而来的,从而继承了组件所特有的属性和方法。,13,2025/4/20 周日,16.4.1,常用组件的共性操作,Swing,类库中的组件都继承自,javax.swing.JComponent,,因此都具有,JComponent,的操作,包括设置背景色、设置前景色、设置字体以及设置是否禁用等。表,16.4,中是,JComponent,中常用的方法及方法描述。,方法,方法描述,int getHeight(),返回组件高度,int getWidth(),返回组件宽度,String getToolTipText(),返回工具提示,void setToolTipText(String text),设置工具提示,Dimension getSize(Dimension rv),返回尺寸,int getX(),返回位置,x,void setBackground(Color bg),设置背景色,void setOpaque(boolean isOpaque),设置是否透明,void setVisible(boolean aFlag),设置是否可见,void setFont(Font font),设置字体,void setBorder(Border border),设置边框,14,2025/4/20 周日,16.4.2,按钮(,JButton,),按钮是用户界面中常用的组件。用户使用,Swing,按钮可以显示图像,将整个按钮设置为窗口默认图标,来处理鼠标在按钮上的事件。,java.swing,包中提供了标准的按压式按钮(,JButton,)。同时提供了选择式按钮:多选择(,JCheckBox,)、单选择(,JRadioButton,)等。我们在这里先来讲解,JButton,的知识。,JButton,的构造方法如图,16.11,所示。,15,2025/4/20 周日,16.4.3,文本框(,JTextField,)与密码输入框(,JPasswordField,),文本框(,JTextField,)也是一种常见的组件,用于处理一行文本(中间没有回车符)。,JTextField,是,JTextComponent,的子类。密码输入框是,JTextField,的一个子类。,JTextField,和,JPasswordField,的构造函数形式和常用方法完全一样。这里只列出,JTextField,的构造函数,如图,16.13,所示。,16,2025/4/20 周日,16.4.4,文本域(,JTextArea,),文本域(,JTextArea,)也是一种常用组件,用于处理多行文本。,JTextArea,同,JTextField,一样,都是,JTextComponent,的子类,因此它们的很多操作都类似,我们不再赘述。,JTextArea,的构造函数如图,16.15,所示。,17,2025/4/20 周日,16.4.5,标签(,JLabel,),标签,(JLabel),用来显示一段文本,常用在,JTextField,或者,JTextArea,前面,提示用户要填写什么样的信息。,JLabel,用于显示文字,也可以同时显示文字和图标,一般不用于接收鼠标键盘的动作。,JLabel,的构造方法如图,16.17,所示。,18,2025/4/20 周日,16.4.6,单选按钮(,JRadioButton,),JRadioButton,用来实现单选按钮组件,按钮有选中和没被选中两种状态。多个单选按钮中,一次只能有一个按钮处于被选中状态。,JRadioButton,的构造方法如图,16.19,所示。,19,2025/4/20 周日,16.4.7,复选框(,JCheckBox,),JCheckBox,是用来实现,JCheckBox,的组件。复选框是一个可以被选定和取消选定的项,它将其状态显示给用户。一次可以选中多个复选框。,JCheckBox,类的构造方法如图,16.21,所示。,20,2025/4/20 周日,16.4.8,下拉列表(,JComboBox,),下拉列表(,JComboBox,)是一种常见的组件。用户可以从下列的菜单列表中选择所需要的数据。一个下拉列表只能选择一个选项。,JComboBox,的构造方法如图,16.23,所示。,可以将需要在下拉列表中显示的各项放入一个数组中,然后利用其相应的构造方法将数组元素的各项显示出来。,21,2025/4/20 周日,16.4.9,列表(,JList,),JList,是用来表示列表的组件。该组件与下拉列表不同,它可以显示多个项目的内容,并且允许用户从列表中选择一个或多个对象。,JList,的主要构造方法如图,16.25,所示。,与下拉列表相同,可以将需要显示的内容先放入一个数组中,然后使用带有,Object,类型数组为参数的的构造方法创建一个,JList,对象,将列表中各项显示出来。,22,2025/4/20 周日,16.4.10,滚动条(,JScrollPane,),JscrollPane,类的对象可以创建一个垂直或者水平方向的滚动条。在实际使用中,它需要和某个容器相关联。例如,表格、窗体等。,JScrollPane,类的构造方法如图,16.27,所示。,23,2025/4/20 周日,16.5 Swing,高级组件,16.4,小节中我们介绍了,Swing,基本组件,但在实际应用中,对于一些比较复杂的界面,除了使用这些基本组件之外,还需要使用诸如表格、菜单、工具栏等这些组件。本节我们就来介绍,Swing,中的一些高级组件的创建和使用,包括表格、树、菜单,以及对话框等组件。,24,2025/4/20 周日,16.5.1,表格(,JTable,),表格(,JTable,)是,Swing,新增加的组件,主要是为了将数据以表格的形式显示。,JTable,是一个用来显示和编辑二维单元表格的组件。可以通过创建一个二维数组对象,并将二维数组中定义并初始化的值放入到表中。,Jtable,创建表格的主要构造方法如图,16.29,所示。,25,2025/4/20 周日,16.5.2,树(,JTree,),树是非常重要也是常用的一种数据结构。在计算机中也有着广泛的应用,计算机中的目录和文件的存储结构都是树形的。在,Swing,中,可以使用,JTree,来构建一个树形结构模型。首先我们可以先举一个树形结构的例子,例如在“我的电脑”的,C,盘下的目录结构,如图,16.31,所示。,26,2025/4/20 周日,16.5.2,树(,JTree,),在这个图中我们要注意以下几点:,一颗树中只有一个根结点。其余结点都是从该结点引出。,除根结点外。其余结点要么是没有子结点的结点要么是带有子结点的结点。没有子结点的结点称为叶子结点。,在图,16.31,的树结构中,“计算机”是根结点,“,Intel,”文件是一个叶子结点,“,NVIDIA,”文件是一个带有子结点的结点。,然后我们看,JTree,的主要的构造方法,如图,16.32,所示。,27,2025/4/20 周日,16.5.3,菜单(,JMenu,),菜单(,JMenu,)是标题栏下面的一行文字部分。菜单是应用程序中最常用的组件。菜单的组织方式为:一个菜单条,JMenuBar,包含多个菜单项(,JMenuItem,)。,JMenuItem,有两个子类,分别为,JRadioButtonMenuItem,及,JCheckBoxMenuItem,用于表示单选菜单项和复选菜单项。,28,2025/4/20 周日,16.5.3,菜单(,JMenu,),JMenu,组件类的主要构造方法如图,16.34,所示。,创建菜单项的,JMenuItem,的主要构造方法如图,16.35,所示。,29,2025/4/20 周日,16.5.4,工具栏(,JToolBar,),工具栏(,JToolBar,)提供了一种可以快速访问界面中常用命令的方式。通常工具栏应该放到边界布局中的一边。可以水平和垂直放置,也可以拖动工具栏将其放置在想要放置的位置。工具栏一般放到菜单栏的下面,可以把菜单栏中的常用命令放到工具栏中,以方便用户操作。,30,2025/4/20 周日,16.5.4,工具栏(,JToolBar,),Java,中可以通过创建,JToolBar,对象来实现工具栏。,JToolBar,的主要构造方法如图,16.37,所示。,orientation,参数可以是以下两个值中的任何一个。,SwingConstants.HORIZONTAL,表示工具栏以水平方向放置。,SwingConstants.VERTICAL,表示工具栏以垂直方向放置。,31,2025/4/20 周日,16.5.5,进程条(,JprogressBar,),进程条(,JprogressBar,)是以图形化的方式来描述任务进度的组件。在任务完成过程中,进度条显示该任务完成的百分比,百分比通常用可视化的矩形表示,该矩形开始为空,随着任务的执行,组件被填满。,JprogressBar,的主要构造方法如图,16.39,所示。,32,2025/4/20 周日,16.5.6,对话框(,JDialog,),对话框是一种大小不能变化、不能有菜单的容器窗口,对话框不能作为一个应用程序的主框架,而必须包含在其他的容器中。,Java,语言提供多种对话框类来支持多种形式的对话框。我们这里只为大家介绍一下简单的标准对话框,JOptionPane,。,33,2025/4/20 周日,16.5.6,对话框(,JDialog,),JOptionPane,提供的对话框是模式对话框。使用,JOptionPane,,可以创建和自定义问多种类型的对话框。,JOptionPane,类的构造方法如图,16.41,所示。,34,2025/4/20 周日,16.6,布局管理器,在,Java,语言中,把创建的组件放置到对话框中,需要设置对话框界面的格式,这时候就必须使用布局管理器(,layout manager,),来排列界面上的组件。,当组件被加入到容器中时,将如何排列,都由布局管理器来进行管理。,Java,中的布局管理器包括:,FlowLayout,、,GridLayout,、,BorderLayout,、,CardLayout,和,GridBagLayout,。当创建好需要的布局管理器后,就可以调用容器的,setLayout(),方法,来设定该容器的布局方式。下面我们为大家具体介绍几种主要的布局管理器。,35,2025/4/20 周日,16.6.1 BorderLayout,管理器,BorderLayout,布局管理器将容器划分为东(,East,)、西(,West,)、南(,South,)、北(,North,)、中(,Center,)五个区域。它是,Frame,类的默认布局管理器。采用,BorderLayout,布局时,向容器中添加组件需要指定组件所在的区域。其大致所分区域如图,16.43,所示。,36,2025/4/20 周日,16.6.1 BorderLayout,管理器,BorderLayout,类的主要构造方法如图,16.44,所示。,图中参数,align,指定了布局的位置,如表,16.5,所示。,参数,参数描述,BorderLayout.CENTER,中间,BorderLayout.EAST,东边,BorderLayout.WEST,西边,BorderLayout.SOUTH,南边,BorderLayout.NORTH,北边,37,2025/4/20 周日,16.6.2 FlowLayout,管理器,流动布局是使用,FlowLayout,类来创建的。该布局方式是最简单的一种布局管理器,其排列组件的方式是按照:从左到右排列,当组件排列到容器行尾时,会自动换行并继续排列剩下的组件。它是,Panel,类的默认布局管理器。我们可以调用相关方法设置不同的组件间距、行距以及对齐方式。,FlowLayout,管理器的布局示意图如图,16.46,所示。,38,2025/4/20 周日,16.6.2 FlowLayout,管理器,FlowLayout,类的主要构造方法如图,16.47,所示。,39,2025/4/20 周日,16.6.2 FlowLayout,管理器,图中参数,align,指定一种对齐方式。其具体描述如表,16.6,所示。,如果对窗体的大小进行调整,组件在流布局中会根据窗体调整的大小重新调整其位置。如图,16.49,所示。,参数,参数描述,FlowLayout.LEFT,靠左排列,FlowLayout.CENTER,置中排列,FlowLayout.RIGHT,靠右排列,FlowLayout.LEADING,对齐左边界,FlowLayout.TRAILING,对齐右边界,40,2025/4/20 周日,16.6.3 CardLayout,管理器,网格布局,GridLayout,管理器,可以将容器划分为若干行与若干列的网格区域,并将组件放置在由行和列组成的网格中。采用,GridLayout,布局时,在容器中按照从左到右、从上到下的顺序往网格中逐个添加组件。,GridLayout,管理器的布局示意图如图,16.50,所示。,41,2025/4/20 周日,16.6.3 CardLayout,管理器,GridLayout,类的主要构造方法如图,16.51,所示。,GridLayout,类提供的对网格布局中的行、列,以及水平和垂直间距进行设置的方法如表,16.7,所示。,方法名称,方法描述,public void setRows(int rows),设置布局中的行数,public void setColumns(int cols),设置布局中的列数,public void setHgap(int hgap),设置布局中组件之间的水平距离,public void setVgap(int vgap),设置布局中组件之间的垂直距离,42,2025/4/20 周日,16.6.4 GridBagLayout,管理器,GridBagLayout,布局管理器在,GridLayout,布局管理器的基础上提供了更加复杂的功能。采用,GridBagLayout,布局时,一个组件可以跨越多个行列放在多个网格内。另外,可以通过设定填充方式、间距等任意调整组件的大小和位置。,GridBagLayout,管理器的布局示意图如图,16.53,所示。,43,2025/4/20 周日,16.6.4 GridBagLayout,管理器,GridBagLayout,类的构造方法与,GridLayout,类的构造方法基本相同,只是在,GridLayout,类基础上又增加了一些属性,如表,16.8,所示。,新增属性,属性描述,int anchor,指定组件在区域中放置的位置,int fill,指定组件填充方式,int gridheight,指定组件的高度,单位为网格个数,int gridwidth,指定组件的宽度,单位为网格个数,int gridx,指定组件的横向坐标,单位为网格个数,int gridy,指定组件的纵向坐标,单位为网格个数,Insets insets,指定组件与区域的间隔大小,44,2025/4/20 周日,16.6.5 CardLayout,管理器,CardLayout,布局管理器用于将组件以卡片的形式进行布局。采用,CardLayout,布局,每张卡片属于不同的层次,并且充满整个容器。它将容器中的每个组件看作一张卡片。任何情况下,一次只能看到一张卡片,即一次只有一个组件可见。组件的顺序由组件对象本身在容器内部的顺序决定。,CardLayout,管理器的布局示意图如图,16.55,所示,。,45,2025/4/20 周日,16.6.5 CardLayout,管理器,CardLayout,类的主要构造方法如图,16.56,所示。,CardLayout,类提供了一些方法用来翻转该布局中的组件。具体方法及其描述如表,16.9,所示。,方法,方法描述,public void first(Container parent),翻转到容器的第一张卡片,public void last(Container parent),翻转到容器的最后一张卡片,public void next(Container parent),翻转到指定容器的下一张卡片,public void previous(Container parent),翻转到指定容器的前一张卡片,public void setHgap(int hgap),设置组件之间,以及组件与,Container,的边之间水平间隙,public void setVgap(int vgap),设置组件之间,以及组件与,Container,的边之间垂直间隙,public int getHgap(),获得组件之间,以及组件与,Container,的边之间的水平间隙,public int getVgap(),获得组件之间,以及组件与,Container,的边之间的垂直间隙,46,2025/4/20 周日,16.6.5 CardLayout,管理器,我们可以单击“前一张卡片”按钮和“后一张卡片按钮”,发现实际显示在窗体的只能是一个按钮。且它们是按顺序排列的,如图,16.58,所示。,47,2025/4/20 周日,16.6.6,不使用布局管理器定位组件,不同的布局管理器会将组件定位在不同的位置。但是,有些时候并不想使用指定的某个布局管理器对组件进行定位。而是想按照自己的设计对组件进行定位,这时我们可以使用,setBounds(),方法来完成这一任务。,setBounds(),方法的语法格式如图,16.59,所示。,48,2025/4/20 周日,16.7 Swing,的事件处理,前面几小节的主要内容是讨论组件的使用以及容器的布局,这些内容使,Java,图形用户界面的程序设计变得灵活方便,与图形界面程序密切相关的还有一个比较重要的内容,事件处理机制。,49,2025/4/20 周日,16.7.1,事件处理机制概述,事件处理是图形界面与用户进行交互的重要内容。,Java,语言的事件处理机制包括事件源、事件、事件处理器三个主要的概念。首先需要为事件源注册相应的事件处理器,事件源产生指定事件后,事件处理器捕获后进行相应事件处理。其大致处理机制如图,16.61,所示。,50,2025/4/20 周日,16.7.1,事件处理机制概述,以下是对三个概念的说明:,事件源:产生事件的各种组件,如窗口、按钮、复选框等。,事件:用户对事件源的各种操作动作。,事件处理器:用于接收并处理事件的方法。,在图形用户界面的程序中,用户的不同操作,如单击鼠标、移动鼠标、键盘输入等,会引发不同的事件类型,而不同的事件,需要相对应的事件监听器来监听并处理事件。在本节中就来讲解,Java,中有什么类型的事件,不同类型时间需要哪些特定类型事件监听器来处理。,51,2025/4/20 周日,16.7.2,事件监听器,实现事件处理,首先要实现监听器接口,然后调用事件源对象中的方法来一个添加监听器对象。当事件发生后,事件源会调用监听器接口中的方法,通过将事件对象传递给相应的监听器方法来实现对事件的处理。,52,2025/4/20 周日,16.7.2,事件监听器,每种事件类都有对应的事件监听器,它是事件监听器类的接口。各种事件类的接口描述如表,16.10,所示。,事件类别,描述信息,接口名,方法,ActionEvent,激活组件,ActionListener,actionPerformed(ActionEvent),ItemEvent,选择了某些项目,ItemListener,itemStateChanged(ItemEvent),MouseEvent,鼠标移动,MouseMotionListener,mouseDragged(MouseEvent),mouseMoved(MouseEvent),鼠标单击等,MouseListener,mousePressed(MouseEvent),mouseReleased(MouseEvent),mouseEntered(MouseEvent),mouseExited(MouseEvent),mouseClicked(MouseEvent),KeyEvent,键盘输入,KeyListener,keyPressed(KeyEvent),keyReleased(KeyEvent),keyTyped(KeyEvent),FocusEvent,组件收到或失去焦点,FocusListener,focusGained(FocusEvent),focusLost(FocusEvent),WindowEvent,窗口收到窗口级事件,WindowListener,windowClosing(WindowEvent),windowOpened(WindowEvent),windowIconified(WindowEvent),windowDeiconified(WindowEvent),53,2025/4/20 周日,16.7.3,焦点事件,焦点事件类(,FocusEvent,)是指用户程序界面的组件焦点发生改变(即焦点从一个对象转移到另外一个对象)时,就会发生焦点事件。得到焦点事件的组件处于激活状态。使用焦点事件必须给组件增加一个,FocusListener,接口的事件处理器,该接口包含如下两个方法,如图,16.63,所示。,54,2025/4/20 周日,16.7.4,键盘事件,键盘事件用于处理用户在键盘上输入的信息,其中回车键的输入还可以通过,ActionListener,进行处理。表示键盘事件的类是,KeyEvent,,这个类除了包含有产生键盘事件的事件源,还包含了用户当前输入的是哪一个键的信息。实现该事件的类需要实现,KeyListener,接口,该接口中的方法如图,16.65,所示。,55,2025/4/20 周日,16.7.4,键盘事件,键盘事件类的方法及方法描述如表,16.10,所示。,方法,方法描述,getKeyChar(),返回在键盘上按下的字符。,getKeyCode(),返回在键盘上按下的字符码。,getKeyLocation(),返回键位置。,getKeyModifiersText(),返回描述修饰符的文本字符串。,getKeyText(),返回键码编程描述键的文本。,isActionKey(),判断键是否是操作键。,setKeyChar(),改变键字符为指定的字符。,setModifiers(int modifiers),改变键修饰符为指定的键修饰符。,paramString(),生成事件状态的字符串。,56,2025/4/20 周日,16.7.5,鼠标事件,鼠标事件类(,MouseEvent,)指组件中发生的鼠标动作事件,如按下鼠标、释放鼠标、单击鼠标、鼠标光标进入或离开组件的几何图形、移动鼠标、拖动鼠标。当鼠标移动到某个区域或鼠标单击某个组件时就会触发鼠标事件。使用鼠标事件必须给组件添加一个,MouseListener,接口的事件处理器。,57,2025/4/20 周日,16.7.5,鼠标事件,MouseListener,接口的方法如图,16.67,所示。,鼠标事件类的方法及方法描述如表,16.11,所示。,方法,方法描述,getButton(),返回鼠标键状态改变指示,getClickCount(),返回鼠标键单击的次数,getMouseModifiersText(),返回指定修饰符文本字符串,getPoint(),返回事件源中位置对象,getX(),返回鼠标在指定区域内相对位置的横坐标,getY(),返回鼠标在指定区域内相对位置的纵坐标,58,2025/4/20 周日,16.7.6,窗口事件,窗口事件(,WindowEvent,)指窗口状态改变的事件,如当窗口,Window,对象的打开、关闭、激活、停用,或者焦点转移到窗口内,以及焦点移除而生成的事件。一般发生在,Window,、,Frame,、,Dialog,等类的对象上。使用窗口事件必须为组件添加一个实现,WindowListener,接口的事件处理器。,59,2025/4/20 周日,16.7.6,窗口事件,WindowListener,接口的方法如图,16.69,所示。,60,2025/4/20 周日,16.7.7,事件适配器,Java,除了提供实现监听器接口的方法处理事件,还提供了另外一种简单的实现监听器的手段,事件适配器(,EventAdapter,)。程序员可以通过继承事件所对应的适配器类,重写感兴趣的方法,不感兴趣的方法可以置之不理。,java.awt.event,包中定义的事件适配器类包括以下几个:,ComponentAdapter(,组件适配器,),ContainerAdapter(,容器适配器,),FocusAdapter(,焦点适配器,),KeyAdapter(,键盘适配器,),MouseAdapter(,鼠标适配器,),MouseMotionAdapter(,鼠标运动适配器,),WindowAdapter(,窗口适配器,),61,2025/4/20 周日,16.8,小结,本章是,Java,图形界面的核心内容,也是难度比较大的内容。首先介绍了,AWT,和,Swing,的基本概念,然后介绍了容器类的知识,接着重点讲述了,Swing,中常用的基本组件和高级组件。最后为大家讲解了布局管理器和事件处理的知识。本章的重点是容器类、常用组件以及布局管理器的理解和运用,难点是对事件处理的理解。希望大家多加练习巩固,以更好地在今后工作中熟练地使用图形界面程序。,62,2025/4/20 周日,
展开阅读全文