Java实用PPT课件第10章.ppt

上传人:wuy****n92 文档编号:70794758 上传时间:2023-01-28 格式:PPT 页数:93 大小:1.48MB
返回 下载 相关 举报
Java实用PPT课件第10章.ppt_第1页
第1页 / 共93页
Java实用PPT课件第10章.ppt_第2页
第2页 / 共93页
点击查看更多>>
资源描述

《Java实用PPT课件第10章.ppt》由会员分享,可在线阅读,更多相关《Java实用PPT课件第10章.ppt(93页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第第1010章章 基于基于SwingSwing的图形用户界面设计的图形用户界面设计本章导读本章导读 AWT组件与SWING组件 JFrame窗体、菜单组件、布局设计 中间容器、文本组件 按钮与标签组件、复选框与单选按钮组件 列表组件、表格组件、树组件和进度条组件 窗口事件、鼠标事件、焦点事件和键盘事件 对话框 AWT线程与计时器 MVC设计模式 发布应用程序110.1 AWT10.1 AWT组件与组件与SWINGSWING组件概述组件概述 Java早期进行用户界面设计时,使用使用java.awtjava.awt包中提供的类包中提供的类。“AWT”“AWT”就是就是Abstrac Window

2、Toolkit(抽象窗口工具包)的缩写。Java 2(JDK1.2)推出之后,增加了一个新的新的javax.swingjavax.swing包包,该包提供了功能更为强大的用来设计GUI界面的类。Java早期的java.awt包中的类创建的组件习惯上称为重组件。例如,当用java.awt包中的Button类创建一个按钮组件时,都有一个相应的本地组件在为它工作(称为它的同位体)。javax.swing包为我们提供了更加丰富的、功能强大的组件,称为SWING组件,其中大部分组件是轻组件大部分组件是轻组件,没有同位体。SWING组件的轻组件在设计上和AWT完全不同,轻组件把与显示组件有关的许多工作和处

3、理组件事件的工作交给相应的UI代表来完成。这些UI代表是用Java语言编写的类,这些类被增加到Java的运行环境中,因此组件的外观不依赖平台,不仅在不同平台上的外观是相同的,而且较组件有更高的性能。如果Java运行环境低于1.2版本,就不能运行含有SWING组件的程序。2图图10.1 JComponent类的部分子类以及类的部分子类以及JFrame类和类和JDialog类类 3容器类(容器类(Container)和组件类)和组件类(Component)Java把由Component类的子类或间接子类创建的对象称为一个组件;把由Container的子类或间接子类创建的对象称为一个容器。可以向容器

4、添加组件。Container类提供了一个public方法add(),一个容器可以调用这个方法将组件添加到该容器中。调 用 removeAll()方 法 可 以 移 掉 容 器 中 的 全 部 组 件,调 用remove(Component c)方法可以移掉容器中参数指定的组件。每当容器添加新的组件或移掉组件时,应该让容器调用validate()方法,以保证容器中的组件能正确显示出来。容器本身也是一个组件,因此可以把一个容器添加到另一个容器中实现容器的嵌套。javax.swing包 中 有 4个 最 重 要 的 类 JApplet,JFrame,JDialog和JComponent。注注:JCo

5、mponent类的子类都是轻组件,JComponent类是java.awt包中Container类的子类,因此所有的轻组件也都是容器。而JFrame、JApplet、JDialog都是重组件,即有同位体的组件,这样窗口(JFrame)、对话框(JDialog)、小应用程序(Java Applet)可以和操作系统交互信息。轻组件必须在这些容器中绘制自己,习惯上称这些容器为SWING的底层容器。410.2 JFrame10.2 JFrame窗体窗体 javax.swing包中的JFrame类是java.awt包中Frame类的子类,因此JFrame类其子类创建的对象是窗体。当应用程序需要一个窗口时

6、,可使用JFrame或其子类创建一个对象。窗口默认地被系统添加到显示器屏幕上,因此不允许将一个窗口添加到另一个容器中。Frame类常用方法如下:JFrame()JFrame()创建一个无标题的窗口。JFrame(String s)JFrame(String s)创建一个标题为s的窗口。public public void void setBounds(int setBounds(int a,int a,int b,int b,int width,int width,int height)height)设置出现在屏幕上时的初始位置为(a,b),即距屏幕左面a个像素、距屏幕上方b个像素;窗口的宽是

7、width,高是height。public void setSize(int width,int height)public void setSize(int width,int height)设置窗口的大小,在屏幕出现默认位置是(0,0)。public void setVisible(boolean b)public void setVisible(boolean b)设置窗口是可见还是不可见,窗口默认是不可见的。public void setResizable(boolean b)public void setResizable(boolean b)设置窗口是否可调整大小,窗口默认是可调整

8、大小的。public public void void setDefaultCloseOperation(int setDefaultCloseOperation(int operation)operation)该方法用来设置单击窗体右上角的关闭图标后,程序会做出怎样的处理。其中的参数参数operationoperation取下列有效值:1)1)DO_NOTHING_ON_CLOSEDO_NOTHING_ON_CLOSE 什么也不做 2)HIDE_ON_CLOSE2)HIDE_ON_CLOSE 隐藏当前窗口 3)DISPOSE_ON_CLOSE3)DISPOSE_ON_CLOSE 隐藏当前窗口

