第10部分基于Swing的图形用户界面设计方案

上传人:仙*** 文档编号:185494853 上传时间:2023-02-03 格式:PPT 页数:93 大小:1.96MB
收藏 版权申诉 举报 下载
第10部分基于Swing的图形用户界面设计方案_第1页
第1页 / 共93页
第10部分基于Swing的图形用户界面设计方案_第2页
第2页 / 共93页
第10部分基于Swing的图形用户界面设计方案_第3页
第3页 / 共93页
资源描述:

《第10部分基于Swing的图形用户界面设计方案》由会员分享,可在线阅读,更多相关《第10部分基于Swing的图形用户界面设计方案(93页珍藏版)》请在装配图网上搜索。

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

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

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

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

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

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

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

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

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

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

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

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

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

14、使用KeyStrokeKeyStroke类的类类的类方法public static public static KeyStroke getKeyStroke(int keyCode,intKeyStroke getKeyStroke(int keyCode,int modifiers)modifiers)返回一个KeyStrokeKeyStroke对象对象,其中参数keyCodekeyCode取值范围为KeyEventKeyEvent.VK_A.VK_A KeyEventKeyEvent.VK_Z.VK_Z,modifiers的取值如下:InputEvent.ALT_MASKInputEven

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

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

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

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

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

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

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

22、ut布局(效果如图10.5所示)。15例子例子10-4 运行效果图运行效果图10.516 3CardLayout 布局 使用CardLayout容器可以容纳多个组件,但同一时刻容器只能从这些组件中选出一个来显示,就像一叠“扑克牌”每次只能显示最上面的一张一样,这个被显示的组件将占据所有的容器空间。JTabbedPane窗格的默认布局是CardLayout布局,并且自带一些选项卡,这些选项卡与用户添加到JTabbedPane窗格中的组件相对应,单击该选项卡,JTabbedPane窗格将显示对应的组件。选项卡窗格自带的选项卡默认地在该选项卡窗格的顶部,从左向右依次排列,选项卡的顺序和所对应的组件的

23、顺序相同。JTabbedPaneJTabbedPane窗格窗格可以使用add(String text,Component c);add(String text,Component c);方法将组件c添加到JTabbedPane窗格中,并指定和组件c对应的选项卡的文本提示是text。使用JTabbedPaneJTabbedPane窗格窗格的构造方法 public JTabbedPane(int tabPlacementpublic JTabbedPane(int tabPlacement)创建的选项卡窗格的选项卡的位置由参数tabPlacement指定,该参数的有效值为JTabbedPane.T

24、OPJTabbedPane.TOP、JTtabbedPane.BOTTOMJTtabbedPane.BOTTOM、JTabbedPane.LEFT JTabbedPane.LEFT 和和JTabbedPaneJTabbedPane.RIGHT.RIGHT。例10-5在选项卡窗格中添加了5个按钮(带有图标),并设置了相对应的选项卡的文本提示,然后将选项卡窗格添加到窗体的内容面板中(效果如图10.6所示)。17例子例子10-5 运行效果图运行效果图10.618 4GridLayout布局布局 GridLayoutGridLayout是使用较多的布局编辑器,其基本布局策略是把容器划分成若干行若干列的

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

26、d()add()将组件加入容器,组件进入容器的顺序将按照第一行第一个、第一行第二个第一行最后一个、第二行第一个最后一行第一个最后一行最后一个。使用GridLayoutGridLayout布局布局的容器最多可添加m mn n个组件个组件。GridLayoutGridLayout布局布局中每个网格都是相同大小,并且强制组件与网格的大小相同。由于GridLayoutGridLayout布局布局中每个网格都是相同大小并且强制组件与网格的大小相同,使得容器中的每个组件也都是相同的大小,显得很不自然。为了克服这个缺点,可以使用容器嵌套。例如,一个容器使用GridLayoutGridLayout布局布局,将

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

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

29、orizontalBoxcreateHorizontalBox()()可以获得一个具有行型盒式布局的盒式容器;BoxBox类类的类(静态)方法createVerticalBoxcreateVerticalBox()()可以获得一个具有列型盒式布局的盒式容器。控制盒式布局容器中组件之间的距离,需要使用水平支撑或垂直支撑。BoxBox类类调用静态方法createHorizontalStrut(intcreateHorizontalStrut(int width)width)可以得到一个不可见的水平Struct类型对象.称为水平支撑.该水平支撑的高度为0,宽度是width。BoxBox类类调用静态方

30、法createVertialStrut(intcreateVertialStrut(int height)height)可以得到一个不可见的垂直Struct类型对象,称为垂直支撑.参数height决定垂直支撑的高度,垂直支撑的宽度为0。例例10-610-6中中(效果如图10.7所示),有两个列型盒式容器boxV1、boxV2和一个行型盒式容器baseBox。在列型盒式容器的组件之间添加垂直支撑,控制组件之间的距离,将boxV1、boxV2添加到baseBox中,并在它们之间添加水平支撑。20例子例子10-6 运行效果图运行效果图10.721 6null布局布局 可以把一个容器的布局设置为nul

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

32、 b,int width,intsetBounds(int a,int b,int width,int height)height)方方法法设置该组件在容器中的位置和本身的大小。组件都是一个矩形结构,方法中的参数a和b是被添加的组件c的左上角在容器中的位置坐标,即该组件距容器左面a个像素,距容器上方b个像素;weidth和height是组件c的宽和高。2210.5 10.5 中间容器中间容器_1_1JPanel面板,2JScrollPane窗格,3JSplitPane窗格 轻组件都是容器,但仍有一些经常用来添加组件的轻容器,相对于底层重容器而言,我们习惯上称这些轻容器为中间容器。SWING提供

