Java实用PPT课件第10章

上传人:pu****.1 文档编号:584145665 上传时间:2024-08-30 格式:PPT 页数:93 大小:1.54MB
返回 下载 相关 举报
Java实用PPT课件第10章_第1页
第1页 / 共93页
Java实用PPT课件第10章_第2页
第2页 / 共93页
Java实用PPT课件第10章_第3页
第3页 / 共93页
Java实用PPT课件第10章_第4页
第4页 / 共93页
Java实用PPT课件第10章_第5页
第5页 / 共93页
点击查看更多>>
资源描述

《Java实用PPT课件第10章》由会员分享,可在线阅读,更多相关《Java实用PPT课件第10章(93页珍藏版)》请在金锄头文库上搜索。

1、第第1010章章 基于基于SwingSwing的图形用户界面设计的图形用户界面设计本章导读本章导读 AWT组件与SWING组件 JFrame窗体、菜单组件、布局设计 中间容器、文本组件 按钮与标签组件、复选框与单选按钮组件 列表组件、表格组件、树组件和进度条组件 窗口事件、鼠标事件、焦点事件和键盘事件 对话框 AWT线程与计时器 MVC设计模式 发布应用程序坞冬虾耀改患匡秋檀拴晋墅附知酵萎餐拽韵教妄池腿缨郡驾跪响党韵婚襄Java实用PPT课件第10章Java实用PPT课件第10章110.1 AWT10.1 AWT组件与组件与SWINGSWING组件概述组件概述 Java早期进行用户界面设计时,

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

3、组件是轻组件大部分组件是轻组件,没有同位体。 SWING组件的轻组件在设计上和AWT完全不同,轻组件把与显示组件有关的许多工作和处理组件事件的工作交给相应的UI代表来完成。这些UI代表是用Java语言编写的类,这些类被增加到Java的运行环境中,因此组件的外观不依赖平台,不仅在不同平台上的外观是相同的,而且较组件有更高的性能。如果Java运行环境低于1.2版本,就不能运行含有SWING组件的程序。 拳棍蜒源拥韭莹轨栗袒东硬瞬浙穷尔仿字符蛤传韦娜榨知称残菩攻高拼去Java实用PPT课件第10章Java实用PPT课件第10章2图图10.1 JComponent类的部分子类以及类的部分子类以及JFr

4、ame类和类和JDialog类类 勾虐抑矣戍河肄玛诽安初唆继颅掳洛浩殖惰慈渭胖众更椅郊涛傲妮仪村残Java实用PPT课件第10章Java实用PPT课件第10章3容器类(容器类(Container)和组件类)和组件类(Component) Java把由Component类的子类或间接子类创建的对象称为一个组件;把由Container的子类或间接子类创建的对象称为一个容器。 可以向容器添加组件。Container类提供了一个public方法add(),一个容器可以调用这个方法将组件添加到该容器中。 调 用 removeAll()方 法 可 以 移 掉 容 器 中 的 全 部 组 件 , 调 用re

5、move(Component c)方法可以移掉容器中参数指定的组件。 每当容器添加新的组件或移掉组件时,应该让容器调用validate()方法,以保证容器中的组件能正确显示出来。容器本身也是一个组件,因此可以把一个容器添加到另一个容器中实现容器的嵌套。 javax.swing包 中 有 4个 最 重 要 的 类 JApplet, JFrame, JDialog和JComponent。注注:JComponent类的子类都是轻组件,JComponent类是java.awt包中Container类的子类,因此所有的轻组件也都是容器。 而JFrame、JApplet、JDialog都是重组件,即有同位

6、体的组件,这样窗口(JFrame)、对话框(JDialog)、小应用程序(Java Applet)可以和操作系统交互信息。轻组件必须在这些容器中绘制自己,习惯上称这些容器为SWING的底层容器。迸兑耻忍笋钉津撕乎拖伍葬贤井驼祸娩赚浩掷泌檀接赌菌类卢换猛哇和态Java实用PPT课件第10章Java实用PPT课件第10章410.2 JFrame10.2 JFrame窗体窗体 javax.swing包中的JFrame类是java.awt包中Frame类的子类,因此JFrame类其子类创建的对象是窗体。 当应用程序需要一个窗口时,可使用JFrame或其子类创建一个对象。窗口默认地被系统添加到显示器屏幕

7、上,因此不允许将一个窗口添加到另一个容器中。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个像素;窗口的宽是width,高是height。public void setSize(

8、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) 设置窗口是否可调整大小,窗口默认是可调整大小的。public public void void setD

9、efaultCloseOperation(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 隐藏当前窗口,并释放窗体占有的其他资源 4)EXIT_ON_CLOSE

10、4)EXIT_ON_CLOSE 结束窗体所在的应用程序 这4个常量都是JFrame类中的static常量,单击关闭图标后,程序根据operation取值做出不同的处理。 例子例子10-110-1用JFrame创建了两个窗口,程序运行效果如图10.2。 乒袍诱榜涨篆扁椒件坞帝撩零申世并淤狮仔庙照挺弹龟敌缓锁柱邪繁远汾Java实用PPT课件第10章Java实用PPT课件第10章5例子例子10-1 运行效果图运行效果图10.2滞共滑谦绊湖玫纹萧稳憋袋撼县低帜项锻乙怕筒臼已佃迂影珐黔竟诈烬衷Java实用PPT课件第10章Java实用PPT课件第10章610.3 10.3 菜单组件菜单组件 窗口中的菜单

11、条、菜单、菜单项是我们所熟悉的界面,菜单条、菜单、菜单项是窗口常用的组件,菜单放在菜单条里,菜单项放在菜单里。1JMenuBar菜单条菜单条 JComponent类 的 子 类 JMenuBar是 负 责 创 建 菜 单 条 的 , 即JMenuBar的一个实例就是一个菜单条的一个实例就是一个菜单条。 JFrame类有一个将菜单条放置到窗口中的方法: public void setJMenuBar(JMenuBar menubar); 该方法将菜单条添加到窗口的菜单条区域(注意:只能向窗口添加一个菜单条)。 烬故惫闺名邑幽购埋十彪禁射侯娇糟粳童噪万盒襄衬彩狰胎铅朴始欣着卤Java实用PPT课件

12、第10章Java实用PPT课件第10章72. JMenu菜单菜单 JComponent类的子类JMenu类是负责创建菜单的,即JMenu的一个实例就是一个菜单。JMenu类的主要方法有以下几种: JMenu(String s)JMenu(String s) 建立一个指定标题菜单,标题由参数s确定 public public void void add(MenuItem add(MenuItem item)item) 向菜单增加由参数item指定的菜单选项对象。 public void add(String s)public void add(String s) 向菜单增加指定的选项。 publ

13、ic JMenuItem getItem(int n)public JMenuItem getItem(int n) 得到指定索引处的菜单选项。 public int getItemCount()public int getItemCount() 得到菜单选项数目。伯硅嫂距搓乙柏庸暑郧锐唇瞥蜜啄荫辟锁都巷疲侦伐摩涝时磨拼兵杆擎虽Java实用PPT课件第10章Java实用PPT课件第10章83. JMenuItem菜单项菜单项 JMenuItem是JMenu的父类,该类是负责创建菜单项的,即JMenuItem的一个实例就是一个菜单项。菜单项放在菜单里。JMenuItem类的主要方法有以下几种:

14、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 String getLabel() 得到菜单项的名字。 public public void void setAcc

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

16、blic 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的 取 值 如 下 :InputEvent.ALT_MASKInputEvent.ALT_MASK

17、,InputEvent.CTRL_MASKInputEvent.CTRL_MASK和和InputEvent.SHIFT_MASKInputEvent.SHIFT_MASK。寓们赠茨抱奄钥葱适甘外浸碧远忱癸酱影偏堤良瞪耕汇锈习墓壮饰舅斌烩Java实用PPT课件第10章Java实用PPT课件第10章94. 嵌入子菜单嵌入子菜单 JMenu是JMenuItem的子类,因此菜单项本身还可以是一个菜单,这样的菜单项称为子菜单。 为了使得菜单项有一个图标,可以用图图标标类类IconIcon声明一个图标,然后使用其子类ImageIconImageIcon类类创建一个图标,如 Icon icon=new Im

18、ageIcon(dog.gif ); Icon icon=new ImageIcon(dog.gif ); 下面的例10-2中有一个含有菜单的窗口(效果如图10.3所示)。 选恒龙照荤兹砌烯反滥僻姬膏猫吴琳笆谴酥吼味议涸疏撕猴脉佃顺描埋匈Java实用PPT课件第10章Java实用PPT课件第10章1010.4 10.4 布局设计布局设计 当把组件添加到容器中时,希望控制组件在容器中的位置,这就需要学习布局设计的知识。 本 节 将 介 绍 java.awt包 中 的 FlowLayout、BorderLayout、 CardLayout、 GridLayout布 局 类 和java.swing.

19、border包中的BoxLayout布局类。 容器可以使用方法 setLayout( setLayout(布局对象布局对象) ); 来设置自己的布局。 对于JFrame窗口,默认布局是BorderLayout布局。忌连贾口罩瓤赣朽辨课霖穿伙南逞旷篮嘛匆连肄郁豁瓢宽弯驴跺搅形馋湃Java实用PPT课件第10章Java实用PPT课件第10章11 1FlowLayout布局布局 FlowLayout类的对象称为FlowLayout布局。FlowLayout类的一个常用构造方法如下: FlowLayout();FlowLayout();构造方法可以创建一个居中对齐的布局对象,如: FlowLayout

20、 flow=new FlowLayout();FlowLayout flow=new FlowLayout(); con.setLayout(flow); con.setLayout(flow); 容器con使用flowflow这个布局对象 容器con可以使用Container类提供的add()add()方法方法将组件顺序地添加到容器中。 FlowLayout布局对象调用setAlignment(int setAlignment(int aligin)aligin)方方法法可以重新设置布局的对齐方式,其中aligin可以取值FlowLayout.LEFT、FlowLayout.CENTER或F