9、,并释放窗体占有的其他资源 4)EXIT_ON_CLOSE4)EXIT_ON_CLOSE 结束窗体所在的应用程序 这4个常量都是JFrame类中的static常量,单击关闭图标后,程序根据operation取值做出不同的处理。例子例子10-110-1用JFrame创建了两个窗口,程序运行效果如图10.2。5例子例子10-1 运行效果图运行效果图10.2610.3 10.3 菜单组件菜单组件 窗口中的菜单条、菜单、菜单项是我们所熟悉的界面,菜单条、菜单、菜单项是窗口常用的组件,菜单放在菜单条里,菜单项放在菜单里。1JMenuBar菜单条菜单条 JComponent类 的 子 类 JMenuBar

10、是 负 责 创 建 菜 单 条 的,即JMenuBar的一个实例就是一个菜单条的一个实例就是一个菜单条。JFrame类有一个将菜单条放置到窗口中的方法:public void setJMenuBar(JMenuBar menubar);该方法将菜单条添加到窗口的菜单条区域(注意:只能向窗口添加一个菜单条)。72.JMenu菜单菜单 JComponent类的子类JMenu类是负责创建菜单的,即JMenu的一个实例就是一个菜单。JMenu类的主要方法有以下几种:JMenu(String s)JMenu(String s)建立一个指定标题菜单,标题由参数s确定 public public void

11、void add(MenuItem add(MenuItem item)item)向菜单增加由参数item指定的菜单选项对象。public void add(String s)public void add(String s)向菜单增加指定的选项。public JMenuItem getItem(int n)public JMenuItem getItem(int n)得到指定索引处的菜单选项。public int getItemCount()public int getItemCount()得到菜单选项数目。83.JMenuItem菜单项菜单项 JMenuItem是JMenu的父类,该类是负

12、责创建菜单项的,即JMenuItem的一个实例就是一个菜单项。菜单项放在菜单里。JMenuItem类的主要方法有以下几种:JMenuItem(String s)JMenuItem(String s)构造有标题的菜单项。JMenuItem(String text,Icon icon)JMenuItem(String text,Icon icon)构造有标题和图标的菜单项 public void setEnabled(boolean b)public void setEnabled(boolean b)设置当前菜单项是否可被选择。public String getLabel()public Str

13、ing getLabel()得到菜单项的名字。public public void void setAccelerator(KeyStroke setAccelerator(KeyStroke keyStroke)keyStroke)为菜单项设置快捷键。为了向该方法的参数传递一个KeyStrokeKeyStroke对对象象,可以使用KeyStrokeKeyStroke类类的类方法public public static static KeyStroke KeyStroke getKeyStroke(char getKeyStroke(char keyChar)keyChar)返回一个KeySt

14、rokeKeyStroke对对象象;也可以使用KeyStrokeKeyStroke类类的的类类方法public public static static KeyStroke KeyStroke getKeyStroke(int getKeyStroke(int keyCode,int keyCode,int modifiers)modifiers)返 回 一 个KeyStrokeKeyStroke对对 象象,其 中 参 数 keyCodekeyCode取 值 范 围 为KeyEvent.VK_AKeyEvent.VK_A KeyEvent.VK_ZKeyEvent.VK_Z,modifiers

