JAVA图形用户界面_第1页
JAVA图形用户界面_第2页
JAVA图形用户界面_第3页
JAVA图形用户界面_第4页
JAVA图形用户界面_第5页
已阅读5页,还剩50页未读 继续免费阅读

下载本文档

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

文档简介

2023/2/51第10章基于Swing的图形用户界面设计本章导读☆

AWT组件与SWING组件☆JFrame窗体、菜单组件、布局设计☆中间容器、文本组件☆按钮与标签组件、复选框与单选按钮组件☆列表组件、☆窗口事件、鼠标事件、焦点事件和键盘事件2023/2/5210.1AWT组件与SWING组件概述

Java早期进行用户界面设计时,使用java.awt包中提供的类。

“AWT”就是AbstracWindowToolkit(抽象窗口工具包)的缩写。

Java2(JDK1.2)推出之后,增加了一个新的javax.swing包,该包提供了功能更为强大的用来设计GUI界面的类。

2023/2/53图10.1JComponent类的部分子类以及JFrame类和JDialog类

AWT2023/2/54容器类(Container)和组件类(Component)

Java把由Component类的子类或间接子类创建的对象称为一个组件;把由Container的子类或间接子类创建的对象称为一个容器。

◆可以向容器添加组件。Container类提供了一个public方法add(),一个容器可以调用这个方法将组件添加到该容器中。

◆调用removeAll()方法可以移掉容器中的全部组件,调用remove(Componentc)方法可以移掉容器中参数指定的组件。◆每当容器添加新的组件或移掉组件时,应该让容器调用validate()方法,以保证容器中的组件能正确显示出来。容器本身也是一个组件,因此可以把一个容器添加到另一个容器中实现容器的嵌套。

2023/2/5510.2JFrame窗体

javax.swing包中的JFrame类是java.awt包中Frame类的子类,因此JFrame类其子类创建的对象是窗体。

当应用程序需要一个窗口时,可使用JFrame或其子类创建一个对象。窗口默认地被系统添加到显示器屏幕上,因此不允许将一个窗口添加到另一个容器中。Frame类常用方法如下:◆JFrame()

创建一个无标题的窗口。◆JFrame(Strings)

创建一个标题为s的窗口。◆publicvoidsetBounds(inta,intb,intwidth,intheight)设置出现在屏幕上时的初始位置为(a,b),即距屏幕左面a个像素、距屏幕上方b个像素;窗口的宽是width,高是height。◆publicvoidsetSize(intwidth,intheight)

设置窗口的大小,在屏幕出现默认位置是(0,0)。◆publicvoidsetVisible(booleanb)

设置窗口是可见还是不可见,窗口默认是不可见的。◆publicvoidsetResizable(booleanb)

设置窗口是否可调整大小,窗口默认是可调整大小的。2023/2/56◆publicvoidsetDefaultCloseOperation(intoperation)

该方法用来设置单击窗体右上角的关闭图标后,程序会做出怎样的处理。其中的参数operation取下列有效值:1)DO_NOTHING_ON_CLOSE

什么也不做2)HIDE_ON_CLOSE

隐藏当前窗口3)DISPOSE_ON_CLOSE

隐藏当前窗口,并释放窗体占有的其他资源4)EXIT_ON_CLOSE

结束窗体所在的应用程序

这4个常量都是JFrame类中的static常量,单击关闭图标后,程序根据operation取值做出不同的处理。

例子10-1用JFrame创建了两个窗口,程序运行效果如图10.2。2023/2/57例子10-1运行效果图10.22023/2/5810.3菜单组件

窗口中的菜单条、菜单、菜单项是我们所熟悉的界面,菜单条、菜单、菜单项是窗口常用的组件,菜单项放在菜单里,菜单放在菜单条里。1.JMenuBar菜单条

JComponent类的子类JMenuBar是负责创建菜单条的,即JMenuBar的一个实例就是一个菜单条。

JFrame类有一个将菜单条放置到窗口中的方法:

publicvoidsetJMenuBar(JMenuBarmenubar);

该方法将菜单条添加到窗口的菜单条区域(注意:只能向窗口添加一个菜单条)。