33、了许多功能各异的中间容器,而且容易学习掌握。本节将简单介绍JPanel面板、JScrollPane滚动窗格、JSplitPane拆分窗格和JLayeredPane分层窗格。1 1JPanelJPanel面板面板 可以使用JPanel创建一个面板,再向这个面板添加组件,然后把这个面板添加到底层容器或其他中间容器中。JPanel面板的默认布局是FlowLayoutFlowLayout布局布局。JPanel类构造方法方法JpanelJpanel()()可以构造一个面板容器对象。2 2JScrollPaneJScrollPane窗格窗格 可以把一个组件放到一个滚动窗格中,然后通过滚动条来观察这个组件。

34、JScorollPane的构造方法方法JScorollPaneJScorollPane(component c)(component c)可以构造一个滚动窗格。3 3JSplitPaneJSplitPane窗格窗格 拆分窗格有两种类型水平拆分和垂直拆分。水平拆分窗口用一条拆分线把容器分成左右两部分,左面放一个组件,右面放一个组件,拆分线可以水平移动。垂直拆分窗格由一条拆分线分成上下两部分,上面放一个组件,下面放一个组件,拆分线可以垂直移动。JSplitPane的构造方法方法JSplitPane(intJSplitPane(int a,Component b,Component c)a,Comp

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

36、component com,intadd(Jcomponent com,int layer);layer);添加组件com,并指定com所在的层,其中参数layer取值JLayeredPaneJLayeredPane类类中的类常量:DEFAULT_LAYER、PALETTE_LAYER、MODAL_LAYER、POPUP_LAYER、DRAG_LAYER。DEFAULT_LAYERDEFAULT_LAYER是最底层,添加到DEFAULT_LAYERDEFAULT_LAYER层层的组件如果和其他层的组件发生重叠时,将被其他组件遮挡。DRAG_LAYERDRAG_LAYER层层是最上面的层,如果J

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

38、获取组件c所在的层数。例例10-710-7在JLayeredPane容器中添加了5个组件,分别位于不同的层上(效果如图10.8所示)24 例子例子10-7 运行效果图运行效果图10.82510.6 10.6 文本组件文本组件_ _ 1 1 JTextFieldJTextField文本框文本框,2,2 JPasswordFieldJPasswordField密码框密码框1 1JTextFieldJTextField文本框文本框 JComponent的子类JTextField是专门用来建立文本框的,即JTextField创建的一个对象就是一个文本框。用户可以在文本框输入单行的文本。JTextFie

39、ld类的主要方法如下:JTextField(intJTextField(int x)x)创建文本框对象,可以在文本框中输入若干个字符,文本框的可见字符个数由参数 x指定。JTextFieldJTextField(String s)(String s)创建文本框对象,则文本框的初始字符串为s,可以在文本框中输入若干个字符。public void setTextpublic void setText(String s)(String s)设置文本框中的文本为参数s指定的文本,文本框中先前的文本将被清除。public String getTextpublic String getText()()获取

40、文本框中的文本。public void setEditable(booleanpublic void setEditable(boolean b)b)指定文本框的可编辑性。创建的文本框默认是可编辑的。public void setHorizontalAlignment(intpublic void setHorizontalAlignment(int alignment)alignment)设置文本在文本框中的对齐方式,alignment的有效值为JTextField.LEFT、JTextField.CENTER和JTextField.RIGHT。2 2JPasswordFieldJPassw