15、的 取 值 如 下:InputEvent.ALT_MASKInputEvent.ALT_MASK,InputEvent.CTRL_MASKInputEvent.CTRL_MASK和和InputEvent.SHIFT_MASKInputEvent.SHIFT_MASK。94.嵌入子菜单嵌入子菜单 JMenu是JMenuItem的子类,因此菜单项本身还可以是一个菜单,这样的菜单项称为子菜单。为了使得菜单项有一个图标,可以用图图标标类类IconIcon声明一个图标,然后使用其子类ImageIconImageIcon类类创建一个图标,如 Icon icon=new ImageIcon(dog.gif)

16、;Icon icon=new ImageIcon(dog.gif);下面的例10-2中有一个含有菜单的窗口(效果如图10.3所示)。1010.4 10.4 布局设计布局设计 当把组件添加到容器中时,希望控制组件在容器中的位置,这就需要学习布局设计的知识。本 节 将 介 绍 java.awt包 中 的 FlowLayout、BorderLayout、CardLayout、GridLayout布局类和包中的BoxLayout布局类。容器可以使用方法 setLayout(setLayout(布局对象布局对象);来设置自己的布局。对于JFrame窗口,默认布局是BorderLayout布局。11 1F

17、lowLayout布局布局 FlowLayout类的对象称为FlowLayout布局。FlowLayout类的一个常用构造方法如下:FlowLayout();FlowLayout();构造方法可以创建一个居中对齐的布局对象,如:FlowLayout flow=new FlowLayout();FlowLayout flow=new FlowLayout();con.setLayout(flow);con.setLayout(flow);容器con使用flowflow这个布局对象 容器con可以使用Container类提供的add()add()方法方法将组件顺序地添加到容器中。FlowLayou

18、t布局对象调用setAlignment(int setAlignment(int aligin)aligin)方方法法可以重新设置布局的对齐方式,其中aligin可以取值FlowLayout.LEFT、FlowLayout.CENTER或FlowLayout.RIGHT。FlowLayout布局对象调用setHgap(int setHgap(int hgap)hgap)方方法法和setVgap(int setVgap(int vgap)vgap)方方法法可以重新设置布局的水平间隙和垂直间隙。如果需要改变最佳大小,组件需调用:public void setPreferredSize(Dimens

19、ion preferredSize)public void setPreferredSize(Dimension preferredSize)设置大小,例如:button.setPreferredSize(new Dimension(20,20);button.setPreferredSize(new Dimension(20,20);注注:对对于于添添加加到到使使用用FlowLayoutFlowLayout布布局局的的容容器器中中的的组组件件,组组件件调调用用setSize(int setSize(int x,int y)x,int y)设置的大小无效。设置的大小无效。例10-3中,JFra

20、me使用FlowLayout布局放置10个组件(效果如图10.4所示)。12例子例子10-3 运行效果图运行效果图10.413 2BorderLayout布局布局 BorderLayout布局是Window容器的默认布局。JFrame、JDialog都是Window类的间接子类,它们的内容面板的默认布局都是BorderLayout布局。如果一个容器使用这种布局,那么容器空间简单地划分为东、西、南、北、中五个区域。每加入一个组件都应该指明把这个组件添加在哪个区域中,区域由BorderLayout中的静态常量CENTER、NORTH、SOUTH、WEST、EAST表示。例如,一个使用BorderL

21、ayout布局的容器con,可以使用add()add()方方法法将一个组件b添加到中心区域:con.add(b,BorderLayout.CENTER);con.add(b,BorderLayout.CENTER);或 con.add(BorderLayour.CENTER,b);con.add(BorderLayour.CENTER,b);注注:添加到某个区域的组件将占据整个这个区域.每个区域只能放置一个组件,如果向某个已放置了组件的区域再放置一个组件,那么先前的组件将被后者替换。注注:使用BorderLayout布局的容器最多能添加5个组件,如果容器中需要添加的组件超过5个,就必须使用容器

22、的嵌套或改用其他布局策略。例10-4使用了BorderLayout布局(效果如图10.5所示)。14例子例子10-4 运行效果图运行效果图10.515 3CardLayout 布局 使用CardLayout容器可以容纳多个组件,但同一时刻容器只能从这些组件中选出一个来显示,就像一叠“扑克牌”每次只能显示最上面的一张一样,这个被显示的组件将占据所有的容器空间。JTabbedPane窗格的默认布局是CardLayout布局,并且自带一些选项卡,这些选项卡与用户添加到JTabbedPane窗格中的组件相对应,单击该选项卡,JTabbedPane窗格将显示对应的组件。选项卡窗格自带的选项卡默认地在该选

23、项卡窗格的顶部,从左向右依次排列,选项卡的顺序和所对应的组件的顺序相同。JTabbedPaneJTabbedPane窗窗格格可以使用add(String add(String text,Component text,Component c);c);方法将组件c添加到JTabbedPane窗格中,并指定和组件c对应的选项卡的文本提示是text。使用JTabbedPaneJTabbedPane窗格窗格的构造方法 public public JTabbedPane(int JTabbedPane(int tabPlacement)tabPlacement)创建的选项卡窗格的选项卡的位 置 由 参 数

24、 tabPlacement指 定,该 参 数 的 有 效 值 为 JTabbedPane.TOPJTabbedPane.TOP、JTtabbedPane.BOTTOMJTtabbedPane.BOTTOM、JTabbedPane.LEFT JTabbedPane.LEFT 和和JTabbedPane.RIGHTJTabbedPane.RIGHT。例10-5在选项卡窗格中添加了5个按钮(带有图标),并设置了相对应的选项卡的文本提示,然后将选项卡窗格添加到窗体的内容面板中(效果如图10.6所示)。16例子例子10-5 运行效果图运行效果图10.617 4GridLayout布局布局 GridLay

25、outGridLayout是使用较多的布局编辑器,其基本布局策略是把容器划分成若干行若干列的网格区域,组件就位于这些划分出来的小格中。GridLayout比较灵活,划分多少网格由程序自由控制,而且组件定位也比较精确,使用GridLayout布局编辑器的一般步骤如下:(1)使用GridLayoutGridLayout的构造方法GridLayout(int GridLayout(int m,int m,int n)n)创建布局对象,指定划分网格的行数m和列数n,如 GridLayout grid=new GridLayout(10,8);GridLayout grid=new GridLayout

26、(10,8);(2)使用GridLayoutGridLayout布布局局的容器调用方方法法add()add()将组件加入容器,组件进入容器的顺序将按照第一行第一个、第一行第二个第一行最后一个、第二行第一个最后一行第一个最后一行最后一个。使用GridLayoutGridLayout布布局局的容器最多可添加mnmn个个组组件件。GridLayoutGridLayout布布局局中每个网格都是相同大小,并且强制组件与网格的大小相同。由于GridLayoutGridLayout布布局局中每个网格都是相同大小并且强制组件与网格的大小相同,使得容器中的每个组件也都是相同的大小,显得很不自然。为了克服这个缺点

27、,可以使用容器嵌套。例如,一个容器使用GridLayoutGridLayout布布局局,将容器分为三行一列的网格,那么可以把另一个容器添加到某个网格中,而添加的这个容器又可以设置为GridLayoutGridLayout布布局局、FlowLayoutFlowLayout布布局局、CarderLayoutCarderLayout布布局局或或BorderLayoutBorderLayout布局布局等。利用这种嵌套方法,可以设计出符合一定需要的布局.18 5BoxLayout布局布局 用BoxLayoutBoxLayout类类可以创建一个布局对象,称为盒式布局。BoxLayoutBoxLayout在

28、包中。java swing包提供了BoxBox类类,该类也是ContainerContainer类类的一个子类,创建的容器称为一个盒式容器。盒式容器的默认布局是盒式布局,而且不允许更改盒式容器的布局。因此,在策划程序的布局时,可以利用容器的嵌套,将某个容器嵌入几个盒式容器,达到布局目的。BoxLayouBoxLayou的构造方法BoxLayout(Container BoxLayout(Container concon,int int axis)axis)可以创建一个盒 式 布 局 对 象,并 指 定 容 器 con使 用 该 布 局 对 象,参 数 axis的 有 效 值 是BoxLayou

29、t.X_AXIS和BoxLayout.Y_AXIS。BoxBox类类的类(静态)方法createHorizontalBox()createHorizontalBox()可以获得一个具有行型盒式布局的盒式容器;BoxBox类类的类(静态)方法createVerticalBox()createVerticalBox()可以获得一个具有列型盒式布局的盒式容器。控制盒式布局容器中组件之间的距离,需要使用水平支撑或垂直支撑。BoxBox类类调用静态方法createHorizontalStrut(int createHorizontalStrut(int width)width)可以得到一个不可见的水平S

30、truct类型对象.称为水平支撑.该水平支撑的高度为0,宽度是width。BoxBox类类调用静态方法createVertialStrut(int createVertialStrut(int height)height)可以得到一个不可见的垂直Struct类型对象,称为垂直支撑.参数height决定垂直支撑的高度,垂直支撑的宽度为0。例例10-610-6中中(效果如图10.7所示),有两个列型盒式容器boxV1、boxV2和一个行型盒式容器baseBox。在列型盒式容器的组件之间添加垂直支撑,控制组件之间的距离,将boxV1、boxV2添加到baseBox中,并在它们之间添加水平支撑。19例

31、子例子10-6 运行效果图运行效果图10.720 6null布局布局 可以把一个容器的布局设置为null布局(空布局)。空布局容器可以准确地定位组件在容器的位置和大小。setBounds(int setBounds(int a,int a,int b,int b,int width,int width,int height)height)方方法法是所有组件都拥有的一个方法,组件调用该方法可以设置本身的大小和在容器中的位置。例如,p是某个容器:p.setLayout(null);p.setLayout(null);把p的布局设置为空布局。向空布局的容器p添加一个组件c需要两个步骤。首先首先使用a

32、dd(c)add(c)方法方法向容器添加组件,然然后后组件c再调用setBounds(int setBounds(int a,int a,int b,int b,int width,int width,int height)height)方方法法设置该组件在容器中的位置和本身的大小。组件都是一个矩形结构,方法中的参数a和b是被添加的组件c的左上角在容器中的位置坐标,即该组件距容器左面a个像素,距容器上方b个像素;weidth和height是组件c的宽和高。2110.5 10.5 中间容器中间容器_1_1JPanel面板,2JScrollPane窗格,3JSplitPane窗格 轻组件都是容器,

33、但仍有一些经常用来添加组件的轻容器,相对于底层重容器而言,我们习惯上称这些轻容器为中间容器。SWING提供了许多功能各异的中间容器,而且容易学习掌握。本节将简单介绍JPanel面板、JScrollPane滚动窗格、JSplitPane拆分窗格和JLayeredPane分层窗格。1 1JPanelJPanel面板面板 可以使用JPanel创建一个面板,再向这个面板添加组件,然后把这个面板添加到底层容器或其他中间容器中。JPanel面板的默认布局是FlowLayoutFlowLayout布布局局。JPanel类构造方法方法Jpanel()Jpanel()可以构造一个面板容器对象。2 2JScrol

34、lPaneJScrollPane窗格窗格 可以把一个组件放到一个滚动窗格中,然后通过滚动条来观察这个组件。JScorollPane的构造方法方法JScorollPane(component c)JScorollPane(component c)可以构造一个滚动窗格。3 3JSplitPaneJSplitPane窗格窗格 拆分窗格有两种类型水平拆分和垂直拆分。水平拆分窗口用一条拆分线把容器分成左右两部分,左面放一个组件,右面放一个组件,拆分线可以水平移动。垂直拆分窗格由一条拆分线分成上下两部分,上面放一个组件,下面放一个组件,拆分线可以垂直移动。JSplitPane的构造方方法法JSplitPa

35、ne(int JSplitPane(int a,Component a,Component b,Component b,Component c)c)可以构造一个拆分窗格,参数a取JSplitPane的静态常量 HORIZONTAL_SPLIT或VERTICAL_SPLIT,以决定是水平还是垂直拆分。后两个参数决定要放置的组件。拆分窗格调用setDividerLocation(double position)setDividerLocation(double position)设置拆分线的位置。22 4JLayeredPane分层窗格分层窗格 如果添加到容器中的组件经常需要处理重叠问题,就可以考

36、虑将组件添加到JLayeredPane容器。JLayeredPane容器将容器分成5个层,容器使用add(Jcomponent add(Jcomponent com,com,int int layer);layer);添加组件com,并指定com所在的层,其中参数layer取值JLayeredPaneJLayeredPane类类中的类常量:DEFAULT_LAYER、PALETTE_LAYER、MODAL_LAYER、POPUP_LAYER、DRAG_LAYER。DEFAULT_LAYERDEFAULT_LAYER是最底层,添加到DEFAULT_LAYERDEFAULT_LAYER层层的组件如

37、果和其他层的组件发生重叠时,将被其他组件遮挡。DRAG_LAYERDRAG_LAYER层层是最上面的层,如果JLayeredPane中添加了许多组件,鼠标移动一组件时,可以把移动的组件放到DRAG_LAYERDRAG_LAYER层。这样,组件在移动过程中,就不会被其他组件遮挡。添加到同一层上的组件,如果发生重叠,先添加的会遮挡后添加的组件。JLayeredPane对象调用 public public void void setLayer(Component setLayer(Component c,int c,int layer)layer)可以重新设置组件c所在的层,调用public pub

38、lic int getLayer(Component c)int getLayer(Component c)可以获取组件c所在的层数。例例10-710-7在JLayeredPane容器中添加了5个组件,分别位于不同的层上(效果如图10.8所示)23 例子例子10-7 运行效果图运行效果图10.82410.6 10.6 文本组件文本组件_ _ 1 JTextField1 JTextField文本框文本框,2 JPasswordField,2 JPasswordField密码框密码框1 1JTextFieldJTextField文本框文本框 JComponent的子类JTextField是专门用来

39、建立文本框的,即JTextField创建的一个对象就是一个文本框。用户可以在文本框输入单行的文本。JTextField类的主要方法如下:JTextField(int JTextField(int x)x)创建文本框对象,可以在文本框中输入若干个字符,文本框的可见字符个数由参数 x指定。JTextField(String JTextField(String s)s)创建文本框对象,则文本框的初始字符串为s,可以在文本框中输入若干个字符。public public void void setText(String setText(String s)s)设置文本框中的文本为参数s指定的文本,文本框中

40、先前的文本将被清除。public String getText()public String getText()获取文本框中的文本。public public void void setEditable(boolean setEditable(boolean b)b)指定文本框的可编辑性。创建的文本框默认是可编辑的。public public void void setHorizontalAlignment(int setHorizontalAlignment(int alignment)alignment)设置文本在文本框中的对齐 方 式,alignment的 有 效 值 为 JTextFi

41、eld.LEFT、JTextField.CENTER和JTextField.RIGHT。2 2JPasswordFieldJPasswordField密码框密码框 使用JTextField的子类JPasswordField可以建立一个密码框对象。密码框可以使用setEchoChar(char c)setEchoChar(char c)设置回显字符(默认的回显字符是*),charchar getPassword()getPassword()方法返回密码框中的密码。253ActionEvent事件事件 当用户在有输入焦点的文本框中按回车键、单击按钮、在一个下拉式列表中选择一个条目等操作时,都发生界

42、面事件。程序有时要对发生的事件做出反应,来实现特定的任务。在学习处理事件时,读者必须很好地掌握事事件件源源、监监视视器器、处理事件的接口处理事件的接口这三个概念。JTextField和JPasswordField触发ActionEventActionEvent事事件件,通过处理文本框这个具体的组件上的事件,来掌握处理事件的基本原理。263ActionEvent事件事件_ _处理事件的基本原理处理事件的基本原理1)1)事事件件源源:能够产生事件的对象都可以称为事件源,如文本框、按钮、下拉式列表等。也就是说,事件源必须是一个对象,而且这个对象必须是Java认为能够发生事件的对象。事件的对象。2)2