2023/2/592.JMenu菜单

JComponent类的子类JMenu类是负责创建菜单的,即JMenu的一个实例就是一个菜单。JMenu类的主要方法有以下几种:◆JMenu(Strings)

建立一个指定标题菜单,标题由参数s确定◆publicvoidadd(MenuItemitem)

向菜单增加由参数item指定的菜单选项对象。◆publicvoidadd(Strings)

向菜单增加指定的选项。◆publicJMenuItemgetItem(intn)

得到指定索引处的菜单选项。◆publicintgetItemCount()

得到菜单选项数目。◆

publicaddSeparator()

添加分隔线。2023/2/5103.JMenuItem菜单项

该类是负责创建菜单项的,即JMenuItem的一个实例就是一个菜单项。菜单项放在菜单里。JMenuItem类的主要方法有以下几种:◆JMenuItem(Strings)

构造有标题的菜单项。◆publicvoidsetEnabled(booleanb)设置当前菜单项是否可被选择。◆publicStringgetLabel()

得到菜单项的名字。2023/2/5114.嵌入子菜单

JMenu是JMenuItem的子类,因此菜单项本身还可以是一个菜单,这样的菜单项称为子菜单。下面的例10-2中有一个含有菜单的窗口(效果如图10.3所示)。2023/2/51210.4布局设计

当把组件添加到容器中时,希望控制组件在容器中的位置,这就需要学习布局设计的知识。本节将介绍java.awt包中的FlowLayout、BorderLayout、CardLayout、GridLayout布局类和java.swing.border包中的BoxLayout布局类。容器可以使用方法

setLayout(布局对象);来设置自己的布局。对于JFrame窗口,默认布局是BorderLayout布局。2023/2/5131.FlowLayout布局

FlowLayout类的对象称为FlowLayout布局。FlowLayout类的一个常用构造方法如下:◆FlowLayout();构造方法可以创建一个居中对齐的布局对象,如:

FlowLayoutflow=newFlowLayout();◆

con.setLayout(flow);容器con使用flow这个布局对象◆容器con可以使用Container类提供的add()方法将组件顺序地添加到容器中,组件按顺序加入的先后顺序从左向右排列,一列排满之后就转到下一行继续从左至右排列,每一行中的组件都居中对齐,组件之间的默认水平和垂直间隙都是5个像素。组件的大小为默认的最佳大小。如,按钮的大小刚能显示其上面的名字。2023/2/514FlowLayout布局对象调用setAlignment(intaligin)方法可以重新设置布局的对齐方式,其中aligin可以取值FlowLayout.LEFT、FlowLayout.CENTER或FlowLayout.RIGHT。◆

FlowLayout布局对象调用setHgap(inthgap)方法和setVgap(intvgap)方法可以重新设置布局的水平间隙和垂直间隙。◆如果需要改变最佳大小,组件需调用:

publicvoidsetPreferredSize(DimensionpreferredSize)设置大小,例如:button.setPreferredSize(newDimension(20,20));注:对于添加到使用FlowLayout布局的容器中的组件,组件调用setSize(intx,inty)设置的大小无效。

例10-3中,JFrame使用FlowLayout布局放置10个组件(效果如图10.4所示)。2023/2/515例子10-3运行效果图10.4组件从左向右排列一行排满之后转下一行组件间的默认水平和垂直间隙是5个像素。组件调用setSize()方法设置的大小无效,用setPreferredSize(DimensionpreferredSize)调节大小。2023/2/5162.BorderLayout布局

BorderLayout布局是Window容器的默认布局。

JFrame、JDialog都是Window类的间接子类,它们的默认布局都是BorderLayout布局。如果一个容器使用这种布局,那么容器空间简单地划分为东、西、南、北、中五个区域。每加入一个组件都应该指明把这个组件添加在哪个区域中,区域由BorderLayout中的静态常量CENTER、NORTH、SOUTH、WEST、EAST表示。例如,一个使用BorderLayout布局的容器con,可以使用add()方法将一个组件b添加到中心区域:

con.add(b,BorderLayout.CENTER);或con.add(BorderLayour.CENTER,b);