41、ordField密码框密码框 使用JTextField的子类JPasswordField可以建立一个密码框对象。密码框可以使用setEchoCharsetEchoChar(char c)(char c)设置回显字符(默认的回显字符是*),charchar getPasswordgetPassword()()方法返回密码框中的密码。263ActionEvent事件事件 当用户在有输入焦点的文本框中按回车键、单击按钮、在一个下拉式列表中选择一个条目等操作时,都发生界面事件。程序有时要对发生的事件做出反应,来实现特定的任务。在学习处理事件时,读者必须很好地掌握事件源、监视器、事件源、监视器、处理事件

42、的接口处理事件的接口这三个概念。JTextField和JPasswordField触发ActionEventActionEvent事件事件,通过处理文本框这个具体的组件上的事件,来掌握处理事件的基本原理。273ActionEvent事件事件_ _处理事件的基本原理处理事件的基本原理1)1)事件源事件源:能够产生事件的对象都可以称为事件源,如文本框、按钮、下拉式列表等。也就是说,事件源必须是一个对象,而且这个对象必须是Java认为能够发生事件的对象。事件的对象。2)2)监视器监视器:我们需要一个对象对事件源进行监视,以便对发生的事件做出处理。事件源通过调用相应的方法将某个对象作为自己的监视器。例

43、如,对于文本框,这个方法是:addActionListener(ActioListeneraddActionListener(ActioListener listener)listener)对于获取了监视器的文本框对象,在文本框获得输入焦点之后,如果用户按回车键,Java运行系统就自动用ActionEventActionEvent类类创建了一个对象,即发生了ActionEventActionEvent事件事件。也就是说,事件源获得监视器之后,相应的操作就会导致事件的发生,并通知监视器,监视器就会做出相应的处理。3)3)处理事件的接口处理事件的接口:发生ActionEvent事件的事件源对象获得

44、监视器方法是:addActionListener(ActionListeneraddActionListener(ActionListener listener);listener);该方法中的参数是ActionListenerActionListener类型的接口类型的接口,因此必须将一个实现ActionListenerActionListener接口接口的类创建的对象传递给该方法的参数,使得该对象成为事件源的监视器。监视器负责调用特定的方法处理事件,创建监视器的类必须提供处理事件的特定方法,即实现接口方法。Java采用接口回调技术来处理事件,当事件源发生事件时,接口立刻通知监视器自动调用实

45、现的某个接口方法,接口方法规定了怎样处理事件的操作。283ActionEvent事件事件_ _事件处理模式图事件处理模式图10.910.9 接口回调这一过程对程序是不可见的,Java在设计组件事件时已经设置好了这一回调过程,程序只需让事件源获得正确的监视器,即将实现了正确接口的对象的引用传递给方法addActionListener(ActionListeneraddActionListener(ActionListener listener)listener)中的参数listener。我们称文本框和密码框事件源可以发生ActionEventActionEvent类类型型事件。为了能监视到这种类

46、型的事件,事件源必须使用addActionListeneraddActionListener()()方法方法获得监视器;创建监视器的类必须实现接口接口ActionListenerActionListener。事件处理模式如图10.9所示.293ActionEvent事件事件_ _ ActionEventActionEvent类中的方法类中的方法4)4)ActionEventActionEvent类中的方法类中的方法 ActionEvent事件对象调用方法public Object getSourcepublic Object getSource()()可以返回发生ActionEvent事件的对

47、象的引用。ActionEvent事件对象调用方法public String getActionCommandpublic String getActionCommand()()获取发生ActionEvent事件时,和该事件相关的一个命令字符串,对于文本框,当发生ActionEvent事件时,用户在文本框中输入的文本字符串就是和该事件相关的一个命令字符串。例例10-810-8中,窗口中有一个文本框text,text的事件监视器由PoliceStation类负责创建。当用户在text中输入字符串回车后,监视器负责在命令输出该字符串以及它的长度(效果如图10.10所示)。例例10-9中中,title

48、Text和passwordText有监视器。当在titleText中输入字符串回车后,监视器负责将窗体的标题更改为当前titleText中的文本。当在passwordText中输入密码回车后,监视器负责将密码显示在titleText中(效果如图10.11所示)。例例10-1010-10使用匿名对象作为inputText的监视器,当在inputText中输入一个数字字符串后,监视器负责计算这个数的平方,并将结果放入showText中(效果如图10.12所示)。30 例子例子10-8,9,10 运行效果图运行效果图10.10,10.11,10.12314菜单项上的菜单项上的ActionEvent事