43、)监监视视器器:我们需要一个对象对事件源进行监视,以便对发生的事件做出处理。事件源通过调用相应的方法将某个对象作为自己的监视器。例如,对于文本框,这个方法是:addActionListener(ActioListener listener)addActionListener(ActioListener listener)对于获取了监视器的文本框对象,在文本框获得输入焦点之后,如果用户按回车 键,Java运 行 系 统 就 自 动 用 ActionEventActionEvent类类 创 建 了 一 个 对 象,即 发 生 了ActionEventActionEvent事事件件。也就是说,事件源

44、获得监视器之后,相应的操作就会导致事件的发生,并通知监视器,监视器就会做出相应的处理。3)3)处理事件的接口处理事件的接口:发生ActionEvent事件的事件源对象获得监视器方法是:addActionListener(ActionListener addActionListener(ActionListener listener);listener);该方法中的参数是ActionListenerActionListener类类型型的的接接口口,因此必须将一个实现ActionListenerActionListener接接口口的类创建的对象传递给该方法的参数,使得该对象成为事件源的监视器。监视

45、器负责调用特定的方法处理事件,创建监视器的类必须提供处理事件的特定方法,即实现接口方法。Java采用接口回调技术来处理事件,当事件源发生事件时,接口立刻通知监视器自动调用实现的某个接口方法,接口方法规定了怎样处理事件的操作。273ActionEvent事件事件_ _事件处理模式图事件处理模式图10.910.9 接口回调这一过程对程序是不可见的,Java在设计组件事件时已经设置好了这一回调过程,程序只需让事件源获得正确的监视器,即将实现了正确接口的对象 的 引 用 传 递 给 方 法addActionListener(ActionListener addActionListener(Action

46、Listener listener)listener)中 的 参 数listener。我们称文本框和密码框事件源可以发生ActionEventActionEvent类类型型事件。为了能监视到这种类型 的 事 件,事 件 源 必 须 使 用addActionListeneraddActionListener()()方方法法获得监视器;创建监视器 的 类 必 须 实 现接接 口口ActionListenerActionListener。事件处理模式如图10.9所示.283ActionEvent事件事件_ _ ActionEventActionEvent类中的方法类中的方法4)ActionEvent