注:添加到某个区域的组件将占据整个这个区域.每个区域只能放置一个组件,如果向某个已放置了组件的区域再放置一个组件,那么先前的组件将被后者替换。注:使用BorderLayout布局的容器最多能添加5个组件,如果容器中需要添加的组件超过5个,就必须使用容器的嵌套或改用其他布局策略。

例10-4使用了BorderLayout布局(效果如图10.5所示)。2023/2/517例子10-4运行效果图10.52023/2/5183.CardLayout布局

使用CardLayout容器可以容纳多个组件,但同一时刻容器只能从这些组件中选出一个来显示,就像一叠“扑克牌”每次只能显示最上面的一张一样,被显示的组件将占据所有的容器空间。(1)使用CardLayout对象作为布局,如:

CardLayoutcard=newCardLayout();(2)容器使用setLayout()方法设置布局,如:

con.setLayout(card);(3)容器调用add(Strings,Componentb)方法将组件b加入容器,并给出了显示该组件的代号s。最先加入con的是第一张,依次排序。(4)创建的布局card用CardLayout类提供的show()方法,根据容器con和其中的组件代号s显示这一组件:

card.show(con,s)(5)也可按组件加入容器的顺序显示组件:如Card.first(con)Card.last(con)Card.next(con)Card.previous(con)2023/2/519例子2023/2/5204.GridLayout布局

GridLayout是使用较多的布局编辑器,其基本布局策略是把容器划分成若干行若干列的网格区域,组件就位于这些划分出来的小格中使用GridLayout布局编辑器的一般步骤如下:(1)使用GridLayout的构造方法GridLayout(intm,intn)创建布局对象,指定划分网格的行数m和列数n,如GridLayoutgrid=newGridLayout(10,8);(2)使用GridLayout布局的容器调用方法add()将组件加入容器,组件进入容器的顺序将按照第一行第一个、第一行第二个…第一行最后一个、第二行第一个…最后一行第一个…最后一行最后一个。使用GridLayout布局的容器最多可添加m×n个组件。GridLayout布局中每个网格都是相同大小,并且强制组件与网格的大小相同。

可通过容器的嵌套克服这个缺点2023/2/521例子2023/2/5225.BoxLayout布局

用BoxLayout类可以创建一个布局对象,称为盒式布局。

BoxLayout在javax.swing.border包中。

BoxLayout的构造方法BoxLayout(Containercon,intaxis)可以创建一个盒式布局对象,并指定容器con使用该布局对象,参数axis的有效值是BoxLayout.X_AXIS和BoxLayout.Y_AXIS。

javaswing包提供了Box类,创建对象的默认布局是盒式布局,而且不允许更改盒式容器的布局。可以利用容器的嵌套,将某个容器嵌入几个盒式容器,达到布局目的。

2023/2/523Box类的类(静态)方法createHorizontalBox()可以获得一个具有行型盒式布局的盒式容器;Box类的类(静态)方法createVerticalBox()可以获得一个具有列型盒式布局的盒式容器。控制盒式布局容器中组件之间的距离,需要使用水平支撑或垂直支撑。

Box类调用静态方法createHorizontalStrut(intwidth)可以得到一个不可见的水平Struct类型对象.称为水平支撑.该水平支撑的高度为0,宽度是width。

Box类调用静态方法createVertialStrut(intheight)可以得到一个不可见的垂直Struct类型对象,称为垂直支撑.参数height决定垂直支撑的高度,垂直支撑的宽度为0。

例10-6中(效果如图10.7所示),有两个列型盒式容器boxV1、boxV2和一个行型盒式容器baseBox。在列型盒式容器的组件之间添加垂直支撑,控制组件之间的距离,将boxV1、boxV2添加到baseBox中,并在它们之间添加水平支撑。2023/2/5242023/2/5256.null布局

可以把一个容器的布局设置为null布局(空布局)。p.setLayout(null);把p的布局设置为空布局。向空布局的容器p添加一个组件c需要两个步骤。

首先使用add(c)方法向容器添加组件,