49、件事件 单击某个菜单项可以发生ActionEvent事件。菜单项使用 addActionListener(ActionListener listner)方法获得监视器。325JTextArea文本区文本区_1 _1 JTextAreaJTextArea常用方法常用方法 JTextArea类专门用来建立文本区,用户可以在文本区输入多行的文本.JTextArea(int rows,intJTextArea(int rows,int columns)columns)构造一个可见行和可见列分别是rows和columns的文本区。文本区对象可以使用下列方法文本区对象可以使用下列方法:setLineWra

50、p(booleansetLineWrap(boolean b)b)决定输入的文本能否在文本区的右边界自动换行;setWrapStyleWord(booleansetWrapStyleWord(boolean b)b)决定是以单词为界或以字符为界进行换行(b取true/false)。getText()getText()和和setTextsetText(String s)(String s)获取并替换文本区的文本 append(String s)append(String s)尾加文本 insert(String s,int insert(String s,int x)x)在文本区的指定位置处插入

51、文本 replaceRange(String newString,int start,int replaceRange(String newString,int start,int end)end)将文本区start至end处的文本替换为新文本newString getCaretPosition getCaretPosition()()获取文本区中输入光标的位置 setCaretPosition(int setCaretPosition(int position)position)设置文本区中输入光标的置(position不能大于文本区中字符的个数)copy()copy()和和cut()cut