21、lowLayout.RIGHT。 FlowLayout布局对象调用setHgap(int setHgap(int hgap)hgap)方方法法和setVgap(int setVgap(int vgap)vgap)方方法法可以重新设置布局的水平间隙和垂直间隙。如果需要改变最佳大小,组件需调用: public void setPreferredSize(Dimension preferredSize) public void setPreferredSize(Dimension preferredSize)设置大小,例如:button.setPreferredSize(new Dimension(

22、20,20);button.setPreferredSize(new Dimension(20,20);注注:对对于于添添加加到到使使用用FlowLayoutFlowLayout布布局局的的容容器器中中的的组组件件,组组件件调调用用setSize(int setSize(int x,int y)x,int y)设置的大小无效。设置的大小无效。 例10-3中,JFrame使用FlowLayout布局放置10个组件(效果如图10.4所示)。蜂赠滁葡还乳舜衔毫春线俩冲蔫帖阐低套咱城苟来唐鲍评搞懈裳活蚜蚂侠Java实用PPT课件第10章Java实用PPT课件第10章12例子例子10-3 运行效果图运行

23、效果图10.4殷高奔殴狡署逻存菠嗽顷封工促翘辫割讫纪藤糙央厘抒挡苯蝗蜘搜馈幅鼠Java实用PPT课件第10章Java实用PPT课件第10章13 2BorderLayout布局布局 BorderLayout布局是Window容器的默认布局。 JFrame、JDialog都是Window类的间接子类,它们的内容面板的默认布局都是BorderLayout布局。 如果一个容器使用这种布局,那么容器空间简单地划分为东、西、南、北、中五个区域。每加入一个组件都应该指明把这个组件添加在哪个区域中,区域由BorderLayout中的静态常量CENTER、NORTH、SOUTH、WEST、EAST表示。例如,一

24、个使用BorderLayout布局的容器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个组件,如果容器中需要添

25、加的组件超过5个,就必须使用容器的嵌套或改用其他布局策略。 例10-4使用了BorderLayout布局(效果如图10.5所示)。份傻牡寝横闭苟锯膛该温扼巡花乡帐哩皑雾瓤握莲辅沪炉扫侨丘瞄靠招已Java实用PPT课件第10章Java实用PPT课件第10章14例子例子10-4 运行效果图运行效果图10.5决奢抄磷缉狞智谎酒燎铃蚂椅浑层阔怔佬矗龋嗡壮渣祷辊呻霉淋令馅演内Java实用PPT课件第10章Java实用PPT课件第10章15 3CardLayout 布局 使用CardLayout容器可以容纳多个组件,但同一时刻容器只能从这些组件中选出一个来显示,就像一叠“扑克牌”每次只能显示最上面的一张一

26、样,这个被显示的组件将占据所有的容器空间。 JTabbedPane窗格的默认布局是CardLayout布局,并且自带一些选项卡,这些选项卡与用户添加到JTabbedPane窗格中的组件相对应,单击该选项卡,JTabbedPane窗格将显示对应的组件。选项卡窗格自带的选项卡默认地在该选项卡窗格的顶部,从左向右依次排列,选项卡的顺序和所对应的组件的顺序相同。 JTabbedPaneJTabbedPane窗窗格格可以使用add(String add(String text,Component text,Component c);c);方法将组件c添加到JTabbedPane窗格中,并指定和组件c对应

27、的选项卡的文本提示是text。 使用JTabbedPaneJTabbedPane窗格窗格的构造方法 public public JTabbedPane(int JTabbedPane(int tabPlacement)tabPlacement)创建的选项卡窗格的选项卡的位 置 由 参 数 tabPlacement指 定 , 该 参 数 的 有 效 值 为 JTabbedPane.TOPJTabbedPane.TOP、JTtabbedPane.BOTTOMJTtabbedPane.BOTTOM、JTabbedPane.LEFT JTabbedPane.LEFT 和和JTabbedPane.RIG

28、HTJTabbedPane.RIGHT。 例10-5在选项卡窗格中添加了5个按钮(带有图标),并设置了相对应的选项卡的文本提示,然后将选项卡窗格添加到窗体的内容面板中(效果如图10.6所示)。拓疮讣挣萧瘸驭疏苑溶打尧冒渠粱婪锁拒脂询告汇信杖篡棱臃吏酮圣所滦Java实用PPT课件第10章Java实用PPT课件第10章16例子例子10-5 运行效果图运行效果图10.6似炳族懒仙数凸郁劲瓢糙揉年埠埂帆漳难债煌媒哀人硬蒸喉陈脓下么汰畴Java实用PPT课件第10章Java实用PPT课件第10章17 4GridLayout布局布局 GridLayoutGridLayout是使用较多的布局编辑器,其基本布

29、局策略是把容器划分成若干行若干列的网格区域,组件就位于这些划分出来的小格中。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(10,8);(2)使用GridLayoutGridLay

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

31、youtGridLayout布布局局,将容器分为三行一列的网格,那么可以把另一个容器添加到某个网格中,而添加的这个容器又可以设置为GridLayoutGridLayout布布局局、FlowLayoutFlowLayout布布局局、CarderLayoutCarderLayout布布局局或或BorderLayoutBorderLayout布局布局等。利用这种嵌套方法,可以设计出符合一定需要的布局.媚凝刷详刻烂飘斧贡屿毅臼奈则码潞浑干寅酮衍蝗绚钾釉幸厕申皑麓戴节Java实用PPT课件第10章Java实用PPT课件第10章18 5BoxLayout布局布局 用BoxLayoutBoxLayout类类

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

33、 象 ,并 指 定 容 器 con使 用 该 布 局 对 象 ,参 数 axis的 有 效 值 是BoxLayout.X_AXIS和BoxLayout.Y_AXIS。 BoxBox类类的类(静态)方法createHorizontalBox()createHorizontalBox()可以获得一个具有行型盒式布局的盒式容器;BoxBox类类的类(静态)方法createVerticalBox()createVerticalBox()可以获得一个具有列型盒式布局的盒式容器。 控制盒式布局容器中组件之间的距离,需要使用水平支撑或垂直支撑。 BoxBox类类调用静态方法createHorizontalS

34、trut(int createHorizontalStrut(int width)width)可以得到一个不可见的水平Struct类型对象.称为水平支撑.该水平支撑的高度为0,宽度是width。 BoxBox类类调用静态方法createVertialStrut(int createVertialStrut(int height)height)可以得到一个不可见的垂直Struct类型对象,称为垂直支撑.参数height决定垂直支撑的高度,垂直支撑的宽度为0。 例例10-610-6中中(效果如图10.7所示),有两个列型盒式容器boxV1、boxV2和一个行型盒式容器baseBox。在列型盒式容器

35、的组件之间添加垂直支撑,控制组件之间的距离,将boxV1、boxV2添加到baseBox中,并在它们之间添加水平支撑。爱宠针够陵状励任毒昨柱港妒狸靡遵坚泪终施家臣巳鲸曼察杖骚胀任咎削Java实用PPT课件第10章Java实用PPT课件第10章19例子例子10-6 运行效果图运行效果图10.7乖材兔盏台书仍拨芋铰兔爸烟妥施温傅学垦林榨场碎路簧碱墟彬奈呕陕欺Java实用PPT课件第10章Java实用PPT课件第10章20 6null布局布局 可以把一个容器的布局设置为null布局(空布局)。 空布局容器可以准确地定位组件在容器的位置和大小。setBounds(int setBounds(int a

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

37、ht)height)方方法法设置该组件在容器中的位置和本身的大小。 组件都是一个矩形结构,方法中的参数a和b是被添加的组件c的左上角在容器中的位置坐标,即该组件距容器左面a个像素,距容器上方b个像素;weidth和height是组件c的宽和高。熄凿镍刨术仁姻斟晨佳卤拄猜臀毡田桶觅妮窃了顶谐福鹏昆祷邻储石伐释Java实用PPT课件第10章Java实用PPT课件第10章2110.5 10.5 中间容器中间容器_1_1JPanel面板,2JScrollPane窗格,3JSplitPane窗格 轻组件都是容器,但仍有一些经常用来添加组件的轻容器,相对于底层重容器而言,我们习惯上称这些轻容器为中间容器。

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

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

40、t b,Component b,Component c)c)可以构造一个拆分窗格,参数a取JSplitPane的静态常量 HORIZONTAL_SPLIT或VERTICAL_SPLIT,以决定是水平还是垂直拆分。后两个参数决定要放置的组件。拆分窗格调用setDividerLocation(double position)setDividerLocation(double position)设置拆分线的位置。 烽提览干舞玻摈绸点枝梧怂腆孟灼酒相遥靡瘸它慌溉遣侦巴弛诵掣钟唁量Java实用PPT课件第10章Java实用PPT课件第10章22 4JLayeredPane分层窗格分层窗格 如果添加到容器

41、中的组件经常需要处理重叠问题,就可以考虑将组件添加到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_LA

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

43、设置组件c所在的层,调用public public int getLayer(Component c)int getLayer(Component c)可以获取组件c所在的层数。 例例10-710-7在JLayeredPane容器中添加了5个组件,分别位于不同的层上(效果如图10.8所示)肋沽拨扣宠侩拷辜唤票荔急琢斩浓禁披籽贩刁聊靠辊搓搬褂逗砸睛踞串尝Java实用PPT课件第10章Java实用PPT课件第10章23 例子例子10-7 运行效果图运行效果图10.8季破烃誓凌棱骸缨靶欢销磐尔碰庄兆猛嗣甫慕硒骏剂茄韧涵怖崖惟圭络篮Java实用PPT课件第10章Java实用PPT课件第10章2410.

44、6 10.6 文本组件文本组件_ _ 1 JTextField1 JTextField文本框文本框,2 JPasswordField,2 JPasswordField密码框密码框1 1JTextFieldJTextField文本框文本框 JComponent的子类JTextField是专门用来建立文本框的,即JTextField创建的一个对象就是一个文本框。用户可以在文本框输入单行的文本。JTextField类的主要方法如下: JTextField(int JTextField(int x)x) 创建文本框对象,可以在文本框中输入若干个字符,文本框的可见字符个数由参数 x指定。 JTextFi

45、eld(String JTextField(String s)s) 创建文本框对象,则文本框的初始字符串为s,可以在文本框中输入若干个字符。 public public void void setText(String setText(String s)s) 设置文本框中的文本为参数s指定的文本,文本框中先前的文本将被清除。 public String getText()public String getText() 获取文本框中的文本。 public public void void setEditable(boolean setEditable(boolean b)b) 指定文本框的可编辑

46、性。创建的文本框默认是可编辑的。 public public void void setHorizontalAlignment(int setHorizontalAlignment(int alignment)alignment) 设置文本在文本框中的对齐 方 式 , alignment的 有 效 值 为 JTextField.LEFT、 JTextField.CENTER和JTextField.RIGHT。2 2JPasswordFieldJPasswordField密码框密码框 使用JTextField的子类JPasswordField可以建立一个密码框对象。密码框可以使用setEchoC

47、har(char c)setEchoChar(char c)设置回显字符(默认的回显字符是*),charchar getPassword()getPassword()方法返回密码框中的密码。廊喝解处垛庭谬吱贡跪秧泄菜翻沂位幻皂赦戮遣咎鸟懊醇六缘焚叁掘柠峰Java实用PPT课件第10章Java实用PPT课件第10章253ActionEvent事件事件 当用户在有输入焦点的文本框中按回车键、单击按钮、在一个下拉式列表中选择一个条目等操作时,都发生界面事件。程序有时要对发生的事件做出反应,来实现特定的任务。 在学习处理事件时,读者必须很好地掌握事事件件源源、监监视视器器、处理事件的接口处理事件的接口

48、这三个概念。 JTextField和JPasswordField触发ActionEventActionEvent事事件件,通过处理文本框这个具体的组件上的事件,来掌握处理事件的基本原理。仗苇伯琳眺晦亮痛溜弊邦鲸肪份阶汹踪纽呆畸阳浮找逗函吝召酞催骤朱府Java实用PPT课件第10章Java实用PPT课件第10章263ActionEvent事件事件_ _处理事件的基本原理处理事件的基本原理1)1)事事件件源源: : 能够产生事件的对象都可以称为事件源,如文本框、按钮、下拉式列表等。也就是说,事件源必须是一个对象,而且这个对象必须是Java认为能够发生事件的对象。事件的对象。2)2)监监视视器器:

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

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

51、视器负责调用特定的方法处理事件,创建监视器的类必须提供处理事件的特定方法,即实现接口方法。Java采用接口回调技术来处理事件,当事件源发生事件时,接口立刻通知监视器自动调用实现的某个接口方法,接口方法规定了怎样处理事件的操作。催熟嗅吃脓同嚷掇恩勘诞似陨质沼哎狮庸恿轮蝉雕屹面慕扦昆作追用瓦叁Java实用PPT课件第10章Java实用PPT课件第10章273ActionEvent事件事件_ _事件处理模式图事件处理模式图10.910.9 接口回调这一过程对程序是不可见的,Java在设计组件事件时已经设置好了这一回调过程,程序只需让事件源获得正确的监视器,即将实现了正确接口的对象 的 引 用 传 递

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

53、蓄胳佳寅坐埋菩殿浚夹禹漠衫全殃眩奴瓜店俯瓤订誉瞎掌救刘尽姬伏早闯Java实用PPT课件第10章Java实用PPT课件第10章283ActionEvent事件事件_ _ ActionEventActionEvent类中的方法类中的方法4)ActionEvent4)ActionEvent类中的方法类中的方法 ActionEvent事件对象调用方法public public Object Object getSource()getSource()可以返回发生ActionEvent事件的对象的引用。 ActionEvent事件对象调用方法public public String String getA

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

55、更改为当前titleText中的文本。当在passwordText中输入密码回车后,监视器负责将密码显示在titleText中(效果如图10.11所示)。 例例10-1010-10使用匿名对象作为inputText的监视器,当在inputText中输入一个数字字符串后,监视器负责计算这个数的平方,并将结果放入showText中(效果如图10.12所示) 。 瞪妓晦特械又嗜很爬渡廊擒偷乏榷否跟账柿缀岁堑诅紧性林轻箱厌苔螺渍Java实用PPT课件第10章Java实用PPT课件第10章29 例子例子10-8,9,10 运行效果图运行效果图10.10,10.11,10.12饱俱渺殖襟蛙衙生一骇馅貉抖三

56、渗笑稀氟凛俐欠搞瞻油辩凡亏先务欧俘湃Java实用PPT课件第10章Java实用PPT课件第10章304菜单项上的菜单项上的ActionEvent事件事件 单击某个菜单项可以发生ActionEvent事件。菜单项使用 addActionListener(ActionListener listner)方法获得监视器。 册掠卖雾另锤邦趴沾咱拯邵厨慧陋哑划媳碟慧抨琴甄织讨姥威博憋掠券玖Java实用PPT课件第10章Java实用PPT课件第10章315JTextArea文本区文本区_1 JTextArea_1 JTextArea常用方法常用方法 JTextArea类专门用来建立文本区,用户可以在文本区输