然后组件c再调用setBounds(inta,intb,intwidth,intheight)方法设置该组件在容器中的位置和本身的大小。组件都是一个矩形结构,方法中的参数a和b是被添加的组件c的左上角在容器中的位置坐标,即该组件距容器左面a个像素,距容器上方b个像素;weidth和height是组件c的宽和高。2023/2/52610.5中间容器1.JPanel面板可以使用JPanel创建一个面板,再向这个面板添加组件,然后把这个面板添加到底层容器或其他中间容器中。JPanel面板的默认布局是FlowLayout布局。JPanel类构造方法Jpanel()可以构造一个面板容器对象。2023/2/52710.6文本组件_1JTextField文本框,2JPasswordField密码框1.JTextField文本框

JComponent的子类JTextField是专门用来建立文本框的,即JTextField创建的一个对象就是一个文本框。用户可以在文本框输入单行的文本。JTextField类的主要方法如下:◆

JTextField(intx)

创建文本框对象,可以在文本框中输入若干个字符,文本框的可见字符个数由参数x指定。◆JTextField(Strings)

创建文本框对象,则文本框的初始字符串为s,可以在文本框中输入若干个字符。◆

publicvoidsetText(Strings)

设置文本框中的文本为参数s指定的文本,文本框中先前的文本将被清除。◆

publicStringgetText()

获取文本框中的文本。◆

publicvoidsetEditable(booleanb)

指定文本框的可编辑性。创建的文本框默认是可编辑的。◆

publicvoidsetHorizontalAlignment(intalignment)

设置文本在文本框中的对齐方式,alignment的有效值为JTextField.LEFT、JTextField.CENTER和JTextField.RIGHT。2023/2/5282.JPasswordField密码框使用JTextField的子类JPasswordField可以建立一个密码框对象。setEchoChar(charc)设置回显字符(默认的回显字符是'*'),char[]

getPassword()方法返回密码框中的密码。2023/2/5293.ActionEvent事件

当用户在有输入焦点的文本框中按回车键、单击按钮、在一个下拉式列表中选择一个条目等操作时,都发生界面事件。程序有时要对发生的事件做出反应,来实现特定的任务。在学习处理事件时,读者必须很好地掌握事件源、监视器、处理事件的接口这三个概念。

JTextField和JPasswordField触发ActionEvent事件,通过处理文本框这个具体的组件上的事件,来掌握处理事件的基本原理。2023/2/5303.ActionEvent事件_处理事件的基本原理1)事件源:

能够产生事件的对象都可以称为事件源,如文本框、按钮、下拉式列表等。也就是说,事件源必须是一个对象,而且这个对象必须是Java认为能够发生事件的对象。2)监视器:

需要一个对象对事件源进行监视,以便对发生的事件做出处理。事件源通过调用相应的方法将某个对象作为监视器。例如,对于文本框,这个方法是:addActionListener(ActionListenerlistener)

对于获取了监视器的文本框对象,在文本框获得输入焦点之后,如果用户按回车键,Java运行系统就自动用ActionEvent类创建了一个对象,即发生了ActionEvent事件。3)处理事件的接口:

监视器负责处理事件源发生的事件,要求创建该监视器的类必须声明实现相应的接口,即必须在类体中给出该接口中的所有的方法的方法体,当事件源发生时,监视器就自动调用类实现的某个接口方法。对于文本框,接口的名字是ActionListener,这个接口只有一个方法:actionPerformed(ActionEvente)2023/2/5313.ActionEvent事件_事件处理模式图10.92023/2/5323.ActionEvent事件_ActionEvent类中的方法4)ActionEvent类中的方法

ActionEvent事件对象调用方法publicObjectgetSource()可以返回发生ActionEvent事件的对象的引用。

ActionEvent事件对象调用方法publicStringgetActionCommand()获取发生ActionEvent事件时,和该事件相关的一个命令字符串,对于文本框,当发生ActionEvent事件时,用户在文本框中输入的文本字符串就是和该事件相关的一个命令字符串。

例10-8中,窗口中有一个文本框text,text的事件监视器由A类负责创建。当用户在text中输入字符串回车后,监视器负责在命令输出该字符串以及它的长度(效果如图10.10所示)。