52、()方法方法 将文本区中选中的内容复制或剪切到系统的剪贴板 paste()paste()将系统剪贴板上的文本数据粘贴在文本区中。setSelectionStart(int selectionStart)setSelectionStart(int selectionStart)和和setSelectionEnd(int selectionEndsetSelectionEnd(int selectionEnd)方方法法设置选中的文本select(int selectionStart,int selectionEnd)select(int selectionStart,int selectionEn

53、d)和和selectAllselectAll()()选中部分或全部文本 例例10-1110-11中,单击菜单“编辑”中的相应菜单项将文本区中选中的内容剪切、复制到系统剪贴板或将系统剪贴板的内容粘贴到文本区,效果如图10.13所示.33 例子例子10-11 运行效果图运行效果图10.13345JTextArea文本区文本区_ _2 2 文本区的文本区的DucumentEvent事件事件 文本区可以触发DucumentEvent事件,DucumentEven类在javax.swing.event包中。用户在文本区组件的UI代表的视图中进行文本编辑操作,使得文本区中的文本内容发生变化,将导致该文本区

54、所维护的文档模型中的数据发生变化,从而导致DucumentEvent事件的发生。文本区调用 addDucumentListener(DucumentListener addDucumentListener(DucumentListener listener)listener)向文本区维护的文档注册监视器。监视器需实现DucumentListener接口,该接口中有3个方法:public void changedUpdate(DocumentEventpublic void changedUpdate(DocumentEvent e)e)public void removeUpdate(Docu

55、mentEvent public void removeUpdate(DocumentEvent e)e)public void insertUpdate(DocumentEvent public void insertUpdate(DocumentEvent e)e)getDocumentgetDocument()()返回维护的文档,该文档是实现了Document接口类的一个实例。例例10-1210-12中中,有两个文本区和一个文本框。当用户在文本区inputText进行编辑操作时,文本区showText将显示第一个文本区中所有和指定模式匹配的字符串。用户可以事先在一个文本框patternT

56、ext中输入指定的模式,比如,输入:sdpPunct+,即通过该模式获得文本区inputText中的全部单词,效果如图10.14所示。35 事件处理模式图事件处理模式图10.910.93610.7 10.7 按钮与标签组件按钮与标签组件_ _1JButton按钮按钮 JButton类是专门用来建立按钮的,即JButton类创建的一个对象就是一个按钮。JButton类常用的方法如下:Button(String text)Button(String text)创建名字是text的按钮。public JButtonpublic JButton(Icon icon)(Icon icon)创建带有图标i

57、con的按钮。public JButtonpublic JButton(String text,Icon icon)(String text,Icon icon)创建名字是text且带有图标icon的按钮public void setTextpublic void setText(String text(String text)重新设置当前按钮的名字,名字由参数text指定。public String getTextpublic String getText()()获取当前按钮上的名字。public void setIconpublic void setIcon(Icon icon)(Icon

58、 icon)重新设置当前按钮上的图标。public Icon getIconpublic Icon getIcon()()获取当前按钮上的图标public void setHorizontalTextPosition(int textPositionpublic void setHorizontalTextPosition(int textPosition)设置按钮名字相对按钮上图标的水平位置。public void setVerticalTextPosition(int textPositionpublic void setVerticalTextPosition(int textPosit

59、ion)设置按钮上名字相对按钮上图标的垂直位置。public void setMnemonicpublic void setMnemonic(char mnemonic)(char mnemonic)设置按钮的键盘激活方式,mnemonic的有效值为az。如果按钮用此方法设置了键盘激活方式,如参数mnemonic取值o,那么在键盘操作ALT+O就可激活按钮。public void addActionListener(ActionListenerpublic void addActionListener(ActionListener)向按钮增加动作监视器。public void removeAc

60、tionListener(ActionListenerpublic void removeActionListener(ActionListener)移去按钮上的动作监视器。按钮可以发生ActionEvent事件,当按钮获得监视器之后,用鼠标单击按钮或按钮获得焦点时按下空格键(Space键),就发生ActionEven事件,即java.awt.envent包中的ActionEvent类自动创建了一个事件对象。例例10-1310-13中中,单击按钮切换按钮上的图标,效果如图10.15所示。37 例子例子10-13 运行效果图运行效果图10.1538 2JLabel标签标签 JLabel类负责创建

61、标签对象,标签用来显示信息,但没有编辑功能。JLabelJLabel类的构造方法如下:类的构造方法如下:public JLabelpublic JLabel()()创建没有名字的标签。public JLabelpublic JLabel(String s)(String s)创建名字是s的标签,s在标签中靠左对齐。public JLabel(String s,int aligmentpublic JLabel(String s,int aligment)参数aligment决定标签中的文字在标签中的水平对齐方式。aligment的取值是JLabel.CENTER、JLabel.LEFT或JLa

62、bel.RIGHT。public JLabelpublic JLabel(Icon icon)(Icon icon)创建具有图标icon的标签,icon在标签中靠左对齐。public JLabel(String s,Icon icon,int aligmentpublic JLabel(String s,Icon icon,int aligment)创建名字是s,具有图标icon的标签。参数aligment决定标签中的文字和图标作为一个整体在标签中的水平对齐方式(名字总是在图标的右面)。JLabelJLabel类的常用实例方法如下:类的常用实例方法如下:String getTextString

63、 getText()()获取标签的名字。void setTextvoid setText(String s)(String s)设置标签的名字是s。Icon getIconIcon getIcon()()获取标签的图标。void setIconvoid setIcon(Icon icon)(Icon icon)设置标签的图标是icon。void setHorizontalTextPosition(intvoid setHorizontalTextPosition(int a)a)参数a确定名字相对于标签上的图标的位置。a的取值是JLabel.LEFT或JLabel.RIGHT。void set

64、VerticalTextPosition(intvoid setVerticalTextPosition(int a)a)参数a确定名字相对于JLabel上的图标的位置。参数a取值是JLabel.BOTTOM或JLabel.TOP。3910.8 10.8 复选框与单选按钮组件复选框与单选按钮组件_ _ 1JCheckBox复选框 复选框提供两种状态一种是选中,另一种是未选中,用户通过单击该组件切换状态。JCheckBox类常用方法如下:public JCheckBoxpublic JCheckBox()()创建一个没有名字的复选框,初始状态是未选中。public JCheckBoxpublic

65、 JCheckBox(String text)(String text)创建一个名字是text的复选框,初始状态是未选中。public JCheckBoxpublic JCheckBox(Icon icon)(Icon icon)创建一个带有默认图标icon但没有名字的复选框,初始状态是未选中。public JCheckBoxpublic JCheckBox(String text,Icon icon)(String text,Icon icon)创建一个带有默认图标和名字text的复选框,初始状态是未选中。public void setIcon(Icon defaultIconpublic

66、void setIcon(Icon defaultIcon)设置复选框上的默认图标。public void setSelectedIcon(Icon selectedIconpublic void setSelectedIcon(Icon selectedIcon)设置复选框选中状态下的图标。该方法可能经常被使用,因为如果不明显地设置选中状态时的图标,复选框无论是选中状态还是未选种状态总是显示复选框上的默认图标,用户很难知道复选框是处于怎样的状态。public boolean isSelectedpublic boolean isSelected()()如果复选框处于选中状态该方法返回true,否则返回false。如果复选框没有指定默认图标,复选框就显示为一个“小方框”,如果是选中状态,“小方框”里面就有个小对号。40复选框与单选按钮组件复选框与单选按钮组件_ _ItemEventItemEvent事件事件 当复选框获得监视器之后,复选框从未选中状态变成选中状态或从选中状态变成未选中状态时就发生ItemEventItemEvent事件事件,ItemEventItemEvent类类将自动

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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