47、4)ActionEvent类中的方法类中的方法 ActionEvent事件对象调用方法public public Object Object getSource()getSource()可以返回发生ActionEvent事件的对象的引用。ActionEvent事件对象调用方法public public String String getActionCommand()getActionCommand()获取发生ActionEvent事件时,和该事件相关的一个命令字符串,对于文本框,当发生ActionEvent事件时,用户在文本框中输入的文本字符串就是和该事件相关的一个命令字符串。例例10-810

48、-8中,窗口中有一个文本框text,text的事件监视器由PoliceStation类负责创建。当用户在text中输入字符串回车后,监视器负责在命令输出该字符串以及它的长度(效果如图10.10所示)。例例10-9中中,titleText和passwordText有监视器。当在titleText中输入字符串回车后,监视器负责将窗体的标题更改为当前titleText中的文本。当在passwordText中输入密码回车后,监视器负责将密码显示在titleText中(效果如图10.11所示)。例例10-1010-10使用匿名对象作为inputText的监视器,当在inputText中输入一个数字字符串

49、后,监视器负责计算这个数的平方,并将结果放入showText中(效果如图10.12所示)。29 例子例子10-8,9,10 运行效果图运行效果图10.10,10.11,10.12304菜单项上的菜单项上的ActionEvent事件事件 单击某个菜单项可以发生ActionEvent事件。菜单项使用 addActionListener(ActionListener listner)方法获得监视器。315JTextArea文本区文本区_1 JTextArea_1 JTextArea常用方法常用方法 JTextArea类专门用来建立文本区,用户可以在文本区输入多行的文本.JTextArea(int r

50、ows,int columns)JTextArea(int rows,int columns)构造一个可见行和可见列分别是rows和columns的文本区。文本区对象可以使用下列方法文本区对象可以使用下列方法:setLineWrap(boolean b)setLineWrap(boolean b)决定输入的文本能否在文本区的右边界自动换行;setWrapStyleWord(boolean b)setWrapStyleWord(boolean b)决定是以单词为界或以字符为界进行换行(b取true/false)。getText()getText()和和setText(String s)setTe

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

当前位置:首页 > 教育专区 > 大学资料

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

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