例10-9中,有titleText和passwordText监视器。当在titleText中输入字符串回车后,监视器负责将窗体的标题更改为当前titleText中的文本。当在passwordText中输入密码回车后,监视器负责将密码显示在titleText中(效果如图10.11所示)。

例10-10使用匿名对象作为inputText的监视器,当在inputText中输入一个数字字符串后,监视器负责计算这个数的平方,并将结果放入showText中(效果如图10.12所示)。2023/2/533

例子10-8,9,10运行效果图10.10,10.11,10.122023/2/5344.菜单项上的ActionEvent事件

单击某个菜单项可以发生ActionEvent事件。菜单项使用

addActionListener(ActionListenerlistner)方法获得监视器。例子:

2023/2/53510.7按钮与标签组件_1.JButton按钮JButton类是专门用来建立按钮的,即JButton类创建的一个对象就是一个按钮。JButton类常用的方法如下:◆Button(Stringtext)

创建名字是text的按钮。◆publicvoidsetText(Stringtext)重新设置当前按钮的名字,名字由参数text指定。◆publicStringgetText()

获取当前按钮上的名字。◆publicvoidaddActionListener(ActionListener)

向按钮增加动作监视器。◆publicvoidremoveActionListener(ActionListener)

移去按钮上的动作监视器。按钮可以发生ActionEvent事件,当按钮获得监视器之后,用鼠标单击按钮或按钮获得焦点时按下空格键(Space键),就发生ActionEven事件,即java.awt.envent包中的ActionEvent类自动创建了一个事件对象。

例10-13中,单击按钮变换按钮上的文字,效果如图10.15所示2023/2/536

例子10-13运行效果图10.152023/2/5372.JLabel标签JLabel类负责创建标签对象,标签用来显示信息,但没有编辑功能。JLabel类的构造方法如下:

publicJLabel()

创建没有名字的标签。

publicJLabel(Strings)

创建名字是s的标签,s在标签中靠左对齐。

publicJLabel(Strings,intaligment)

参数aligment决定标签中的文字在标签中的水平对齐方式。aligment的取值是JLabel.CENTER、JLabel.LEFT或JLabel.RIGHT。JLabel类的常用实例方法如下:

StringgetText()

获取标签的名字。

voidsetText(Strings)

设置标签的名字是s。2023/2/53810.8复选框与单选按钮组件_1.JCheckBox复选框

复选框提供两种状态一种是选中,另一种是未选中,用户通过单击该组件切换状态。JCheckBox类常用方法如下:◆

publicJCheckBox()

创建一个没有名字的复选框,初始状态是未选中。◆

publicJCheckBox(Stringtext)

创建一个名字是text的复选框,初始状态是未选中。◆

publicbooleanisSelected()

如果复选框处于选中状态该方法返回true,否则返回false。如果复选框没有指定默认图标,复选框就显示为一个“小方框”,如果是选中状态,“小方框”里面就有个小对号。2023/2/539复选框与单选按钮组件_ItemEvent事件

当复选框获得监视器之后,复选框从未选中状态变成选中状态或从选中状态变成未选中状态时就发生ItemEvent事件,ItemEvent类将自动创建一个事件对象。◆发生ItemEvent事件的事件源获得监视器的方法是

addItemListener(ItemListenerlistener)

由于复选框可以发生ItemEvent事件,JCheckBox类提供了addItemListener()方法。◆处理ItemEvent事件的接口是ItemListener,创建监视器的类必须实现ItemListener接口,该接口中只有一个的方法。当在复选框发生ItemEvent事件时,监视器将自动调用接口方法publicvoiditemStateChanged(ItemEvente)对发生的事件做出处理。◆ItemEvent事件对象除了可以使用getSource()方法返回发生Itemevent事件的事件源外,也可以使用getItemSelectable()方法返回发生Itemevent事件的事件源。例10-14处理了复选框上的ItemEvent事件,当复选框被选中时,窗口中心显示一个带蓝色按钮,否则显示灰色按钮,效果如图10.16所示。2023/2/54010.8复选框与单选按钮组件_2.JRadioButton单选按钮