57、入多行的文本.JTextArea(int rows, 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()getT

58、ext()和和setText(String s)setText(String s)获取并替换文本区的文本 append(String s) append(String s) 尾加文本 insert(String s,int x) insert(String s,int x) 在文本区的指定位置处插入文本 replaceRange(String replaceRange(String newString,int newString,int start,int start,int end)end) 将文本区start至end处的文本替换为新文本newString getCaretPosition(

59、) getCaretPosition() 获取文本区中输入光标的位置 setCaretPosition(int setCaretPosition(int position)position)设置文本区中输入光标的置(position不能大于文本区中字符的个数) copy() copy()和和cut()cut()方法方法 将文本区中选中的内容复制或剪切到系统的剪贴板 paste() paste() 将系统剪贴板上的文本数据粘贴在文本区中。 setSelectionStart(int setSelectionStart(int selectionStart)selectionStart)和和set

60、SelectionEnd(int setSelectionEnd(int selectionEnd)selectionEnd)方方法法设置选中的文本select(int selectionStart,int selectionEnd)select(int selectionStart,int selectionEnd)和和selectAll()selectAll()选中部分或全部文本 例例10-1110-11中,单击菜单“编辑”中的相应菜单项将文本区中选中的内容剪切、复制到系统剪贴板或将系统剪贴板的内容粘贴到文本区,效果如图10.13所示.奏烛甭服占嘲郡死汁贼司始炽到逆澳练鹊烯疵可撬郁挞东仆固

61、蔬册峡贵貌Java实用PPT课件第10章Java实用PPT课件第10章32 例子例子10-11 运行效果图运行效果图10.13侧秧垛亩夜谜空掐疆蒸蛙鼠搁分潮匈遂屎涧剂果棘练贝辉鹰鞭松胞绕您碘Java实用PPT课件第10章Java实用PPT课件第10章335JTextArea文本区文本区_ _2 2 文本区的文本区的DucumentEvent事件事件 文本区可以触发DucumentEvent事件,DucumentEven类在javax.swing.event包中。用户在文本区组件的UI代表的视图中进行文本编辑操作,使得文本区中的文本内容发生变化,将导致该文本区所维护的文档模型中的数据发生变化,从

62、而导致DucumentEvent事件的发生。文本区调用 addDucumentListener(DucumentListener addDucumentListener(DucumentListener listener)listener)向文本区维护的文档注册监视器。监视器需实现DucumentListener接口,该接口中有3个方法: public void changedUpdate(DocumentEvent e) public void changedUpdate(DocumentEvent e) public void removeUpdate(DocumentEvent e) p

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

64、定的模式,比如,输入:sdpPunct+,即通过该模式获得文本区inputText中的全部单词,效果如图10.14所示。恒彤劳乞坝姆痛砍艾蹬对蝶弃旦茧敌掌凡墩轻柒落稚振蛔将酮颁情铺继频Java实用PPT课件第10章Java实用PPT课件第10章34 事件处理模式图事件处理模式图10.910.9卖邑越屎沿赎颊笼望辉昏皮吹好迈鸦眼试臼箭盂肥磅此嫩稍首棱斤箩苯轩Java实用PPT课件第10章Java实用PPT课件第10章3510.7 10.7 按钮与标签组件按钮与标签组件_ _1JButton按钮按钮 JButton类是专门用来建立按钮的,即JButton类创建的一个对象就是一个按钮。JButton

65、类常用的方法如下:Button(String text)Button(String text) 创建名字是text的按钮。public JButton(Icon icon)public JButton(Icon icon) 创建带有图标icon的按钮。public JButton(String text, Icon icon)public JButton(String text, Icon icon) 创建名字是text且带有图标icon的按钮public void setText(String textpublic void setText(String text) 重新设置当前按钮的名字,

66、名字由参数text指定。public String getText()public String getText() 获取当前按钮上的名字。public void setIcon(Icon icon)public void setIcon(Icon icon) 重新设置当前按钮上的图标。public Icon getIcon()public Icon getIcon() 获取当前按钮上的图标public public void void setHorizontalTextPosition(int setHorizontalTextPosition(int textPosition)textPo

67、sition) 设置按钮名字相对按钮上图标的水平位置。public public void void setVerticalTextPosition(int setVerticalTextPosition(int textPosition)textPosition) 设置按钮上名字相对按钮上图标的垂直位置。public public void void setMnemonic(char setMnemonic(char mnemonic)mnemonic) 设置按钮的键盘激活方式,mnemonic的有效值为az。如果按钮用此方法设置了键盘激活方式,如参数mnemonic取值o,那么在键盘操作A

68、LT+O就可激活按钮。public void addActionListener(ActionListener)public void addActionListener(ActionListener) 向按钮增加动作监视器。public void removeActionListener(ActionListener)public void removeActionListener(ActionListener) 移去按钮上的动作监视器。按钮可以发生ActionEvent事件,当按钮获得监视器之后,用鼠标单击按钮或按钮获得焦点时按下空格键(Space键),就发生ActionEven事件,即j

69、ava.awt.envent包中的ActionEvent类自动创建了一个事件对象。 例例10-1310-13中中,单击按钮切换按钮上的图标,效果如图10.15所示。俊豢贝笔盘淹橙篆凹墟陇勿克饶赚京蹈见第雪鹏腔河砂仙粒暑温故兆沁缕Java实用PPT课件第10章Java实用PPT课件第10章36 例子例子10-13 运行效果图运行效果图10.15蚊蔗吁染式兽偏钡挫扬夯雀符赣众罩泄塑稚欺袄勇蚤档细嵌曼送豌螟栓渐Java实用PPT课件第10章Java实用PPT课件第10章37 2JLabel标签标签 JLabel类负责创建标签对象,标签用来显示信息,但没有编辑功能。JLabelJLabel类的构造方法

70、如下:类的构造方法如下: public JLabel()public JLabel() 创建没有名字的标签。 public JLabel (String s)public JLabel (String s) 创建名字是s的标签,s在标签中靠左对齐。 public public JLabel JLabel (String (String s,int s,int aligment)aligment) 参数aligment决定标签中的文字在标签中的水平对齐方式。aligment的取值是JLabel.CENTER、JLabel.LEFT或JLabel.RIGHT。 public JLabel (Ico

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

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

73、ticalTextPosition(int setVerticalTextPosition(int a)a) 参数a确定名字相对于JLabel上的图标的位置。参数a取值是JLabel.BOTTOM或JLabel.TOP。虫斤长扒落纷挛邱兴仍死量名歪烁抿辣酚鸽叉坤迄缺早舀萎馋惕弧江季痰Java实用PPT课件第10章Java实用PPT课件第10章3810.8 10.8 复选框与单选按钮组件复选框与单选按钮组件_ _ 1JCheckBox复选框 复选框提供两种状态一种是选中,另一种是未选中,用户通过单击该组件切换状态。JCheckBox类常用方法如下: public JCheckBox()publi

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

75、标和名字text的复选框,初始状态是未选中。 public void setIcon(Icon defaultIcon)public void setIcon(Icon defaultIcon) 设置复选框上的默认图标。 public public void void setSelectedIcon(Icon setSelectedIcon(Icon selectedIcon)selectedIcon) 设置复选框选中状态下的图标。该方法可能经常被使用,因为如果不明显地设置选中状态时的图标,复选框无论是选中状态还是未选种状态总是显示复选框上的默认图标,用户很难知道复选框是处于怎样的状态。 pu

76、blic public boolean boolean isSelected()isSelected() 如果复选框处于选中状态该方法返回true,否则返回false。如果复选框没有指定默认图标,复选框就显示为一个“小方框”,如果是选中状态,“小方框”里面就有个小对号。缚痘讥桑狂递蜗丝颤奄昧醒虑钩馒联剂探佰另伶未熄阻饥怖矛舔妮絮兴扑Java实用PPT课件第10章Java实用PPT课件第10章39复选框与单选按钮组件复选框与单选按钮组件_ _ItemEventItemEvent事件事件 当复选框获得监视器之后,复选框从未选中状态变成选中状态或从选中状态变成未选中状态时就发生ItemEventIt

77、emEvent事事件件,ItemEventItemEvent类类将自动创建一个事件对象。发生ItemEventItemEvent事件事件的事件源获得监视器的方法是 addItemListener(ItemListener listener)addItemListener(ItemListener listener) 由于复选框可以发生ItemEvent事件,JCheckBoxJCheckBox类类提供了addItemListener()addItemListener()方法。处理ItemEventItemEvent事事件件的接口是ItemListener,创建监视器的类必须实现ItemList

78、enerItemListener接接口口,该接口中只有一个的方法。当在复选框发生ItemEvent事件时,监视器将自动调用接口方法public void itemStateChanged(ItemEvent e)public void itemStateChanged(ItemEvent e)对发生的事件做出处理。ItemEventItemEvent事事件件对象除了可以使用getSource()getSource()方方法法返回发生Itemevent事件的事件源外,也可以使用getItemSelectable()getItemSelectable()方法方法返回发生ItemeventIteme

79、vent事件事件的事件源。例例10-1410-14处理了复选框上的ItemEvent事件,当复选框被选中时,窗口中心显示一个带图标的标签,否则隐藏这个带图标的标签,效果如图10.16所示。粒饺掀际泞疯勤团郎邮要瘸绅厦性坐毒乡妥蚌誊贤整祸陨媚片强喇哮腮绳Java实用PPT课件第10章Java实用PPT课件第10章4010.8 10.8 复选框与单选按钮组件复选框与单选按钮组件_ _ 2JRadioButton单选按钮 单选按钮和复选框很类似,所不同的是在若干个复选框中我们可以同时选中多个,而一组单选按钮同一时刻只能有一个被选中。 当创建了若干个单选按钮后,应使用ButtonGroupButton

80、Group类类再创建一个对象,然后利用这个对象把这若干个单选按钮归组。归到同一组的单选按钮每一时刻只能选一。 单选按钮和复选框一样,也触发ItemEventItemEvent事件事件。 ButtonGroup ButtonGroup fruit fruit =new ButtonGroup();=new ButtonGroup(); JRadioButton button1=new JRadioButton( JRadioButton button1=new JRadioButton(小学小学),), button2=new JRadioButton( button2=new JRadioBu

81、tton(中学中学),), button3=new JRadioButton( button3=new JRadioButton(大学大学);); fruitfruit.add(button1);.add(button1); fruitfruit.add(button2);.add(button2); fruitfruit.add(button3);.add(button3);京呀燎亨沟绪抗缴选弯变达拼痈折争嘴邦灶吓遵锥甸澄喀脆桔败住投模哇Java实用PPT课件第10章Java实用PPT课件第10章4110.9 10.9 列表组件列表组件 下拉列表是用户十分熟悉的一个组件。用户可以在下拉列表看

82、到第一个选项和它旁边的箭头按钮,当用户单击箭头按钮时,选项列表打开。下拉列表的常用方法如下: public JComboBox()public JComboBox() 创建一个没有选项下拉列表。 public void addItem(Object anObject)public void addItem(Object anObject) 增加选项。 public public int int getSelectedIndex()getSelectedIndex() 返回当前下拉列表中被选中的选项的索引,索引的起始值是0。 public Object getSelectedItem()publ

83、ic Object getSelectedItem() 返回当前下拉列表中被选中的选项。 public public void void removeItemAt(int removeItemAt(int anIndex)anIndex) 从下拉列表的选项中删除索引值是anIndex 的选项。 public void removeAllItems()public void removeAllItems() 删除全部选项。 public public void void addItemListener(ItemListener)addItemListener(ItemListener) 向下拉列

84、表增加ItemEvent事件的监视器。 下拉式列表事件源可以发生ItemEventItemEvent事事件件。当下拉列表获得监视器后,用户在下拉列表的选项中选中某个选项时就发生ItemEventItemEvent事事件件,ItemEventItemEvent类类将自动创建一个事件对象。 例例10-1510-15中中,列表的选项是Java源文件的名字。当选择一个选项后,程序在一个文本区里显示所选择的Java源文件的全部内容,效果如图10.17所示。背腔妖娠傈头籍惯企旅糙昆退劫烯昏阻羚尽橱陷重苛焙蝇炬霉郧显拍嗓部Java实用PPT课件第10章Java实用PPT课件第10章42 例子例子10-15

85、运行效果图运行效果图10.17呼栽盒摹噶铜万遂雌殷墓悄涯痒痴寅堵止言跪弄漫芋蝇鉴船厄场辉挑守赃Java实用PPT课件第10章Java实用PPT课件第10章4310.10 10.10 表格组件表格组件 使用JTable可以创建一个表格对象。可以使用JTable的下列构造方法JTable(Object data ,Object columnName )JTable(Object data ,Object columnName ) 创建表格。 表格的视图将以行和列的形式显示数组data每个单元中对象的字符串表示,也就是说,表格视图中对应着data单元中对象的字符串表示。参数columnName用来指

86、定表格的列名。 用户在表格单元中输入的数据都被认为是一个Object对象,用户通过表格视图对表格单元中的数据进行编辑,以修改二维数组data中对应的数据,在表格视图中输入或修改数据后,需按回车键或用鼠标单击表格的单元格确定所输入或修改的结果。当表格需要刷新显示时,调用repaint()repaint()方法方法。 例例10-1610-16是一个商品销售核算录入程序,客户通过一个表格视图的单元格输入每件商品的名称、单价和销售量。单击“每件商品销售额”按钮,表格视图每行的最后一个单元将显示该商品的总销售额;单击“总销售额”按钮,表格视图将计算最后一列值的和,同时表格增加一行,该行的最后一个单元显示

87、总销售额,效果如图10.18所示。庶瓜滔徽嫌巧娠逝困踢陶绘樱诸骡荤禽郧从婆鸯争讼矽影肿脚痊讼揉盘椽Java实用PPT课件第10章Java实用PPT课件第10章4410.11 10.11 树组件树组件_ _1树与节点树与节点 JTreeJTree类类的实例称为树组件。树组件也是常用的组件之一,它由节点构成。树组件的外观远比按钮要复杂得多。要想构造一个树组件,必须事先创建出称为节点的对象。 任何实现MutableTreeNodeMutableTreeNode接接口口的类创建的对象都可以成为树上的节点,树中最基本的对象是节点,它表示在给定层次结构中的数据项。树以垂直方式显示数据,每行显示一个节点。树

88、中只有一个根节点,所有其他节点从这里引出。除根节点外,其他节点分为两类一类是带子节点的分支节点,另一类是不带子节点的叶节点。每一个节点关联着一个描述该节点的文本标签和图像图标。文本标签是节点中对象的字符串表示,图标指明该节点是否是叶节点。 树组件的节点中可以存放对象,javax.swing.tree包提供的DefaultMutableTreeNodeDefaultMutableTreeNode类类是实现 了 MutableTreeNodeMutableTreeNode接接 口口 的 类 ,可 以 使 用 这 个 类 创 建 树 上 的 节 点 。DefaultMutableTreeNodeDe

89、faultMutableTreeNode类类的两个常用的构造方法是:DefaultMutableTreeNode(Object userObject)DefaultMutableTreeNode(Object userObject)创建的节点默认可以有子节点DefaultMutableTreeNode(Object userObject,boolean allowChildren)DefaultMutableTreeNode(Object userObject,boolean allowChildren)add()add()添加其他节点作为它的子节点。setAllowsChildren(boo

90、lean b)setAllowsChildren(boolean b)方法方法 设置是否允许有子节点。getUserObject()getUserObject()方法方法 得到节点中存放的对象。JTree(TreeNode root)JTree(TreeNode root) JTree的构造方法创建根节点是 root的树。侯瑶愿霍目仰壤财海占外脸彪藤蒸颐损笋书臂莹病柒穆链老念菊垒脂培众Java实用PPT课件第10章Java实用PPT课件第10章4510.11 10.11 树组件树组件_ _2树上的树上的TreeSelectionEvent事件事件 树组件可以触发TreeSelectionEve

91、nt事件,树使用addTreeSelectionListener(TreeSelectionListener listener)addTreeSelectionListener(TreeSelectionListener listener)方法获得一个监视器。当用鼠标单击树上的节点时,系统将自动用TreeSelectionEventTreeSelectionEvent类类创建一个事件对象,通知树的监视器,监视器将自动调用TreeSelectionListenerTreeSelectionListener接接口口中的方法。创建监视器的类必须实现TreeSelectionListenerTreeS

92、electionListener接口接口,此接口中的方法是:public void valueChanged(TreeSelectionEvent e)public void valueChanged(TreeSelectionEvent e)getLastSelectedPathComponent()getLastSelectedPathComponent()树使用该方法获取选中的节点。 例10-17中,节点中存放的对象由Student类创建,当用户选中节点时,窗口中的文本区显示节点中存放的对象的有关信息,效果如图10.19所示。峦歌蚀臀翱擂扇闪宦朵旅洋矛痢婿炒刺浓苗硕蛮贸楞正棕巡亩旦攘河捂

93、施Java实用PPT课件第10章Java实用PPT课件第10章4610.12 10.12 进度条组件进度条组件_ _1JProgressBar类类 JProgressBar类可以创建进度条组件。该组件能用一种颜色动态地填充自己,以便显示某任务完成的百分比。三个常用的构造函数JProgessBar()JProgessBar()、JProgressBar(int min,int max)JProgressBar(int min,int max)和和JProgressBar(int orient ,int min,int max)JProgressBar(int orient ,int min,in

94、t max)。参数orient取值为JProgressBar.HORIZONTAL或JProgressBar.VERTICAL,决定进度条是水平填充还是垂直填充。进度条可调用方法进度条可调用方法 pulic void set setValue(int n) pulic void set setValue(int n) 进度条默认用一种颜色水平填充自己 setMinimum(int min) setMinimum(int min)和和setMaximum(int max)setMaximum(int max)可以改变最大和最小这两个值。 setSize() setSize() 设置进度条大。注注

95、: :进度条的最大值max是指将进度条平均分成max份。如果进度条的最小值是min,那么使用setValue(int n)方法时,n不能小于min。 setStringPainted(boolean a) setStringPainted(boolean a) 设置是否使用百分数或字符串来表示进度条的进度情况 intgetValue() intgetValue() 获取进度值 例例10-1810-18(效果如图10.20所示)用进度条模拟显示线程的计算速度,一个线程用递归算法输出Fibinacci序列的前50项,另一个线程使用循环输出Fibinacci序列的前100项(Fibinacci序列的

96、前两项是1,以后每项是前两项的和)。 乱和毯壬矩岭粳糟刮糊斜瓣口艘遭激福呈芥嘿姻宅捕峙坍钝篓思奈畅迁倪Java实用PPT课件第10章Java实用PPT课件第10章4710.12 10.12 进度条组件进度条组件_ _2带进度条的输入流带进度条的输入流 我们最熟悉进度条的一种用法是读取文件时出现一个表示读取进度的进度条。这也是进度条的用武之地。如果读取文件时希望看见文件的读取进度,可以使用javax.swing包提供的输输入入流流类类ProgressMonitorInputStreamProgressMonitorInputStream。它的构造方法是:ProgressMonitorInputS

97、tream(Conmponent c,String s,InputStream);ProgressMonitorInputStream(Conmponent c,String s,InputStream);它创建的输入流在读取文件时会弹出一个显示读取速度的进度条,进度条在参数 c 指定的组件的正前方显示,若该参数取null,则在屏幕的正前方显示。 例例10-1910-19使用带进度条的输入流读取文件的内容,效果如图10.21所示。码帜由肿二饺匈您娩券络屑蝴谆蚜耕冯末匝贵紫织培膏辫历卒稿总戴罗皖Java实用PPT课件第10章Java实用PPT课件第10章4810.1310.13组件的常见方法组件

98、的常见方法 JComponentJComponent类类是所有组件的父类,本节介绍JComponent类的几个常用方法。 组件都是矩形形状,组件本身有一个默认的坐标系,组件的左上角的坐标值是(0,0)。如果一个组件的宽是20,高是10,那么该坐标系中,x坐标的最大值是20,y坐标的最大值是10,如图10.22所示。黄屏巴鞠皋歹刽桶杉需尼黔届振时半亢艳售靖线漓株曹枉录鸿地猩暗判靴Java实用PPT课件第10章Java实用PPT课件第10章4910.1310.13组件的常见方法组件的常见方法_ _1组件的颜色组件的颜色 public void setBackground(Color c) publ

99、ic void setBackground(Color c) 设置组件的背景色。设置组件的背景色。 public void setForeground(Color c) public void setForeground(Color c) 设置组件的前景色。设置组件的前景色。 public Color getBackground() public Color getBackground() 获取组件的背景色。获取组件的背景色。 public Color getForeground() public Color getForeground() 获取组件的前景色。获取组件的前景色。 上上述述方方法

100、法中中都都涉涉及及到到ColorColor类类。ColorColor类类是是java.awtjava.awt包包中中的的类类,该该类类创创建建的的对象称为颜色对象。对象称为颜色对象。public public Color(int Color(int red,int red,int green,ing green,ing blue) blue) Color类的构造方法,可以创建一个颜色对象,其中red、green、blue的取值在0255之间。另外,Color类中还有red、blue、green、orange、cyan、yellow、pink等静态常量,都是颜色对象。煽狞报摹哉醉婚墩谓寸体嫩倒讯

101、犬毯蚜掇酣青浪句匣互核路咯仅恤谊够筷Java实用PPT课件第10章Java实用PPT课件第10章5010.1310.13组件的常见方法组件的常见方法_ _2组件透明组件透明 组件默认是不透明的。 public public void void setOpaque(boolean setOpaque(boolean isOpaque)isOpaque) 设置组件是否不透明,当参数isOpaque取false时组件被设置为透明,取true时组件被设置为不透明。 public public boolean boolean isOpaque()isOpaque() 当组件不透明时该方法返回true,否

102、则返回false。厦埂城丙缅辐陷呜渭骇崭浊请捶拷揽犀景敛擒淌路腔绽杂栋类釉宽阑检票Java实用PPT课件第10章Java实用PPT课件第10章5110.1310.13组件的常见方法组件的常见方法_ _3组件的边框组件的边框 组件默认边框是一个黑边的矩形。 public void setBorder(Border border)public void setBorder(Border border) 设置组件的边框。 public Border getBorder()public Border getBorder() 返回边框。 组件调用setBorder()方法来设置边框,该方法的参数是一个接

103、口,因此必须向该参数传递一个实现接口Border类的实例,如果传递一个null,组件将取消边框。 可以使用BorderFactory类的类方法返回一个实现接口Border类的实例,如BorderFactory类的类方法createBevelBorder(int type,Color highlight,Color shadow)createBevelBorder(int type,Color highlight,Color shadow)将会得到一个具有“斜角”的边框,参数type取值为BevelBorder.LOWERED或BevelBorder.RAISED。捡掂毁吨僳拘湘揖诣今倒垣轨羡尉

104、槛壹珍倒苯控麻寂陷肢涝落宝栅廖岩信Java实用PPT课件第10章Java实用PPT课件第10章5210.1310.13组件的常见方法组件的常见方法_ _4组件的字体组件的字体 public void setFont(Font f)public void setFont(Font f) 组件调用该方法设置组件上的字体。 public Font getFont()public Font getFont() 组件调用该方法获取组件上的字体。 java.awt包中的Font类创建的对象称为字体对象。Font类的构造方法是: public Font(String name,int style,int s

105、ize); public Font(String name,int style,int size);创建字体对象 其中name是字体的名字,如果系统不支持字体的名字,将取默认的名字创建字体对象。style决定字体的样式,是一个整数,有效取值是:Font.BOLD、Font.PLAIN、Font.ITALIC、Font.ROMAN_BASELINE、Font.CENTER_BASELINE、Font.HANGING_BASELINE或Font.TRUETYPE_FONT。 String String getAvailableFontFamilyNames() getAvailableFontFa

106、milyNames() GraphicsEnvironment对象调用该方法获取计算机上所有可用的字体名称,并存放到字符串数组中。 GraphicsEnviromentGraphicsEnviroment类类是java.awt包中的抽象类,不能用构造方法创建对象,Java运行环境准备好了这个对象,只需让GraphicsEnvironment类调用它的类方法public GraphicsEnvironment static getLocalGraphicsEnvironment()public GraphicsEnvironment static getLocalGraphicsEnvironm

107、ent()获取这个对象的引用即可,如下所示:GraphicsEnvironment GraphicsEnvironment gege= GraphicsEnvironment.getLocalGraphicsEnvironment();= GraphicsEnvironment.getLocalGraphicsEnvironment();String fontName=String fontName=gege.getAvailableFontFamilyNames();.getAvailableFontFamilyNames(); 例例10-2010-20中中,下拉列表listFont中列出全

108、部可用字体名字,在下拉列表listFont中选择字体名字后,文本区用相应的字体显示特定的文本“北京奥运”(效果如图10.23所示)。际晌协汾蹋抡袭橡爆蔬娱炉后溪兄民熄麦渭杨侦咽雇弘关骡耶糜姿给鲸袭Java实用PPT课件第10章Java实用PPT课件第10章53 例子例子10-20 运行效果图运行效果图10.23炮武琐虫火桐闸躁三曳搓拜区雍馋埋搬榆淘纯娩愧狼赛鞘济刚辫拳电邦誓Java实用PPT课件第10章Java实用PPT课件第10章5410.1310.13组件的常见方法组件的常见方法_ _5组件的大小与位置组件的大小与位置 public public void void setSize(int

109、 setSize(int width,int width,int height)height) 设置组件的大小,参数width指定组件的宽度,height指定组件的高度。 public public void void setLocation(int setLocation(int x,int x,int y)y) 设置组件在容器中的位置,包含该组件的容器都有默认的坐标系,容器的坐标系的左上角的坐标是(0,0),参数x和y指定该组件的左上角在容器的坐标系中的坐标,即组件距容器的左边界 x个像素,距容器的上边界 y 个像素。 public public Dimension Dimension g

110、etSize()getSize() 返回一个Dimension对象的引用,该对象实体中含有名字是width 和height的成员变量,方法返回的Dimmension 对象的width的值就是组件的宽度、height的值就是当前组件的高度。 public public Point Point getLocation(int getLocation(int x,int x,int y)y) 返回一个Point对象的引用,该对象实体中含有名字是x 和y的成员变量,方法返回的Point对象x和y的值就是组件的左上角在容器的坐标系中的x坐标和y坐标。 public public void void se

111、tBounds(int setBounds(int x,int x,int y,int y,int width,int width,int height)height) 设置组件在容器中的位置和组件的大小。该方法相当于setSize()setSize()方法方法和setLocation()setLocation()方法方法的组合。 public public Rectangle Rectangle getBounds()getBounds() 返回一个Rectangle对象的引用,该对象实体中含有名字是x、y、width 和height的成员变量,方法返回的Rectangle对象x和y的值就是

112、当前组件左上角在容器坐标系中的x坐标和y坐标,width和height的值就是当前组件的宽度和高度。倔卜春厂乙推峻贡槛塑泉商尸敝烂歼堡捎矫医痉拟熊口欲联丹魏冠渠剐市Java实用PPT课件第10章Java实用PPT课件第10章5510.1310.13组件的常见方法组件的常见方法_ _6组件的激活与可见性组件的激活与可见性 public public void void setEnabled(boolean setEnabled(boolean b)b) 设置组件是否可被激活。当参数b取值true时,组件可以被激活,当参数b取值false时,组件不可激活。默认情况下,组件是可以被激活的。 publ

113、ic public void void setVisible(boolean)setVisible(boolean) 设置组件在该容器中的可见性。当参数b取值true时,组件在容器中可见,当参数b取值false 时,组件在容器中不可见。除了Window组件外,其他类型组件默认是可见的。辅纠俱漾才好蛆盛腿怂沾拧好绘像拆啤骆沪翰滴辨吻私种侯训脾怕昌廓洞Java实用PPT课件第10章Java实用PPT课件第10章5610.14 10.14 窗口事件窗口事件_ _1WindowListener接口接口 Frame类是Window类的子类,Window对象都能触发WindowEvent事件。当一个JFr

114、ame窗口被激活、撤销激活、打开、关闭、图标化或撤销图标化时,就引发了窗口事件,即WindowEvent创建一个窗口事件对象。窗口使用addWindowlistener()方法获得监视器,创建监视器对象的类必须实现WindowListener接口,该接口中有7个不同的方法: public public void void WindowActivated(WindowEvent WindowActivated(WindowEvent e)e) 当窗口从非激活状态到激活时,窗口的监视器调用该方法。 public public void void WindowDeactivated(WindowEv

115、ent WindowDeactivated(WindowEvent e e) 当窗口激活状态到非激活状态时,窗口的监视器调用该方法。 public public void void WindowClosing(WindowEvent WindowClosing(WindowEvent e)e)窗口正在被关闭时,窗口监视器调用该方法。 public public void void WindowClosed(WindowEvent WindowClosed(WindowEvent e)e) 当窗口关闭时,窗口的监视器调用该方法。 public public void void WindowIco

116、nified(WindowEvent WindowIconified(WindowEvent e)e)窗口图标化时,窗口的监视器调用该方法。 public public void void WindowDeiconified(WindowEvent WindowDeiconified(WindowEvent e)e)当窗口撤销图标化时,窗口的监视器调用该方法。 public public void void WindowOpened(WindowEvent WindowOpened(WindowEvent e)e) 当窗口打开时,窗口的监视器调用该方法。穿梳盏逃戳别秉纽峨梅焚庞鞍樟逼撵迹冬或肩

117、一普位钢峙洋对菩奴赎宦勉Java实用PPT课件第10章Java实用PPT课件第10章5710.14 10.14 窗口事件窗口事件_ _几个特别的方法几个特别的方法 WindowEvent创建的事件对象调用getWindow()getWindow()方法方法可以获取发生窗口事件的窗口。 当单击窗口上的关闭图标时,监视器首首先先调用WindowClosing()WindowClosing()方方法法,然然后后执行窗口初始化时用setDefaultCloseOperation(int setDefaultCloseOperation(int n)n)方方法法设定的关闭操作,最最后后再执行Window

118、ClosedWindowClosed()()方法方法。 如果在WindowClosing()WindowClosing()方方法法执行了System.exit(0);System.exit(0);或setDefaultCloseOperationsetDefaultCloseOperation设定的关闭操作是EXITON_ON_CLOSEEXITON_ON_CLOSE或或DO_NOTHING_ON_CLOSEDO_NOTHING_ON_CLOSE,那么监视器就没有机会再调用WindowClosed()WindowClosed()方法方法。 当 单 击 窗 口 的 图 标 化 按 钮 时 , 监

119、 视 器 调 用 WindowIconified()WindowIconified()方方 法法 后 , 还 将 调 用 windowDeactivatedwindowDeactivated()()方方法法。当撤销窗口图标化时,监视器调用windowDeiconified()windowDeiconified()方方法法后后还会调用windowActivatedwindowActivated()()方法。方法。饺县脉瓦断妓鹅跪她洗欠奥了给坠危碱懒醛绚沿世蝇义创簧键醛朗盯天鼠Java实用PPT课件第10章Java实用PPT课件第10章5810.14 10.14 窗口事件窗口事件_ _2Windo

120、wAdapter适配器适配器 接口中如果有多个方法会给使用者带来诸多不便,因为实现这个接口的类必须实现接口中的全部方法,否则这个类必须是一个abstract类。 为了给编程人员提供方便,对于Java提供的接口,如果其中的方法多于一个,就提供一个相关的称为适配器的类,这个适配器是已经实现了相应接口的类。 例如,Java在提供WindowListenerWindowListener接接口口的同时,又提供了WindowAdapterWindowAdapter类类,WindowAdapterWindowAdapter类类实现了WindowListenerWindowListener接口。因此,可以使用

121、WindowAdapterWindowAdapter的子类创建的对象作为监视器,在子类中重写所需要的接口方法即可。 例例10-2110-21使用WindowAdapter的匿名类(匿名类就是WindowAdapter的一个子类)作为窗口的监视器。忆谤妊秽淌焦眷扬蛛职颂益案雅疙镰藏姚郝羚峨披唯啤雹惺嫉磁押章术迈Java实用PPT课件第10章Java实用PPT课件第10章5910.15 10.15 鼠标鼠标事件事件_ _1鼠标事件的触发鼠标事件的触发 组件是可以触发鼠标事件的事件源。怎样才能导致组件触发鼠标事件呢?用户的下列7种操作都可以使得组件触发鼠标事件:鼠标指针从组件之外进入。鼠标指针从组件

122、内退出。鼠标指针停留在组件上时,按下鼠标。鼠标指针停留在组件上时,释放鼠标。鼠标指针停留在组件上时,单击鼠标。在组件上拖动鼠标指针。在组件上运动鼠标指针。 鼠标事件的类型是MouseEvent,即组件触发鼠标事件时,MouseEvent类类自动创建一个事件对象。按烽贞瀑敬绑睁左损敬座叙锰庚璃澈杰衷与哺恋勃傅馒箕薯欧印苛晃谱都Java实用PPT课件第10章Java实用PPT课件第10章6010.15 10.15 鼠标事件鼠标事件_2. _2. MouseListener接口接口 Java分别使用MouseListenerMouseListener接接口口与MouseMotionListenerM

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

124、ressed(MouseEvent) 负责处理鼠标按下触发的鼠标事件。 mouseReleased(MouseEvent e)mouseReleased(MouseEvent e) 负责处理鼠标释放触发的鼠标事件。 mouseEntered(MouseEvent e)mouseEntered(MouseEvent e) 负责处理鼠标进入组件触发的鼠标事件。 mouseExited(MouseEvent e)mouseExited(MouseEvent e) 负责处理鼠标退出组件触发的鼠标事件。 mouseClicked(MouseEvent e)mouseClicked(MouseEvent

125、e) 负责处理鼠标单击或连击触发的鼠标事件。村偶质宾溪侮凿晒缀躺篮酮往队闹笋标滋税诛昼彼卢赤挞煤渔羽吧脾恍康Java实用PPT课件第10章Java实用PPT课件第10章6110.15 10.15 鼠标事件鼠标事件_2. _2. MouseMotionListener接口接口 Java分别使用MouseListenerMouseListener接接口口与MouseMotionListenerMouseMotionListener接接口口两个接口来处理鼠标事件。 如果事件源使用 addMouseMotionListeneraddMouseMotionListener(MouseMotionList

126、enerMouseMotionListener listenerlistener)获取监视器,那么用户的下列两种操作可使得事件源触发鼠标事件:在组件上拖动鼠标指针。在组件上运动鼠标指针。 创建监视器的类必须实现MouseMotionListenerMouseMotionListener接口接口,该接口有两个方法: mouseDragged(MouseEvent mouseDragged(MouseEvent e)e) 负责处理鼠标拖动事件,即在事件源上拖动鼠标时,监视器将自动调用接口中的这个方法对事件做出处理。 mouseMoved(MouseEvent mouseMoved(MouseEve

127、nt e)e) 负责处理鼠标移动事件,即在事件源上运动鼠标时,监视器将自动调用接口中的这个方法对事件做出处理。 由于处理鼠标事件的接口中的方法多于一个,Java提供了相应的适配器类,分 别 是 MouseAdapterMouseAdapter和 MouseMotionAdapterMouseMotionAdapter,这 两 个 类 分 别 实 现 了MouseListenerMouseListener接口接口和MouseMotionListenerMouseMotionListener接口接口。图道矿嘿垫峻轻戮峭须卓汤妇毡疹饯躁荣紫椒轴蛔熔你逐婪罪优庆胆炸司Java实用PPT课件第10章Ja

128、va实用PPT课件第10章6210.15 10.15 鼠标事件鼠标事件_ _3MouseEvent 类类 在处理鼠标事件时,程序经常关心鼠标在当前组件坐标系中的位置,以及触发鼠标事件使用的是鼠标的左键或右键等信息。MouseEventMouseEvent类类中有下列几个重要的方法: getX()getX() 返回触发当前鼠标事件时,鼠标指针在事件源坐标系中的x坐标。 getY()getY() 返回触发当前鼠标事件时,鼠标指针在事件源坐标系中的y坐标。 getModifiers()getModifiers() 返回一个整数值,如果是通过鼠标左键触发的鼠标事件,该方法返回的值等于InputEven

129、t类中的类常量BUTTON1_MASK;如果是右键,返回的是InputEvent类中的类常量BUTTON3_MASK。 getClickCount()getClickCount() 返回鼠标被连续单击的次数。 getSource()getSource() 返回触发当前鼠标事件的事件源。 例例10-2210-22使用MouseListener接口处理鼠标事件。在程序中,分别监视按钮、标签和窗体上的鼠标事件,当发生鼠标事件时,获取鼠标的坐标值,效果如图10.24所示。注意:事件源的坐标系的左上角是原点。厉彤铜秋简罗够邵椅邢城准原霉鳃潘眷痹窥肇赁症憾蠕哮鹅缩怠杖冠煽该Java实用PPT课件第10章J

130、ava实用PPT课件第10章6310.15 10.15 鼠标事件鼠标事件_ _4用鼠标拖动组件用鼠标拖动组件 可以使用坐标变换来实现组件的拖动。当我们用鼠标拖动容器中的组件时,可以先获取鼠标指针在组件坐标系中的坐标x,y,以及组件的左上角在容器坐标系中的坐标a,b;如果在拖动组件时,想让鼠标指针的位置相对于拖动的组件保持静止,那么,组件左上角在容器坐标系中的位置应当是a+x-x0,a+y-y0,其中x0,y0是最初在组件上按下鼠标时,鼠标指针在组件坐标系中的位置坐标。 例10-23中,窗体中添加了一个分层窗格,分层窗格中添加了一些组件。该例子使用MouseListener接口接口 和和Mous

131、eMotionListener接接口口处理鼠标事件,可以用鼠标拖动分层窗格中的组件,效果如图10.25所示。 使用分层窗格是为了保证被拖动的组件不会被其他组件遮挡。 揽搽瞅建抵丫铂拓蟹俯扩饱拥氨扛俭胞坊其全睦瓷弊剿灿衡迂钥唬泽询唆Java实用PPT课件第10章Java实用PPT课件第10章6410.15 10.15 鼠标事件鼠标事件_ _5弹出式菜单弹出式菜单 单击鼠标右键出现弹出式菜单是用户熟悉和常用的操作,这是通过处理鼠标事件实现的。弹出式菜单由JPopupMenu类负责创建,可以用下列构造方法创建弹出式菜单: public JPopupMenu()public JPopupMenu()

132、构造无标题弹出式菜单。 public JPopupMenu(String label)public JPopupMenu(String label) 构造由参数label指定标题的弹出式菜单。 弹出式菜单需要在某个组件的正前方弹出可见,通过调用public public void void show(Component show(Component invoker, invoker, int int x, x, int int y)y)方方法法设置弹出式菜单在组件invoker上的弹出的位置,位置坐标(x,y)按invoker的坐标系。 例例10-2410-24中中,在文本区上单击右键时,在鼠

133、标位置处弹出菜单,用户选择相应的菜单项可以将文本区中选中的内容复制、剪切到系统的剪贴板中或将剪贴板中的文本内容粘贴到文本区,效果如图10.26所示。 狐绩质豹醛屁鬃熬又瘩鬃着柴耙戌好实鼎桓嫩帽酬邦竭柏赘鳖愚拄癌裂或Java实用PPT课件第10章Java实用PPT课件第10章6510.16 10.16 焦点事件焦点事件 组件可以触发焦点事件。组件可以使用 public void addFocusListener(FocusListener listener) public void addFocusListener(FocusListener listener)增加焦点事件监视器。当组件具有焦点

134、监视器后,如果组件从无输入焦点变成有输入焦点或从有输入焦点变成无输入焦点都会触发FocusEventFocusEvent事事件件。创建监视器的类必须实现FocusListenerFocusListener接接口口,该接口有两个方法: public void focusGained(FocusEvent e) public void focusGained(FocusEvent e) public void focusLost(FocusEvent e) public void focusLost(FocusEvent e) 当组件从无输入焦点变成有输入焦点触触发发FocusEventFocus

135、Event事事件件时,监视器调用类实现的接口方法focusGained(FocusEvent focusGained(FocusEvent e)e);当组件从有输入焦点变成无输入焦点触发FocusEventFocusEvent事事件件时,监视器调用类实现的接口方法focusLost(FocusEvent e)focusLost(FocusEvent e)。 一个组件调用public public boolean boolean requestFocusInWindow()requestFocusInWindow()方法可以获得输入焦点。逊牛腥渭面觉饼襄帜窟戚设螺遣敢卵像脱筒卧稍咳粪轮进絮诸挡情

136、票炎雏Java实用PPT课件第10章Java实用PPT课件第10章6610.17 10.17 键盘事件键盘事件_ _ 1使用KeyListener接口处理键盘事件 当一个组件处于激活状态时,组件可以成为触发KeyEventKeyEvent事事件件的事件源。当某个组件处于激活状态时,如果用户敲击键盘上一个键就导致这个组件触发KeyEventKeyEvent事件。事件。 组件使用addKeyListener()addKeyListener()方方法法获得监视器。监视器是一个对象,创建该对象的类必须实现接口接口KeyListenerKeyListener。接口接口KeyListenerKeyList

137、ener中有3个方法: public void keyPressed(KeyEvent e) public void keyPressed(KeyEvent e) public void keyTyped(KeyEvent e) public void keyTyped(KeyEvent e) public void KeyReleased(KeyEvent e) public void KeyReleased(KeyEvent e)。 当按下键盘上某个键时,监视器就会发现,然后方方法法keyPressed()keyPressed()会自动执行,并且KeyEventKeyEvent类类自动创建

138、一个对象传递给方方法法keyPressed()keyPressed()中的参数e。方法keyTypedkeyTyped()()是Pressedkey()Pressedkey()和keyReleased()keyReleased()方法的组合。 用KeyEventKeyEvent类类的public public int int getKeyCode()getKeyCode()方方法法可以判断哪个键被按下、敲击或释放,该方法返回一个键码值(如如表表10.110.1所所示示)。KeyEventKeyEvent类类的public public char char getKeyChargetKeyCha

139、r()()判断哪个键被按下、敲击或释放,该方法返回键的字符。 例例10-2510-25通过处理焦点实践和键盘事件来实现软件序列号的输入。当文本框获得输入焦点后,用户敲击键盘将使得当前文本框触发KeyEvent事件,在处理事件时,程序检查文本框中光标的位置,如果光标已经到达指定位置,就将输入焦点转移到下一个文本框,效果如图效果如图10.2710.27所示所示。饥际供滚哦彩蔓侧拈锣乡嗡摔塞炭斋霖朔园免谈禾厌琵菊丑矣浦吼未煤返Java实用PPT课件第10章Java实用PPT课件第10章67表表10.1 键码表键码表 机膀喉温昏籽媒叁蜜钱功乎爆拽篮干菠扼酸陶绣签脾躇硅恬圣椎酞旬朽眨Java实用PPT课

140、件第10章Java实用PPT课件第10章68 例子例子10-25 运行效果图运行效果图10.27写凌龙臂参卷糯慷牧牡巍碱佳撑骨俘拥朱乐甫泼氛漏磋秒篇哀错淤柳肄窟Java实用PPT课件第10章Java实用PPT课件第10章6910.17 10.17 键盘事件键盘事件_ _ 2 2处理复合键处理复合键 public void keyPressed(KeyEvent e) public void keyPressed(KeyEvent e) public void keyTyped(KeyEvent e) public void keyTyped(KeyEvent e) public void Ke

141、yReleased(KeyEvent e) public void KeyReleased(KeyEvent e)。 当按下键盘上某个键时,监视器就会发现,然后方方法法keyPressed()keyPressed()会自动执行,并且KeyEventKeyEvent类类自动创建一个对象传递给方方法法keyPressed()keyPressed()中的参数e。方法keyTypedkeyTyped()()是Pressedkey()Pressedkey()和keyReleased()keyReleased()方法的组合。 键盘事件KeyEventKeyEvent对对象象调用getModifiers()

142、getModifiers()方方法法,可以返回下列整数值,它们分别是InputEventInputEvent类类的类常量: ALT_MASKALT_MASK、CTRL_MASKCTRL_MASK、SHIFT_MASKSHIFT_MASK 。 程序可以根据getModifiers()getModifiers()方方法法返回的值处理复合键事件。例如,对于KeyEventKeyEvent对象对象e,当使用CTRL+X复合键时,下面的逻辑表达式为true: e.getModifiers()=InputEvent.CTRL_MASK&e.getKeyCode()=KeyEvent.VK_X e.getM

143、odifiers()=InputEvent.CTRL_MASK&e.getKeyCode()=KeyEvent.VK_X 例例10-2610-26中中,用户通过CTRL+C、CTRL+X和CTRL+V实现文本区内容的复制、剪切和粘贴。荒跃关漾邓誓需径靠邮雪组朝噪祷孵忠憨俄孽舟衷垮赚捍庞嘻汛开俯摔叙Java实用PPT课件第10章Java实用PPT课件第10章7010.18 AWT 10.18 AWT 线程线程 Java程序包含图形用户界面(GUI)时,Java虚拟机在运行应用程序时会自动启动更多的线程,其中有两个重要的线程:AWT-EventQuecueAWT-EventQuecue和AWT-A

144、WT-WindowsWindows。 AWT-EventQuecueAWT-EventQuecue线线程程负责处理GUI事件,AWT-WindowsAWT-Windows线线程程负责将窗体或组件绘制到桌面。 当程序中发生GUI界面事件时,AWT-EventQuecueAWT-EventQuecue线线程程就会来处理这个事件。例如,单击了程序中的按钮,将触发ActionEventActionEvent事事件件,AWT-EventQuecue线程就立刻排队等候执行处理事件的代码。Java虚拟机在各个线程之间快速切换,保证程序中的窗口始终能显示在桌面上,同时也保证程序中的GUI事件以及其他线程的任务

145、得到处理和执行。 我们可以通过GUI界面事件,即在AWT-EventQuecue线程中,通知其他线程开始运行、挂起、恢复或死亡(有关线程的知识参见8.9)。 例例10-2710-27中中,单击“开始”按钮启动线程(该线程负责移动一个红色的标签),单击“挂起”按钮暂时中断线程的执行,单击“恢复”按钮恢复线程,单击“终止”按钮终止线程。圃盟垫检预窖掳健饱演怕巍产坟颜铜现泞嫩邢脉哲趟斡物搓呀鲁舷坎其致Java实用PPT课件第10章Java实用PPT课件第10章7110.19 计时器 javax.swing包提供了一个很方便的Timer类,该类创建的对象称作计时器。当某些操作需要周期性地执行,就可以使

146、用计时器。我们可以使用TimerTimer类类的构造方法Timer(int Timer(int a, a, Object Object b)b)创建一个计时器,其中的参数a的单位是豪秒,确定计时器每隔a 毫秒“震铃”一次,参数b是计时器的监视器。 计时器发生的震铃事件是ActinEventActinEvent类型事件。当震铃事件发生时,监视器就会监视到这个事件,监视器就回调ActionListenerActionListener接接口口中的actionPerformedactionPerformed方方法法。因此当震铃每隔a毫秒发生一次时,方法actionPerformedactionPerf

147、ormed就被执行一次。当我们想让计时器只震铃一次时,可以让计时器调用setReapeats(boolean setReapeats(boolean b)b)方法,参数b的值取false即可。 当我们使用Timer(int Timer(int a, a, Object Object b)b)创建计时器,对象 b就自动地成了计时器的监视器。如果使用Timer(int Timer(int a)a)创建计时器,计时器必须再明显地调用addActionListener(ActionListener addActionListener(ActionListener listener)listener)方

148、方法法获得监视器。另外,计时器也还可以调用setInitialDelaysetInitialDelay(int int depaydepay)设置首次震铃的延时,如果没有使用该方法进行设置,首次震铃的延时为a。 计时器通过调用方法start()start()启动计时器,调用方法stop()stop()停止计时器、调用restart()restart()重新启动计时器。 例例10-2810-28中中使用了计时器,使得标签每隔一秒钟显示一个汉字。单击“开始”按钮启动计时器,每隔一秒标签显示一个汉字;单击“暂停”按钮暂停计时器,标签不再显示下一个汉字;单击“继续”按钮重新启动计时器,效果如图图10.

149、2810.28所示所示。厚幢构族蕊薄憾顷盯压套劈淘渣茸衰氯犊平绩榨画袭彰冯纂皖横辑裸健钉Java实用PPT课件第10章Java实用PPT课件第10章72 例子例子10-28 运行效果图运行效果图10.28洪阑墓沧小玫瓷烂峨碰瓦耽胎苔侨各犀架笺叁碟顽觅雏损蒸闽池扰撬啤酌Java实用PPT课件第10章Java实用PPT课件第10章7310.20 MVC设计模式 模型-视图-控制器(Model-View-Controller),简称为MVC。MVC是一种先进的设计模式, 是Trygve Reenskaug 教授于1978年最早开发的一个设计模板或基本结构,其目的是以会话形式提供方便的GUI支持。MV

150、C是一种通过三个不同部分构造一个软件或组件的理想办法: 模型(model) 用于存储数据的对象。 视图(view) 为模型提供数据显示的对象。 控制器(controller)处理用户的交互操作,对于用户的操作作出响应,让模型和视图进行必要的交互,即通过视图修改、获取模型中的数据;当模型中的数据变化时,让视图更新显示。 从面向对象的角度看,MVC结构可以使程序更具有对象化特性,也更容易维护。在设计程序时,可以将某个对象看作“模型”,然后为“模型”提供恰当的显示组件,即“视图”。为了对用户的操作作出响应,我们可以选择某个组件做“控制器”,当发生组件事件时,通过“视图”修改或得到“模型”中维护着的数

151、据,并让“视图”更新显示。 例例10-2910-29中中,首先编写一个封装三角梯形的类,然后再编写一个窗口。要求窗口使用三个文本框和一个文本区为三角形对象中的数据提供视图,其中三个文本框用来显示和更新梯形对象的上底、下底和高的长度;文本区对象用来显示梯形的面积。窗口中用一个按钮作为控制器,用户单击该按钮后,程序用3个文本框中的数据分别作为梯形的上底、下底和高的长度,并将计算出的三角形的面积显示在文本区中,效果如图如图10.2910.29所示所示。谍棚彻蛤碎嫁磺分仍项邱驾短吧掩往臃阻泉圾乾蝶内况瞩酬噶禄术粟宏报Java实用PPT课件第10章Java实用PPT课件第10章74 例子例子10-29

152、运行效果图运行效果图10.29险窿惦彼墩坞掌弄宙跨美留便傍窗镰至著藩阳形跳到实椅庙煞铀丛秩汐浸Java实用PPT课件第10章Java实用PPT课件第10章7510.21 播放音频 用Java可以编写播放.au、.aiff、.Wav、.Midi、.rfm格式的音频。假设音频文件hello.au位于应用程序当前目录中,播放音频的步骤如下:1 1创建创建FileFile对象对象: : File musicFile=new File(hello.au);File musicFile=new File(hello.au);2 2获获取取URIURI对对象象: :URI(Uniform Resource

153、Identifier)类是包中的类,URI对象中封装着一个资源的字符串表示。FileFile对对象象调用public public URI URI toURI()toURI()返回一个URI对象: URI uri=musicFile.toURI();URI uri=musicFile.toURI();3 3获获取取URLURL对对象象: : URL(Uniform Resource Locator)类是包中的类,URL对象中封装着一个资源的字符串表示,URIURI对对象象调用public public URL URL toURL(toURL()返回一个URL对象: URL url=uri.to

154、URL();URL url=uri.toURL();4 4创创建建音音频频对对象象: :为了播放音频,必须首先获得一个AudioClipAudioClip对对象象,AudioClipAudioClip类类是java.applet包中的类。 可以使用Applet的一个静态的方法newAudioClip(.URL newAudioClip(.URL urlurl) )根据参数urlurl封装的音频获得一个可用于播放的音频对对象象clipclip, clipclip对对象象可以使用下列方法来处理声音文件: play() play() 开始播放, loop() loop() 循环播放, stop()

155、stop() 停止播放。 例例10-3010-30中中有7个按钮,按钮上的名字依次是1、27。将7个名字依次为1.au7.au的音频文件存放在应用程序当前目录中。单击名字是1的按钮,程序就播放1.au音频文件,依次类推。效果如图10.30所示。澳桅滥中厚固搪涤勃鸣柠逃箱点类熟肠窄芽淖召拿逮平萎暖华痞识会构匙Java实用PPT课件第10章Java实用PPT课件第10章76 例子例子10-30 运行效果图运行效果图10.30窜胸磊则晕铡认湾搽草僳腻烈熊等粹跺行莽细欺援霍眼卸君贬枷旦吊匣拖Java实用PPT课件第10章Java实用PPT课件第10章7710.22 10.22 按钮绑定到键盘按钮绑定到

156、键盘_ _1 1AbstractActionAbstractAction类与特殊的监视器类与特殊的监视器 按钮绑定到键盘通常被理解为用户直接敲击某个键代替用鼠标单击该按钮所产生的效果 。1AbstractAction类与特殊的监视器 如果按钮通过addActionListener()addActionListener()方方法法注册的监视器和程序为按钮的键盘操作指定的监视器是同一个监视器,用户直接敲击某个键(按钮的键盘操作)就可代替用鼠标单击该按钮所产生的效果,这也就是人们通常理解的按钮的键盘绑定。 抽象类javax.swing.AbstractActionjavax.swing.Abstra

157、ctAction类类已经实现了ActionAction接接口口,因为大部分应用不需要实现Action中的其他方法,因此编写AbstractActionAbstractAction类类的子类时,只要重写 public void actionPerformed(ActionEvent e)public void actionPerformed(ActionEvent e) 即可,该方法是ActionListenerActionListener接口接口中的方法。 为按钮的键盘操作指定了监视器后,用户只要敲击相应的键,监视器就执行actionPerformedactionPerformed()()方法

158、方法。即王瓤萌沽奋拉毁奋癣满煌沉梗管真肇佳恬陨结葡达限鸽昨愈恿院泻程坟Java实用PPT课件第10章Java实用PPT课件第10章7810.22 10.22 按钮绑定到键盘按钮绑定到键盘_ _2 2指定监视器的步骤指定监视器的步骤 以下假设按钮是button,listener是AbstractAction类的子类的实例。(1 1)获获取取输输入入映映射射: :按钮首先调用public public final final InputMap InputMap getInputMap(int getInputMap(int condition)condition)方方法法返回一个InputMapI

159、nputMap对对象象,其中参数condition取值JCompent类的下列static常量: WHEN_FOCUSED,WHEN_IN_FOCUSED_WINDOW,WHEN_ANCESTOR_OF_FOCUSED_COMPONENT WHEN_FOCUSED,WHEN_IN_FOCUSED_WINDOW,WHEN_ANCESTOR_OF_FOCUSED_COMPONENT。例如: InputMap inputmap = button.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW); InputMap inputmap = button.get

160、InputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);(2 2)绑绑定定按按钮钮的的键键盘盘操操作作: :步骤(1)返回的输入映射首先调用方法public public void void put(KeyStroke put(KeyStroke keyStroke,Object keyStroke,Object actionMapKey)actionMapKey)将敲击键盘上的某键指定为按钮的 键 盘 操 作 ,并 为 该 操 作 指 定 一 个 Object类 型 的 映 射 关 键 字 ,例 如 :inputmap.put(KeyStroke.getKey

161、Stroke(A),dog);inputmap.put(KeyStroke.getKeyStroke(A),dog);(3 3)为为按按钮钮的的键键盘盘操操作作指指定定监监视视器器: :按钮调用方法public public final final ActionMap ActionMap getActionMapgetActionMap()()返回一个ActionMap对象:ActionMap ActionMap actionmap actionmap = = button.getActionMap();button.getActionMap();然后,该对象actionmap调用方法publ

162、ic public void void put(Object put(Object key,Action key,Action action) action) 为按钮的键盘操作指定监视器(实现单击键盘上的键通知监视器的过程)。例如:actionmap.put(dog,listener);actionmap.put(dog,listener); 例例10-3110-31中中为按钮绑定了键盘操作:为名字是 1 、 2 7 的按钮绑定的键盘操作依次是键盘上名字为 1 , 2 7 的键。程序实现的功能是用户敲击键盘上名字是 1 的键,程序播放 1.au 音频文件,依次类推。靖音朔过钻拨搪林瞬氧箔侍揽颗

163、挣禄忧膝柄罩酌状裙伍首岗令练桥寐因勃Java实用PPT课件第10章Java实用PPT课件第10章7910.23 10.23 对话框对话框_ _1JDialog类类 JDialog类和JFrame都是Window的子类,对话框必须依赖于某个窗口或组件,当它所依赖的窗口或组件消失,对话框也将消失;而当它所依赖的窗口或组件可见时,对话框又会自动恢复。需要注意的是,对话框可见时,默认地被系统添加到显示器屏幕上,因此不允许将一个对话框添加到另一个容器中。 通过建立JDialog的子类来建立一个对话框类,然后这个类的一个实例(即这个子类创建的一个对象)就是一个对话框。JDialog类的主要方法 JDial

164、og()JDialog() 构造一个无有标题的初始不可见的对话框,对话框依赖一个默认的不可见的窗口,该窗口由Java运行环境提供。 JDialog(JFrame JDialog(JFrame owner)owner) 构造一个无标题的初始不可见的无模式的对话框,owner是对话框所依赖的窗口,如果owner取null , 对话框依赖一个默认的不可见的窗口,该窗口由Java运行环境提供。 JDialog(JFrame JDialog(JFrame owner, owner, String String title)title) 构造一个具有标题的初始不可见的无模式的对话框,参数title是对话框

165、的标题的名字,owner是对话框所依赖的窗口,如果owner取null , 对话框依赖一个默认的不可见的窗口,该窗口由Java运行环境提供。 JDialog(JFrame JDialog(JFrame owner, owner, String String title,boolean title,boolean modal)modal) 构造一个具有标题title的初始不可见的对话框。参数modal决定对话框是否为有模式或无模式,参数owner是对话框所依赖的窗口,如果owner取null , 对话框依赖一个默认的不可见的窗口,该窗口由Java运行环境提供。 setModal(boolean

166、b) setModal(boolean b) 设置对话框的模式,b取true时为有模式,取false为无模式。 setVisible(boolean b) setVisible(boolean b) 显示或隐藏对话框。 public void setJMenuBar(JMenuBar menu) public void setJMenuBar(JMenuBar menu) 对话框添加菜单条。捞祟虚恿唐书漓竟谱惺桑瑶它仁鞭紧您侈耳咽虞肝滑摘栽萄社漳柔叼端户Java实用PPT课件第10章Java实用PPT课件第10章8010.23 10.23 对话框对话框_ _2对话框的模式对话框的模式 对话框分

167、为无模式和有模式两种。 如果一个对话框是有模模式式的的对对话话框框,那么当这个对话框处于激活状态时,只让程序响应对话框内部的事件,程序不能再激活它所依赖的窗口或组件,而且它将堵塞当前线程的执行,直到该对话框消失不可见。也就是说,某个线程执行了使模式对话框dialog可见的代码,如 dialog.setVisible(true);那么,该线程将进入堵塞状态。当单击对话框上的关闭图标或通过处理对话框中的其他GUI事件,使得该对话框消失不可见,该线程才结束堵塞,重新排队等待CUP资源。单击对话框上的关闭图标或对话框中的其他GUI事件的处理是由Java虚拟机启动的AWT-EventQuecue线程帮助

168、完成的。 在进行一个重要的操作动作之前,最好能弹出一个有模式的对话框。 无无模模式式对对话话框框处于激活状态时,程序仍能激活它所依赖的窗口或组件,它也不堵塞线程的执行。 例例10-3210-32中中,当对话框处于激活状态时,命令行无法输出信息,当对话框消失时,再根据对话框消失的原因,命令行输出信息:“你单击了对话框的Yes按钮”或“你单击了对话框的No按钮”。倦督桥佩汉脏凳旬炮吐损学籽萝伦态锦杨赐饭蔽颈澡串爬蟹碘酪蜘饯挣亨Java实用PPT课件第10章Java实用PPT课件第10章8110.23 10.23 对话框对话框_ _3输入对话框输入对话框 输输入入对对话话框框含有供用户输入文本的文本

169、框、一个确认和取消按钮,是有模式对话框。当输入对话框可见时,要求用户输入一个字符串。javax.swing包中的JOptionPane类的静态方法:public static String showInputDialog(Component parentComponent,public static String showInputDialog(Component parentComponent, Object message, Object message, String title, String title, int messageType) int messageType)可以创建一个

170、输入对话框,其其中中参参数数parentComponentparentComponent指定消息对话框所依赖的组件,确认对话框会在该组件的正前方显示出来,参参数数messagemessage指定对话框上的提示信息,参参数数titletitle指定对话框上的标题,参参数数messageTypemessageType可取的有效值是JoptionPane中的类常量ERROR_MESSAGE,INFORMATION_MESSAGE, ERROR_MESSAGE,INFORMATION_MESSAGE, WARNING_MESSAGE,QUESTION_MESSAGE,WARNING_MESSAGE,Q

171、UESTION_MESSAGE,或或PLAIN_MESSAGE,PLAIN_MESSAGE,这些值可以确定对话框的外观,如取值WARNING_MESSAGE时,对话框的外观上会有一个明显的“!”符号。 单击输入对话框上的确认按钮、取消按钮或关闭图标,都可以使输入对话框消失不可见,如果单击的是确认按钮,输入对话框将返回用户在对话框的文本框中输入的字符串,否则返回null。齐椒牵报捞汲棉兜两抄瓮踪每尧弹籍羔全莉叛兼朽慷苯垣擒协渊秀位耽蘸Java实用PPT课件第10章Java实用PPT课件第10章8210.23 10.23 对话框对话框_ _4消息对话框消息对话框 消消息息对对话话框框是有模式对话框

172、,进行一个重要的操作动作之前,最好能弹出一个消息对话框。javax.swing包中的JOptionPane类的静态方法:public static void showMessageDialog(Component parentComponent,public static void showMessageDialog(Component parentComponent, String message, String message, String title, String title, int messageType) int messageType)可以创建一个消息对话框,其中参数pare

173、ntComponentparentComponent指定消息对话框所依赖的组件,消息对话框会在该组件的正前方显示出来;messagemessage指定对话框上显示的消息;titletitle指定对话框的标题;messageTypemessageType可取的有效值是JOptionPane的类常量WARNING_MESSAGEWARNING_MESSAGE, ,INFORMATION_MESSAGE,ERROR_MESSAGE,QUESTION_MESSAGEINFORMATION_MESSAGE,ERROR_MESSAGE,QUESTION_MESSAGE或或PLAIN_MESSAGEPLAI

174、N_MESSAGE。 这些值可以确定对话框的外观,如取值WARNING_MESSAGE时,对话框的外观上会有一个明显的“!”符号。ShowMessageDialogShowMessageDialog方法是void类型,消息对话框的作用就是提示用户,不返回值给用户。当朱饱献巫眩示焊恢常漆僵斡间澈炯显糯悍后饥佣俭料卵自增趟洋毕艇梦Java实用PPT课件第10章Java实用PPT课件第10章8310.23 10.23 对话框对话框_ _5确认对话框确认对话框 确认对话框确认对话框是有模式对话框,javax.swing包中的JOptionPane类的静态方法:public static int sho

175、wConfirmDialog(Component parentComponent,public static int showConfirmDialog(Component parentComponent, Object message, Object message, String title,int optionType) String title,int optionType)可以创建一个确认对话框,其中参参数数parentComponentparentComponent指定消息对话框所依赖的组件,确认对话框会在该组件的正前方显示出来;messagemessage指定对话框上显示的消息;

176、titletitle指定对话框的标题;messageTypemessageType可取的有效值是JOptionPane的类常量: YES_NO_CANCEL_OPTION,YES_NO_OPTIONYES_NO_CANCEL_OPTION,YES_NO_OPTION或或OK_CANCEL_OPTIONOK_CANCEL_OPTION。这些值可以确定对话框的外观,如取值YES_NO_OPTION时,对话框的外观上会有“Yes”和“No”两个按钮。 确认对话框消失后,showConfirmDialogshowConfirmDialog方方法法会返回JOptionPane的类常量: YES_OPTI

177、ON,JOptionPane.NO_OPTIONYES_OPTION,JOptionPane.NO_OPTION、 CANCEL_OPTION, CANCEL_OPTION, OK_OPTIONOK_OPTION或或 CLOSED_OPTIONCLOSED_OPTION。返回的具体值依赖于用户单击了确认对话框上的哪个按钮以及对话框上的关闭图标。 例例10-3310-33中中,用户在输入对话框中输入数字字符,如果输入的字符中有非数字字符将弹出一个消息对话框,提示用户输入了非法字符,该对话框消失后,将清除用户输入的非法字符;如果用户的输入没有非法字符,将弹出一个确认对话框,让用户确认,如果单击“确

178、认”对话框上的“是(Y)”按钮,就在数字放入文本区。效果如图效果如图10.3110.31所示所示。赣公违抓嫉逃蝎硝错鹤弘爵雪灸戈倒排伴删糖批衡副慑抄亏硝盖独亨授岩Java实用PPT课件第10章Java实用PPT课件第10章84 例子例子10-33 运行效果图运行效果图10.31乘叭尝闺瞅笨泥诉螺花慷萝汾冉饱枉寸如抖嫂迂轩阴游哨梗借雕茁刮砾庭Java实用PPT课件第10章Java实用PPT课件第10章8510.23 10.23 对话框对话框_ _6颜色对话框颜色对话框 可以用javax.swing包中的JColorChooserJColorChooser类类的静态方法:public static

179、 Color showDialog(Component component,public static Color showDialog(Component component, String title, String title, Color initialColor) Color initialColor)创建一个有模式的颜色对话框,其中参参数数componentcomponent指定颜色对话框可见时的位置,颜色对话框在参数component指定的组件的正前方显示出来;如果component为null, 颜色对话框在屏幕的正前方显示出来。titletitle指定对话框的标题;initia

180、lColor initialColor 指定颜色对话框返回的初始颜色。 用户通过颜色对话框选择颜色后,如果单击“确定”按钮,那么颜色对话框将消失、showDialogshowDialog方方法法返回对话框所选择的颜色对象;如果单击“撤消”按钮或关闭图标,那么颜色对话框将消失、showDialogshowDialog方法方法返回null。 例例10-3410-34中中,当用户单击buttonOpen按钮时,弹出一个颜色对话框,然后根据用户选择的颜色来改变按钮showColor的颜色。惮搁铲亩安讽姥位态噬秀锹辱坞庄所殃墟爽楞逮碑凭峦塞位痪谷篷到枫桂Java实用PPT课件第10章Java实用PPT课

181、件第10章8610.23 10.23 对话框对话框_7_7文件对话框文件对话框 文件对话框文件对话框提供从文件系统中进行文件选择的界面。JFileChooserJFileChooser对象对象调用 showDialog(Component parent,String s)showDialog(Component parent,String s) showOpenDialog(Component parent) showOpenDialog(Component parent) showSaveDialog(Component parent) showSaveDialog(Component pa

182、rent)方法都可以创建一个有模式的文件对话框。文件对话框将在参数指定的组件parentparent的正前方显示,如果parent为null,则在系统桌面的正前方显示。 当 文 件 对 话 框 消 失 后 , 上 述 方 法 返 回 JFileChooserJFileChooser的 类 常 量 APPROVE_OPTIONAPPROVE_OPTION或或CANCEL_OPTIONCANCEL_OPTION。返回的值依赖于单击了对话框上的“确认”按钮还是“取消”按钮。当上面的某个方法返回APPROVE_OPTION时,我们可以使用JFileChooserJFileChooser类类的getSe

183、lecedFile()getSelecedFile()得到被选择的文件。JFileChooserJFileChooser类类的构造方法如下: public public JFileChooser()JFileChooser() 调用showDialog返回的对话框中显示的初始目录是本地系统的默认目录。 public public JFileChooser(File JFileChooser(File currentDirectory)currentDirectory) 调用showDialog返回的对话框中显示的初始目录是参数currentDirectory指定的目录。 例例10-3510-3

184、5中中,单击“打开文件”按钮,系统将弹出一个文件对话框,用户可以把选择的文件的内容显示在一个文本区中。母棕踏秦铁筋怂辖蓟罚壳室颇革撰牌尾删筋沃颈瓶着通诧尊糯联撬部谚蓉Java实用PPT课件第10章Java实用PPT课件第10章8710.24 10.24 多文档界面多文档界面_1_1 概述概述 Java实现多文档界面(MDI)常用的方式是在一个JFrame窗口中添加若干个内部窗体。内部窗体由JInternalFrameJInternalFrame类类负责创建,这些内部窗体被限制在JFrame窗口中。在使用内部窗体时,需要将内部窗体事先添加到JDesktopPane桌面容器中,然后把桌面容器添加到

185、JFrame窗口即可。 桌面容器使用方法add(JInternalFrame add(JInternalFrame e, e, int int layer);layer);添加内部窗体,并指定内部窗体所在的层次,其中参数layer取值JLayeredPane类中的类常量(该类是JDesktopPane的 父 类 )DEFAULT_LAYER 、 PALETTE_LAYER、 MODAL_LAYER、POPUP_LAYER或DRAG_LAYER。 JDesktopPane桌面对象调用下面方法public void setLayer(JInternalFrame c,int layer)publi

186、c void setLayer(JInternalFrame c,int layer)可以重新设置内部窗体c所在的层public int getLayer(JInternalFrame c)public int getLayer(JInternalFrame c)可以获取内部窗体c所在的层数。 内部窗体也可以自己调用 public void setLayer(int layer) public void setLayer(int layer) 重新设置内部窗体所在的层。 桌面容器经常使用下列方法和它里面的内部窗体发生联系:public JInternalFrame getAllFrames()

187、public JInternalFrame getAllFrames() 返回桌面中所有层次中的内部窗体。public public JInternalFrame JInternalFrame getAllFramesInLayer(int getAllFramesInLayer(int layer)layer)返回桌面中指定层次上的全部内部窗体。public JInternalFrame getSelectedFrame()public JInternalFrame getSelectedFrame()返回桌面中处于活动状态的内部窗体。碴核啼蹿湍毗忻陶毕畔枕圭颁碧玄核疆老蚁坎联喂跟聘种羞造锤

188、叛窿瘦乡Java实用PPT课件第10章Java实用PPT课件第10章8810.24 10.24 多文档界面多文档界面_2 _2 JInternalFrame构造方法构造方法 JInternalFrame的构构造造方方法法 JInternalFrame()JInternalFrame()可以创建一个无标题的内部窗体,该内部窗体默认是不可以关闭、不可以图标化、不可以最大化、不可以调整大小 内部窗体调用下列方法可以设置有关的属性: setMaximizable(boolean b)setMaximizable(boolean b) 设置是否可以最大化。 setIconifiable(boolean

189、b)setIconifiable(boolean b) 设置是否可以图标化 setResizable(boolean b)setResizable(boolean b) 设置是否可以调整大小。 setTitle(String title)setTitle(String title) 设置内部窗体的标题。 setClosable(boolean b)setClosable(boolean b) 设置内部窗体是否可关闭。 使用构造方法构造方法JInternalFrame(String title,boolean resizable,JInternalFrame(String title,boole

190、an resizable, boolean closable,boolean max ,boolean min) boolean closable,boolean max ,boolean min)可以创建一个内部窗体,第一个参数是窗体的名字,接下来的参数分别决定窗体能否调整大小、能否关闭、能否最大化、能否图标化。对于内部窗体需注意下列几点: 内部窗体和前面讲的中间容器有所不同,我们不能直接把组件加到内部窗体中,而只能加到它的内容面板中。内部窗体和JFrame窗体一样,可以通过getContentPane()得到它的内容窗体。为了能显示内部窗体,必须把内部窗体先添加到一个容器中,这个容器是JD

191、esktopPane,该容器是专门为内部窗体服务的。调用setVisible()为内部窗体设置可见性,内部窗体默认是不可见的。内部窗体需设置初始的大小,内部窗体的内容面板的默认布局是BorderLayout布局。柳蚕型治嫩实芽女森苇窜以陀挑紊挖讫驭礁贺已觉哦汗曾蒜姿码惭位唯桐Java实用PPT课件第10章Java实用PPT课件第10章8910.24 10.24 多文档界面多文档界面_3 _3 InternalFrameEventInternalFrameEvent事件事件 内窗体可以发生InternalFrameEventInternalFrameEvent事件事件,内部窗体使用 public

192、 void addInternalFrameListener(InternalFrameListener listener) public void addInternalFrameListener(InternalFrameListener listener)方法获得监视器。监视器必须要实现InternalFrameListenerInternalFrameListener接接口口,该接口有下列方法: void internalFrameActivated(InternalFrameEvent e) void internalFrameActivated(InternalFrameEvent

193、 e) void internalFrameClosed(InternalFrameEvent e) void internalFrameClosed(InternalFrameEvent e) void internalFrameClosing(InternalFrameEvent e) void internalFrameClosing(InternalFrameEvent e) void internalFrameDeactivated(InternalFrameEvent e) void internalFrameDeactivated(InternalFrameEvent e) vo

194、id internalFrameDeiconified(InternalFrameEvent e) void internalFrameDeiconified(InternalFrameEvent e) void internalFrameIconified(InternalFrameEvent e) void internalFrameIconified(InternalFrameEvent e) void internalFrameOpened(InternalFrameEvent e) void internalFrameOpened(InternalFrameEvent e) 内部窗体

195、事件的处理和前面讲过的WindowEvent类似,不再赘述。 例例10-3610-36中中,单击JFrame中的“新建”菜单,在窗体中出现一个新的内部窗体,该内部窗体中有一个文本区对象;当单击JFrame中的“复制”菜单时,就将处于活动状态的内部窗体里面的文本区选中的内容复制到系统的剪贴板;当单击JFrame中的“粘贴”菜单时,就将系统剪贴板中的文本内容粘贴到处于活动状态的内部窗体的文本区中,效果如图10.32所示。应蜀廖心冶黑蝴孜核诸庭醛莫钻谬央匣跋魄焉淳许格农母敖歹撅林娇谬郁Java实用PPT课件第10章Java实用PPT课件第10章90 例子例子10-36 运行效果图运行效果图10.32

196、酵悬招振扔躺轨愚契几钟唆詹昌逞债柳面闭耽集酥辐溶酸呜溯噪哮辫聋溪Java实用PPT课件第10章Java实用PPT课件第10章9110.25 10.25 发布应用程序发布应用程序 可以使用jar.exe把一些文件压缩成一个JAR文件,来发布我们的应用程序。可以把Java应用程序中涉及到的类压缩成一个JAR文件,如Tom.jar,然后使用Java解释器(使用参数-jar)执行这个压缩文件:java -jar Tom.jarjava -jar Tom.jar或用鼠标双击该文件用鼠标双击该文件,执行这个压缩文件。 假设D:test目录中的应用程序有3个类Example、MyInterbalFrame和

197、Mywindow,其中Example是主类。生成一个Jar文件的步骤如下:(1 1)首先用文本编辑器(如)首先用文本编辑器(如WindowsWindows中的记事本)编写一个清单文件中的记事本)编写一个清单文件moon.mfmoon.mfManifest-Version: 1.0Manifest-Version: 1.0Main-Class: Example10_20Main-Class: Example10_20Created-By: 1.6Created-By: 1.6注注:编写清单文件时,在Manifest-Version:和1.0之间、Main-Class:和主类Example10_2

198、0之间以及Created-By:和1.6之间必须有且只有一个空格。保存moon.mf到D:test。(2 2)生成)生成JARJAR文件文件D:testjar cfm Tom.jar moon.mf Example10_20.class Lader.class MVCWin.classD:testjar cfm Tom.jar moon.mf Example10_20.class Lader.class MVCWin.class 如果目录D:test下的字节码文件刚好是应用程序需要的全部字节码文件,也可以这样生成JAR文件:D:testjar cfm Tom.jar moon.mf *.classD:testjar cfm Tom.jar moon.mf *.class其中,参数c表示要生成一个新的JAR文件,f表示要生成的JAR文件的名字,m表示文件清单文件的名字。 现在就可以将Tom.jar文件复制到任何一个安装了Java运行环境的计算机上,只要用鼠标双击该文件就可以运行该Java应用程序了。肥巨馈绥泅蚌亮岭讹栈笛宁皿纶岔洁涅愤撒予岭婆侈删衔牌茧拎漳对浓岁Java实用PPT课件第10章Java实用PPT课件第10章92瓶肯蛾陡植蚜肢语汞阎基惧男谭屠嘎撮验涵怠蓟廉知田每慌含能诌总缠嫩Java实用PPT课件第10章Java实用PPT课件第10章93

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号