单选按钮和复选框很类似,所不同的是在若干个复选框中我们可以同时选中多个,而一组单选按钮同一时刻只能有一个被选中。当创建了若干个单选按钮后,应使用ButtonGroup类再创建一个对象,然后利用这个对象把这若干个单选按钮归组。归到同一组的单选按钮每一时刻只能选一。单选按钮和复选框一样,也触发ItemEvent事件。

ButtonGroupfruit=newButtonGroup();JRadioButtonbutton1=newJRadioButton("小学"),button2=newJRadioButton("中学"),button3=newJRadioButton("大学");

fruit.add(button1);

fruit.add(button2);

fruit.add(button3);2023/2/54110.9列表组件

下拉列表是用户十分熟悉的一个组件。用户可以在下拉列表看到第一个选项和它旁边的箭头按钮,当用户单击箭头按钮时,选项列表打开。下拉列表的常用方法如下:◆

publicJComboBox()

创建一个没有选项下拉列表。◆

publicvoidaddItem(ObjectanObject)

增加选项。◆

publicintgetSelectedIndex()

返回当前下拉列表中被选中的选项的索引,索引的起始值是0。◆

publicObjectgetSelectedItem()

返回当前下拉列表中被选中的选项。◆

publicvoidremoveItemAt(intanIndex)

从下拉列表的选项中删除索引值是anIndex的选项。◆

publicvoidremoveAllItems()

删除全部选项。◆

publicvoidaddItemListener(ItemListener)

向下拉列表增加ItemEvent事件的监视器。下拉式列表事件源可以发生ItemEvent事件。当下拉列表获得监视器后,用户在下拉列表的选项中选中某个选项时就发生ItemEvent事件,ItemEvent类将自动创建一个事件对象。

例10-15中,包含一个下拉列表和一个按钮,下拉列表中有10、14、18三个选项。选择10时,按钮中文字的字号为10,选择14时,按钮中文字的字号为14,选择18时,按钮中文字的字号为18。效果如图10.17所示。2023/2/542

例子10-15运行效果图10.172023/2/54310.14窗口事件_1.WindowListener接口

Frame类是Window类的子类,Window对象都能触发WindowEvent事件。当一个JFrame窗口被激活、撤销激活、打开、关闭、图标化或撤销图标化时,就引发了窗口事件,即WindowEvent创建一个窗口事件对象。窗口使用addWindowlistener()方法获得监视器,创建监视器对象的类必须实现WindowListener接口,该接口中有7个不同的方法:◆

publicvoidWindowActivated(WindowEvente)

当窗口从非激活状态到激活时,窗口的监视器调用该方法。◆

publicvoidWindowDeactivated(WindowEvente)当窗口激活状态到非激活状态时,窗口的监视器调用该方法。◆

publicvoidWindowClosing(WindowEvente)窗口正在被关闭时,窗口监视器调用该方法。◆

publicvoidWindowClosed(WindowEvente)

当窗口关闭时,窗口的监视器调用该方法。◆

publicvoidWindowIconified(WindowEvente)窗口图标化时,窗口的监视器调用该方法。◆

publicvoidWindowDeiconified(WindowEvente)当窗口撤销图标化时,窗口的监视器调用该方法。◆

publicvoidWindowOpened(WindowEvente)

当窗口打开时,窗口的监视器调用该方法。2023/2/54410.14窗口事件_几个特别的方法

WindowEvent创建的事件对象调用getWindow()方法可以获取发生窗口事件的窗口。当单击窗口上的关闭图标时,监视器首先调用WindowClosing()方法,然后执行窗口初始化时用setDefaultCloseOperation(intn)方法设定的关闭操作,最后再执行WindowClosed()方法。如果在WindowClosing()方法执行了System.exit(0);或setDefaultCloseOperation设定的关闭操作是EXITON_ON_CLOSE或DO_NOTHING_ON_CLOSE,那么监视器就没有机会再调用WindowClosed()方法。当单击窗口的图标化按钮时,监视器调用WindowIconified()方法后,还将调用windowDeactivated()方法。当撤销窗口图标化时,监视器调用windowDeiconified()方法后还会调用windowActivated()方法。2023/2/54510.14窗口事件_2.WindowAdapter适配器

接口中如果有多个方法会给使用者带来诸多不便,因为实现这个接口的类必须实现接口中的全部方法,否则这个类必须是一个abstract类。为了给编程人员提供方便,对于Java提供的接口,如果其中的方法多于一个,就提供一个相关的称为适配器的类,这个适配器是已经实现了相应接口的类。例如,Java在提供WindowListener接口的同时,又提供了WindowAdapter类,WindowAdapter类实现了WindowListener接口。因此,可以使用WindowAdapter的子类创建的对象作为监视器,在子类中重写所需要的接口方法即可。

例10-21使用WindowAdapter的匿名类(匿名类就是WindowAdapter的一个子类)作为窗口的监视器。2023/2/54610.15鼠标事件_1.鼠标事件的触发

组件是可以触发鼠标事件的事件源。怎样才能导致组件触发鼠标事件呢?用户的下列7种操作都可以使得组件触发鼠标事件:◆鼠标指针从组件之外进入。◆鼠标指针从组件内退出。◆鼠标指针停留在组件上时,按下鼠标。◆鼠标指针停留在组件上时,释放鼠标。◆鼠标指针停留在组件上时,单击鼠标。◆在组件上拖动鼠标指针。◆在组件上运动鼠标指针。鼠标事件的类型是MouseEvent,即组件触发鼠标事件时,MouseEvent类自动创建一个事件对象。2023/2/54710.15鼠标事件_2.MouseListener接口

Java分别使用MouseListener接口与MouseMotionListener接口两个接口来处理鼠标事件。如果事件源使用addMouseListener(MouseListenerlistener)获取监视器,那么用户的下列5种操作可使得事件源触发鼠标事件:◆鼠标指针从组件之外进入。◆鼠标指针从组件内退出。◆鼠标指针停留在组件上面时,按下鼠标。◆鼠标指针停留在组件上面时,释放鼠标。◆鼠标指针停留在组件上面时,单击或连续单击鼠标。创建监视器的类必须实现MouseListener接口,该接口有5个方法:◆

mousePressed(MouseEvent)

负责处理鼠标按下触发的鼠标事件。◆

mouseReleased(MouseEvente)

负责处理鼠标释放触发的鼠标事件。◆

mouseEntered(MouseEvente)

负责处理鼠标进入组件触发的鼠标事件。◆

mouseExited(MouseEvente)

负责处理鼠标退出组件触发的鼠标事件。◆

mouseClicked(MouseEvente)

负责处理鼠标单击或连击触发的鼠标事件。2023/2/54810.15鼠标事件_2.MouseMotionListener接口

Java分别使用MouseListener接口与MouseMotionListener接口两个接口来处理鼠标事件。如果事件源使用

addMouseMotionListener(MouseMotionListenerlistener)获取监视器,那么用户的下列两种操作可使得事件源触发鼠标事件:◆在组件上拖动鼠标指针。◆在组件上运动鼠标指针。

创建监视器的类必须实现MouseMotionListener接口,该接口有两个方法:◆

mouseDragged(MouseEvente)

负责处理鼠标拖动事件,即在事件源上拖动鼠标时,监视器将自动调用接口中的这个方法对事件做出处理。◆

mouseMoved(MouseEvente)

负责处理鼠标移动事件,即在事件源上运动鼠标时,监视器将自动调用接口中的这个方法对事件做出处理。

由于处理鼠标事件的接口中的方法多于一个,Java提供了相应的适配器类,分别是MouseAdapter和MouseMotionAdapter,这两个类分别实现了MouseListener接口和MouseMotionListener接口。2023/2/54910.15鼠标事件_3.MouseEvent类

在处理鼠标事件时,程序经常关心鼠标在当前组件坐标系中的位置,以及触发鼠标事件使用的是鼠标的左键或右键等信息。MouseEvent类中有下列几个重要的方法:◆

getX()

返回触发当前鼠标事件时

温馨提示

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

评论

0/150

提交评论