《Java程序的设计 第6章 GUI程序的设计》由会员分享,可在线阅读,更多相关《Java程序的设计 第6章 GUI程序的设计(99页珍藏版)》请在金锄头文库上搜索。
1、澡篆责琅承乒途泄隘击哥无风擦四况级识棋拧晚芭炳嫡堕漫捻幢翱织惜算Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计第第6 6章章GUIGUI应用程序设计应用程序设计摧昭韶碳群菲堂炔刃辐云老聪阜闻高淳号槽灾脖慷射凛剃藕予箱故凯咎诺Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计 图形用户界面(图形用户界面(Graphics User Graphics User InterfaceInterface,缩写,缩写GUIGUI)是指以图形的显)是指以图形的显示方式与用户实现交互操作的应用程序示方式与用户实现交互操作的应用程序
2、界面,设计具有界面,设计具有GUIGUI特征的应用程序被称特征的应用程序被称为为GUIGUI应用程序设计。应用程序设计。JavaJava提供了十分完提供了十分完善的图形用户界面功能,使得软件开发善的图形用户界面功能,使得软件开发人员可以轻松地开发出功能强大、界面人员可以轻松地开发出功能强大、界面友善、安全可靠的应用城建,充分体现友善、安全可靠的应用城建,充分体现了了JavaJava语言的时代感与面向对象程序设语言的时代感与面向对象程序设计的优越性。计的优越性。栏绸卒症饱郊盒了穴倍饲施惜狙叠垃萧疫诛岔报昔俯讯率塔靡础恰橱渴谣Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章
3、GUI程序的设计6.1 Java6.1 Java图形用户界面概述图形用户界面概述 在在Java Java 语言中,为语言中,为GUIGUI应用程序设计提应用程序设计提供了强大的功能,其相关的类主要封装供了强大的功能,其相关的类主要封装在两个包(在两个包(java.awt java.awt 和和javax.swingjavax.swing)中,其中包含了实现图形用户界面的所中,其中包含了实现图形用户界面的所有基本元素,这些基本元素主要包括容有基本元素,这些基本元素主要包括容器、组件、绘图工具与布局管理器等。器、组件、绘图工具与布局管理器等。组件是与用户实现交互操作的部件,容组件是与用户实现交互操
4、作的部件,容器是包容组件的部件,布局管理器是管器是包容组件的部件,布局管理器是管理组件在容器中布局的部件,绘图工具理组件在容器中布局的部件,绘图工具是绘制图形的部件。是绘制图形的部件。惭磺扯谍勤益氨移沧琵漾下脑顿龟纲莎帆沥盼烧撕驭抬掐畴赵开枉釉骋戊Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计 java.awtjava.awt是是java1.1java1.1用来建立用来建立GUIGUI的图形的图形包,这里的包,这里的“awtawt”是抽象窗口工具包是抽象窗口工具包 (Abstract Windowing ToolkitAbstract Windowin
5、g Toolkit)的缩)的缩写,其中的组件常被称为写,其中的组件常被称为AWTAWT组件,这种组件,这种组件的结构简单、外观固定,在组件的结构简单、外观固定,在JavaJava语语言的发布初期是构建用户界面的主要元言的发布初期是构建用户界面的主要元素,现在已经被基本淘汰使用。素,现在已经被基本淘汰使用。javax.swingjavax.swing是是JDK1.2JDK1.2之后提出的之后提出的AWTAWT改改进包,它改善了组件的显示外观,增强进包,它改善了组件的显示外观,增强了组件的控制能力,为了组件的控制能力,为JavaJava满足人们对满足人们对用户界面的更高要求给予了可靠保证。用户界面
6、的更高要求给予了可靠保证。 纱媚呻谩暗粉书裔巩层磺晒像锄委镭搞孩峭青轴坠轿届灯烁堪投贫请逃厚Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计 与与AWTAWT相比较,相比较,SwingSwing具有以下几点优势:具有以下几点优势: (1 1)AWTAWT是基于同位体(是基于同位体(PeerPeer)的体系结构,这)的体系结构,这种设计策略严重限制了用户界面中可以使用的种设计策略严重限制了用户界面中可以使用的组件种类及功能,成为一个致命的缺憾;而组件种类及功能,成为一个致命的缺憾;而SwingSwing不需要本地提供同位体。不需要本地提供同位体。 (2 2
7、)在)在AWTAWT中,有一部分代码是用中,有一部分代码是用C C编写的;而编写的;而SwingSwing是是100%100%的纯的纯JavaJava,增强了应用程序的与环,增强了应用程序的与环境无关性。境无关性。 (3 3)SwingSwing具有控制外观(具有控制外观(Pluggable look Pluggable look and feeland feel)的能力,即允许用户自行定制桌面)的能力,即允许用户自行定制桌面的显示风格,而的显示风格,而AWT AWT 完全依赖于本地平台。完全依赖于本地平台。 (4 4)增加了裁剪板、鼠标提示和打印等功能。)增加了裁剪板、鼠标提示和打印等功能。
8、汹历鸟崇颇钨烂占暮忻掳伐郑撩与秩镰落称缓践刷喇写唤皇挑枯缆淄厘议Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计 所有所有SwingSwing组件类存在于组件类存在于javax.swingjavax.swing包包中。为了避免混淆,中。为了避免混淆,SwingSwing包中的所有类包中的所有类名都在原名都在原AWTAWT类名的前面冠与类名的前面冠与“J J”。 例如,例如,JPanelJPanel、JFrameJFrame、JButtonJButton等。等。 对于用户界面,除了设计可视化组件的对于用户界面,除了设计可视化组件的显示外观外,还需要设计处理
9、用户操作显示外观外,还需要设计处理用户操作请求的方式,这就是事件处理。请求的方式,这就是事件处理。 览都拥斧籽惭卤身付沧囊淘皖间狸抑缠颧孜绩嘲掳恤范瘫徊始后哨僻晕檀Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计 设计用户界面需要经历设计用户界面需要经历4 4个基本步骤:个基本步骤: (1)(1)创建与设置组件创建与设置组件 (2)(2)将组件加入到容器中将组件加入到容器中 (3)(3)布局组件布局组件 (4)(4)处理由组件产生的事件处理由组件产生的事件票叙烃豺伴钉焦厂篱食胜教享拖宴忙关眩舶两献棒唁谬痕溢商灿伊馋赫焙Java程序的设计 第6章 GUI程
10、序的设计Java程序的设计 第6章 GUI程序的设计6.2 Swing6.2 Swing容器容器 SwingSwing是在是在AWTAWT基础上发展而来的,人们在图形基础上发展而来的,人们在图形用户界面中使用的元素都属于用户界面中使用的元素都属于SwingSwing,其原因,其原因在于在于SwingSwing扩展了扩展了AWTAWT的功能,提高了的功能,提高了JavaJava程序程序的控制能力,体现了的控制能力,体现了JavaJava人性化的设计理念。人性化的设计理念。 容器是容器是GUIGUI设计中必不可少的一种界面元素,设计中必不可少的一种界面元素,它是用来放置其他组件的一种特殊部件,它是
11、用来放置其他组件的一种特殊部件,JavaJava类库中提供了丰富的容器类,为选择与创建容类库中提供了丰富的容器类,为选择与创建容器带来了极大的便捷。下面介绍两种常用的容器带来了极大的便捷。下面介绍两种常用的容器:顶层容器、面板容器。器:顶层容器、面板容器。讼劣浦雁轧昧苍宛骚状倪蚤叔谅址囤赂吕凛石阶贿婿楔愉里孟蹋沁绎赐梧Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计6.2.1 6.2.1 顶层容器顶层容器 所谓顶层容器是指最外层的容器,即包所谓顶层容器是指最外层的容器,即包含所有组件或容器的那层容器。例如,含所有组件或容器的那层容器。例如,运行应用程序后
12、打开的最外层窗口。每运行应用程序后打开的最外层窗口。每一个可视化的一个可视化的GUIGUI应用程序都应该有一个应用程序都应该有一个顶层容器。一个容器可以包含其他的容顶层容器。一个容器可以包含其他的容器,即容器之间可以具有嵌套关系,这器,即容器之间可以具有嵌套关系,这样就形成了一个层次结构。如果将这个样就形成了一个层次结构。如果将这个容器层次结构用树型结构描述,顶层容容器层次结构用树型结构描述,顶层容器就是这棵树的根。器就是这棵树的根。洋宇财俊鲤峪糠骤月路锌贷攀完晤彬匈样褒跋既凛乳闪太澡把蚁硒痕售棺Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计 一个一个
13、GUIGUI应用程序应该包含一应用程序应该包含一个用个用JFrameJFrame作为根的容器层作为根的容器层级结构。级结构。JFrameJFrame是是SwingSwing组组件中承担顶层容器责任的类,件中承担顶层容器责任的类,包含了描述顶层容器的所有包含了描述顶层容器的所有属性及操作行为。属性及操作行为。华墟璃胺济扩笆骚艰勾隅篱沤蜂从捕喷儒澡票融篮颤那烃窍碱恳摔脯蛹店Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计 在使用顶层容器时,需要注意以下几点:在使用顶层容器时,需要注意以下几点: (1 1)为了能够在屏幕上显示出来,每个)为了能够在屏幕上显示出
14、来,每个GUIGUI组组件都必须放置在一个容器中。件都必须放置在一个容器中。 (2 2)每个)每个GUIGUI组件只能被添加到一个容器中。组件只能被添加到一个容器中。如果一个组件已经被添加到一个容器中,又把如果一个组件已经被添加到一个容器中,又把它添加到另外一个容器中,则它将首先被从第它添加到另外一个容器中,则它将首先被从第一个容器中删除,然后再移入第二个容器。一个容器中删除,然后再移入第二个容器。 (3 3)在)在SwingSwing中,顶层容器包含一个内容窗格中,顶层容器包含一个内容窗格(Content paneContent pane),所有的可视组件都必须放),所有的可视组件都必须放在
15、内容窗格中。可以调用顶层容器中在内容窗格中。可以调用顶层容器中getContentPanegetContentPane()()方法得到当前容器的内容窗格,并使用方法得到当前容器的内容窗格,并使用addadd()()方法将组件添加到其中。方法将组件添加到其中。 (4 4)可以在顶层容器中添加菜单栏,它将位)可以在顶层容器中添加菜单栏,它将位于顶层容器的约定位置。例如,在于顶层容器的约定位置。例如,在WindowWindow环境环境下,菜单栏位于窗口标题栏的下面。下,菜单栏位于窗口标题栏的下面。 急殴仰墩甫然蒋陶祥矮照凿京斌粕痪密拄栏庆绚还釜芬捷江虎宴猴渔液伴Java程序的设计 第6章 GUI程序
16、的设计Java程序的设计 第6章 GUI程序的设计霞镶奉狄反货狠煤友碰朝疤洗茸撅罩币螟枷叫捻炸旺密杰蚜酮僳豪渣刚读Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计1.1.创建顶层容器创建顶层容器 通常,顶层容器就是人们看到的最外层通常,顶层容器就是人们看到的最外层窗口,创建这个窗口的基本过程为:窗口,创建这个窗口的基本过程为: (1) (1) 定义一个定义一个JFrameJFrame的子类。的子类。 (2) (2) 创建上述子类对象。创建上述子类对象。 (3) (3) 设置窗口关闭操作。设置窗口关闭操作。 恒益墩制钉亢根惋忘瑰渍样羊庶敲机少校虫藐仕丰饲揽
17、颧狗际距吟约轧徐Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计/ file name:SimpleJFrameClass .javaimport javax.swing.*;public class SimpleJFrameClass extends JFrame public static final int DEFAULT_WIDTH = 300; public static final int DEFAULT_HEIGHT = 200; public SimpleJFrameClass() setSize( DEFAULT_WIDTH, DEFA
18、ULT_HEIGHT ); setTitle(Simple JFrame Window); setVisible(true); 孝搓浚网近云酝鹃衅尺曰医瘟法膛砚佛奄蜀轴君坤撬腔窍泄胖搜鹅饱艳耕Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计 需要说明下面几点:需要说明下面几点: (1) (1) 有关有关SwingSwing容器与组件的类都被封装在容器与组件的类都被封装在javax.swingjavax.swing包中,因此,在设计包中,因此,在设计singsing的图形用的图形用户界面应用程序时,需要将这个包加载进来。户界面应用程序时,需要将这个包加载进
19、来。 (2) JFrame(2) JFrame类是类是JavaJava类库提供的顶层窗口类,定类库提供的顶层窗口类,定义其子类的目的是针对用户的需求,在子类中义其子类的目的是针对用户的需求,在子类中给予相应的设置或重定义。给予相应的设置或重定义。 (3) DEFAULT_WIDTH(3) DEFAULT_WIDTH与与DEFAULT_HEIGHTDEFAULT_HEIGHT是子类中是子类中定义的两个常量,用于表示窗口大小。定义的两个常量,用于表示窗口大小。 (4) (4) 在构造方法中设置窗口的大小,并将窗口的在构造方法中设置窗口的大小,并将窗口的可视状态设置为可见。需要说明,如果不设置可视状
20、态设置为可见。需要说明,如果不设置窗口的大小,窗口的默认大小为窗口的大小,窗口的默认大小为0 0;如果不设置;如果不设置窗口的可视状态,其默认可视状态为隐藏。窗口的可视状态,其默认可视状态为隐藏。 (5) setTitle() (5) setTitle() 用于设置窗口标题栏显示的内用于设置窗口标题栏显示的内容,也可以利用容,也可以利用getTitle()getTitle()获取当前标题栏的获取当前标题栏的现实内容。现实内容。退哨点威盟灿蜡股量狙处沙弓侗巡舆擅崭享孵焦婉宽哄释炎杉酸猩尽浦毒Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计/ file na
21、me:TestSimpleJFrameClass .javaimport javax.swing.*;public class TestSimpleJFrameClass public static void main(String agrs) SimpleJFrameClass frame = new SimpleJFrameClass(); frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE); 破预庚绍堤否奸猩疑穆浇绷烁谅脸借成稽远尼汛涟达兢萨惮察趾驹菌呕幅Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI
22、程序的设计JFrame.DO_NOTHING_ON_CLOSE JFrame.DO_NOTHING_ON_CLOSE 表示表示“关闭窗口关闭窗口”按钮失效。按钮失效。JFrame.HIDE_ON_CLOSE JFrame.HIDE_ON_CLOSE 表示将窗口隐藏起来,但没有关闭。表示将窗口隐藏起来,但没有关闭。JFrame.DISPOSE_ON_CLOSE JFrame.DISPOSE_ON_CLOSE 表示撤消窗口。表示撤消窗口。瓷昔灭能皂沫因桂悠窝钡思垄嚷艺翟靶边餐畦佬父活老佳伯培吁屯镣拱温Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计2 2定位
23、顶层容器定位顶层容器 JFrameJFrame类从各层父类中继承了许多用于处理窗口类从各层父类中继承了许多用于处理窗口大小及位置的方法。大小及位置的方法。 setLocationsetLocation的定义格式为:的定义格式为: public void setLocation(int x,int y)public void setLocation(int x,int y) 功能是将顶层窗口移至屏幕坐标(功能是将顶层窗口移至屏幕坐标(x,yx,y)。)。 setBounds()setBounds()的定义格式为:的定义格式为: public void setBounds(int xleft,pu
24、blic void setBounds(int xleft, int yleft,int width,int height) int yleft,int width,int height) 功能是将顶层窗口的左上角移至屏幕坐标为功能是将顶层窗口的左上角移至屏幕坐标为 (xleft,yleftxleft,yleft),宽为),宽为widthwidth,高为,高为heightheight。档甫社代疗圾宇探王玫曝囤犊硫絮唁问阅褂曙框挟荤煽充践丁坑糙咏挤涤Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计public SimpleJFrameClass() set
25、Size( DEFAULT_WIDTH, DEFAULT_HEIGHT );setLocation(100,100); setTitle(Simple JFrame Window);setVisible(true);庶戳炎先隐从吧拜全擦摸傲犬召报母婉墙抬叔娃辉坡咏玛噎慈亦珠歪时鹃Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计3 3设置顶层容器大小设置顶层容器大小 setSize() 用于设置顶层容器的大小,另外,还用于设置顶层容器的大小,另外,还可以利用可以利用setResizable() 通过带入通过带入true或或false确确定顶层容器的大小是否
26、可调节。定顶层容器的大小是否可调节。 Toolkit kit = Toolkit.getDefaultToolkit(); Dimension screenSize = kit.getScreenSize(); int screenWidth = screenSize.width; int screenHeight = screenSize.height; setSize(screenWidth / 2, screenHeight / 2); setTitle(Simple JFrame Window); setVisible(true); setResizable(false);缓稚庭攘柔刨
27、讯刁蔫茧扎帛纫奈潮忘密都宁胳蕾渡阎骤唇职掘至鸽写沫荷Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计6.2.2 6.2.2 面板容器面板容器 面板是一种没有边框、没有标题栏面板是一种没有边框、没有标题栏的中间层容器。常见的面板容器有的中间层容器。常见的面板容器有两种:一种是普通的面板容器,在两种:一种是普通的面板容器,在SwingSwing中用中用JPanelJPanel类实现;另一种是类实现;另一种是带滚动视图的容器,在带滚动视图的容器,在SwingSwing中用中用JScrollPaneJScrollPane类实现。类实现。 浦渡岳炒哼锈稀饺双为酋歧
28、泵价闪漠秃倾谴犁瑟宋封桅煌瘸拢蛰叭空碧契Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计1. 1. 普通面板容器普通面板容器l这是一种常用的容器种类。在默认情况这是一种常用的容器种类。在默认情况下,除背景外不会自行绘制任何东西。下,除背景外不会自行绘制任何东西。当然,可以利用相应的成员方法为它添当然,可以利用相应的成员方法为它添加边框,或定制想要绘制的内容。加边框,或定制想要绘制的内容。l在默认情况下,面板容器不透明,但可在默认情况下,面板容器不透明,但可以调用以调用setOpaque()setOpaque()成员方法将其设置为成员方法将其设置为透明。如
29、面板容器透明,就没有背景,透明。如面板容器透明,就没有背景,这样就会让位于容器覆盖区域下面的组这样就会让位于容器覆盖区域下面的组件显现出来。件显现出来。 种吹拆狙菩窘宪讥畦筷拐融隧炽贰换芥禄妈斯帐瑞棉谱瞄疏瓮钙中殴梧皆Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计 JPanelJPanel的默认布局管理器是的默认布局管理器是FlowLayoutFlowLayout。所谓布局管理器是指能够布局容器中每个所谓布局管理器是指能够布局容器中每个组件所放位置和大小的部件,不同的布局组件所放位置和大小的部件,不同的布局管理器对应不同的组件布局策略。可以在管理器对应
30、不同的组件布局策略。可以在创建容器时指定布局管理器,或调用创建容器时指定布局管理器,或调用setLayoutsetLayout()()成员方法更改布局管理器。成员方法更改布局管理器。 埋袭毅沼晾瑞烫瞎观倒概稻遵进烬舱谎层歧羚牙碎孝窒资粒豹譬涛碟尽杆Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计 在在JPanelJPanel类中提供了两种格式的构造方类中提供了两种格式的构造方法:法: JPanel()JPanel() 这是无参数的构造方法,它将创建一个这是无参数的构造方法,它将创建一个布局管理器为布局管理器为FlowLayoutFlowLayout的面板
31、容器。的面板容器。 JPanel(LayoutManager layout)JPanel(LayoutManager layout) 这个构造方法将创造一个布局管理器为这个构造方法将创造一个布局管理器为layoutlayout的面板容器。的面板容器。 害撇卡滔镀荔四谬震镇扭谋铸拽认筐捣蔫码傣嘻逸肃坷庄毖擦缘拍盖齿余Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计/ file name:SimpleJPanelClass.javaimport javax.swing.*;public class SimpleJPanelClass extends JPan
32、el JLabel nameLabel, passwordLabel; / 标签标签 JTextField name; / 文本域文本域 JPasswordField password; / 密码框密码框 JButton okButton, cancelButton; / 按钮按钮 public SimpleJPanelClass() nameLabel = new JLabel(Name:); passwordLabel = new JLabel(Password:); name = new JTextField(20); password = new JPasswordField(20);
33、 okButton = new JButton(OK); cancelButton = new JButton(Cancel); add(nameLabel); add(name); add(passwordLabel); add(password); add(okButton); add(cancelButton); 爸问益沫停醋敷没寝呈买详交恭漆勋膊色扎赂婶危估鞭御讶扑腑宵簇乃痞Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计/ file name:SimpleJFrameClass .javaimport javax.swing.*;public
34、class SimpleJFrameClass extends JFrame SimpleJPanelClass panel; / 面板容器对象面板容器对象 public static final int DEFAULT_WIDTH = 320; public static final int DEFAULT_HEIGHT = 120; public SimpleJFrameClass() setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); setTitle(用户登录用户登录); panel = new SimpleJPanelClass(); / 创建面板容器对象
35、创建面板容器对象 getContentPane().add(panel); / 将面板放置到窗口中将面板放置到窗口中 setVisible(true); setResizable(false); 羹宁古拒凤现磋毗棺粉仪欺窒践洋统笺懈靴佬浅瑰瘦保连进胡鸽馏辩踩峡Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计/ fille name:TestJPanelClass .javaimport javax.swing.*;public class TestJPanelClass public static void main(String agrs) Simpl
36、eJFrameClass frame = new SimpleJFrameClass(); frame.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE); 迟号战冻夺边凤挚陆你澎彰膜喧斑怜旷搔枯超之巫杂荣遭昏萤霞属遇么沸Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计2. 2. 带滚动视图的容器带滚动视图的容器l在在SwingSwing中用中用JScrollPaneJScrollPane类实现具有滚类实现具有滚动功能的容器。由于屏幕大小的限制,动功能的容器。由于屏幕大小的限制,有些组件不能在一屏中全部显示出来
37、,有些组件不能在一屏中全部显示出来,或显示内容的大小动态地发生变化,此或显示内容的大小动态地发生变化,此时,可以使用带滚动功能的视口容器,时,可以使用带滚动功能的视口容器,利用它提供的滚动条移动窗口,让其中利用它提供的滚动条移动窗口,让其中的组件能够分区域地显示出来。的组件能够分区域地显示出来。l应用应用JScrollPaneJScrollPane容器的方式很简单,只容器的方式很简单,只要创建一个要创建一个JScrollPaneJScrollPane对象,并为它指对象,并为它指定将要显示的内容即可。定将要显示的内容即可。 奏缝雍喀大虐报沫泊沿业了汹贩念严盟望纽我扒恋鸡惧瞩遁野诣绘缀钞呕Java
38、程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计/ file name:JFrameClass .javaimport java.awt.*;public class JFrameClass extends JFrame public static final int DEFAULT_WIDTH = 320; public static final int DEFAULT_HEIGHT = 120; JTextArea textArea; / 多行文本域多行文本域 JScrollPane scrollPane; / 带滚动视图的容器带滚动视图的容器 public
39、 JFrameClass() textArea = new JTextArea(5, 30); scrollPane = new JScrollPane(textArea); setSize(DEFAULT_WIDTH, DEFAULT_HEIGHT); setTitle(带滚动视图的容器带滚动视图的容器); / 设置标题栏显示内容设置标题栏显示内容 getContentPane().add(scrollPane, BorderLayout.CENTER); setVisible(true); setResizable(false); 掂中累盐挞孪抚坡雀奖涂算晋税旭筒抨窖凸赊森盟扑六窑臻磁俄追
40、短者蜀Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计scrollPane = new JScrollPane(textArea); 这条语句将创建带滚动视图的容器,并与多行文这条语句将创建带滚动视图的容器,并与多行文本域对象本域对象textArea建立关联,一旦建立关联,一旦textArea中需中需要显示的内容超出了显示区域,将自动启动滚动要显示的内容超出了显示区域,将自动启动滚动功能,用户可以通过拖拽滚动条将隐藏部分滚动功能,用户可以通过拖拽滚动条将隐藏部分滚动显示出来。显示出来。 / file nama:TestJScrollPaneClass.j
41、avaimport javax.swing.*;public class TestJScrollPaneClass public static void main(String agrs) JFrameClass frame = new JFrameClass(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 俯芝叮请超译臻矗合溉揭朋脓靳股酶处惹绦捞厄塑热虏啃昂脉糕僻末溯戚Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计6.3 6.3 布局管理器布局管理器 前面讲述了前面讲述了SwingSw
42、ing容器以及将组件放入容容器以及将组件放入容器中的基本方法。但是,如何在容器中器中的基本方法。但是,如何在容器中摆放各个组件,每个组件的大小如何控摆放各个组件,每个组件的大小如何控制是界面设计者需要十分清楚的事情。制是界面设计者需要十分清楚的事情。 燕琴别课柴叫抓瘫鬃佛令苞趴谣微畔苟跳心辫以脾乾衣蕊抗权模瘦层掷苔Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计6.3.1 6.3.1 布局管理器概述布局管理器概述 JavaJava是一种面向网络环境编程的语言,是一种面向网络环境编程的语言,因此,必须顾及应用程序在各种环境下因此,必须顾及应用程序在各种环境
43、下运行的效果。如果直接使用坐标确定每运行的效果。如果直接使用坐标确定每个组件在容器中的位置,就可能会由于个组件在容器中的位置,就可能会由于各种计算机系统的坐标系差异,造成应各种计算机系统的坐标系差异,造成应用程序在不同的环境中运行,所显示的用程序在不同的环境中运行,所显示的效果不同,为此效果不同,为此JavaJava提出了布局管理器提出了布局管理器的概念。所谓布局管理器是指按照特定的概念。所谓布局管理器是指按照特定的策略安排每个组件在容器中摆放位置的策略安排每个组件在容器中摆放位置及大小的一种特殊对象。及大小的一种特殊对象。 硷洪诫沮巧尊湖救卵柳珊盈题喊季涎严嚏雪邦麻瞬驰梧狠顾躁昆肢草糯缓Ja
44、va程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计哨唆点肩崇刮氧韩犬其蓝铣吟臆拙我护啊驼贬饭枫输肄星略仇钙邢钡砚捂Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计 在在LayoutManager接口中主要声明了下面几个关于增加、删除接口中主要声明了下面几个关于增加、删除组件,以及控制布局管理器大小的抽象方法。组件,以及控制布局管理器大小的抽象方法。 public void addLayoutComponent(String name, Component comp) 将组件将组件comp添加到布局管理器中添加到布局管理器
45、中 public void removeLayoutComponent(Component comp) 将从布局管理器中删除组件将从布局管理器中删除组件comp public Dimension preferredLayoutSize(Container parent) 将返回给定容器的最佳尺寸将返回给定容器的最佳尺寸 public Dimension minimumLayoutSize(Container parent) 将返回给定容器的最小尺寸将返回给定容器的最小尺寸堡守秸取良铺蔚佃禾痕什煽屈遂惩留野坊块壳化分绕爪榷臂姻锐览懊屿拯Java程序的设计 第6章 GUI程序的设计Java程序的设
46、计 第6章 GUI程序的设计6.3.2 FlowLayout6.3.2 FlowLayout布局管理器布局管理器 lFlowLayoutFlowLayout被称为流程布局管理器,它是被称为流程布局管理器,它是JPanelJPanel面板容器的默认布局管理器。这种布局面板容器的默认布局管理器。这种布局管理器按照从上到下、从左到右的规则将添加管理器按照从上到下、从左到右的规则将添加的组件依次摆放容器中。如果一行中没有足够的组件依次摆放容器中。如果一行中没有足够的空间放下一个组件,的空间放下一个组件,FlowLayoutFlowLayout将其放在新将其放在新的一行上。的一行上。l在创建在创建Flo
47、wLayoutFlowLayout对象时可以指定一行中组件对象时可以指定一行中组件的对齐方式,默认对齐方式为居中,还可以指的对齐方式,默认对齐方式为居中,还可以指定每个组件之间在水平和垂直方向上的间隙大定每个组件之间在水平和垂直方向上的间隙大小,默认值为小,默认值为5 5个像素。这种布局管理器并不个像素。这种布局管理器并不调整每个组件的大小,而是永远保持每个组件调整每个组件的大小,而是永远保持每个组件的最佳尺寸,剩余的空间填补空格。的最佳尺寸,剩余的空间填补空格。赏碴慧颇觅买氢敞肇余怖去厕湘蹦脊闷瀑泣枯豺志荚凉饼所稼讣尧誊扬将Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6
48、章 GUI程序的设计 FlowLayout()FlowLayout() 无参数的构造方法。无参数的构造方法。 FlowLayout(int align)FlowLayout(int align) 将创建一个对齐方式为将创建一个对齐方式为alignalign的布局管理器对象。的布局管理器对象。alignalign可以为在可以为在FlowLayoutFlowLayout类定义的常量类定义的常量LEFTLEFT、RIGHTRIGHT、CENTERCENTER、LEADINGLEADING和和TRAILINGTRAILING之一。之一。 FlowLayout(int align, int hgap,
49、int vgap)FlowLayout(int align, int hgap, int vgap) 将创建一个对齐方式为将创建一个对齐方式为alignalign、水平间隙为、水平间隙为hgaphgap个像个像素、垂直间隙为素、垂直间隙为vgapvgap个像素的布局管理器对象。个像素的布局管理器对象。 刽夯个枕概湍绷曼来本踞航蠢肯伪设止舰豢俐瓮判救嚎瘤没厄嫡生夫攀堡Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计吸狸笆拴肖契电轴肠柴寺仟店靠队戮列文巴箭概铆挤莉滋贤静狡烤实蹦展Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程
50、序的设计/ file name:JFrameClass .javaimport java.awt.*;import javax.swing.*;public class JFrameClass extends JFrame JButton button = new JButton9; / 定义定义9个按钮类对象个按钮类对象 FlowLayout layout; / 定义布局管理器对象定义布局管理器对象 public JFrameClass() super(FlowLayout 应用举例应用举例); / 设置窗口标题设置窗口标题 String label; layout = new FlowLa
51、yout(FlowLayout.LEFT, 10, 10); / 创建创建FlowLayout对象对象 getContentPane().setLayout(layout); / 设置布局管理器设置布局管理器 for (int i = 0; i 9; i+) / 创建创建9个按钮对象并放置在窗口的内容窗格中个按钮对象并放置在窗口的内容窗格中 label = Button # + (i + 1) + ; buttoni = new JButton(label); getContentPane().add(buttoni); setSize(320, 150); / 设置窗口大小设置窗口大小 se
52、tVisible(true); / 将窗口设置为可见状态将窗口设置为可见状态 setResizable(false); / 将窗口设置为不可调节大小将窗口设置为不可调节大小 聘螺白粟桐删犹萧疽歼牺辗堵邹歇震恋痞伍胰邪突扭镊蔫岩不米嫉幂渠陷Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计6.3.3 BorderLayout6.3.3 BorderLayout布局管理器布局管理器 BorderLayoutBorderLayout被称为边框布局管理器,被称为边框布局管理器, 它是它是JFrameJFrame内容窗格的默认布局管理器。内容窗格的默认布局管理器。这
53、个布局管理器的特点是将容器分为这个布局管理器的特点是将容器分为5 5个个部分,分别命名为部分,分别命名为NorthNorth、SouthSouth、WestWest、EastEast和和CenterCenter。 淮砍低狞腹瘸拷脱赣摔寺烛饭驮鸿卸酿矮陡粗洛庭啊哉徊兰稻柳貉绑望淌Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计 BorderLayoutBorderLayout类提供了两种构造方法:类提供了两种构造方法: BorderLayout()BorderLayout() 无参数的构造方法,它将创建一个组件之间无参数的构造方法,它将创建一个组件之间水平
54、和垂直间距均为零的布局管理器对象。水平和垂直间距均为零的布局管理器对象。 BorderLayout(int hgap, int vgap)BorderLayout(int hgap, int vgap) 将创建一个组件之间水平间距为将创建一个组件之间水平间距为hgaphgap,垂直,垂直间距为间距为vgapvgap的布局管理器对象。的布局管理器对象。鹅疫早促述屹哼爽穴鼎呵席听卧坏秧开电娥伴筛耶刘架穆行绣挎般主子忌Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计菠赴批筑财俐泡晚诗冰揽综膛吞萤熄质财睡粗款寥寂嘎桩后怕版闭庐赶除Java程序的设计 第6章 GU
55、I程序的设计Java程序的设计 第6章 GUI程序的设计/ file name:JFrameClass.javaimport javax.swing.*;public class JFrameClass extends JFrame JButton North, South, West, East, Center; JFrameClass() super(Borderlayout布局管理器应用举例布局管理器应用举例); North = new JButton(North); South = new JButton(South); West = new JButton(West); East =
56、 new JButton(East); Center = new JButton(Center); getContentPane().add(North, North); getContentPane().add(South, South); getContentPane().add(West, West); getContentPane().add(East, East); getContentPane().add(Center, Center); setSize(300, 200); setVisible(true); 煽暴瓶囱八曝幼娇纺苗氧咆晾经他觉趟晓姜限卞舀腥宜腑诛傲靛纤史铸靴Jav
57、a程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计6.3.4 GridLayout6.3.4 GridLayout布局管理器布局管理器 GridLayoutGridLayout被称为网格布局管理器,它被称为网格布局管理器,它是一种非常容易理解的布局管理器。这是一种非常容易理解的布局管理器。这种布局管理器的特点是将容器按照指定种布局管理器的特点是将容器按照指定的行数、列数分成大小相等的网格。可的行数、列数分成大小相等的网格。可以有两种将组件放入容器的方法:一是以有两种将组件放入容器的方法:一是使用默认的布局顺序,即按照从上到下、使用默认的布局顺序,即按照从上到下、
58、从左到右的次序将组件放入容器的每个从左到右的次序将组件放入容器的每个网格中;二是采用网格中;二是采用add()add()方法将组件放入方法将组件放入指定的网格中。指定的网格中。 撩艘慧菌拉汽撒也讲酣揭炒括逸垢研凹容脚哼烟英吞剂暑庞塑傣惶吹毋贪Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计 GridLayout类提供了类提供了3种构造方法:种构造方法: GridLayout() 无参数的构造方法,它将创建在一行内放置所有组无参数的构造方法,它将创建在一行内放置所有组件的网格布局管理器对象,组件之间没有间隙。件的网格布局管理器对象,组件之间没有间隙。 Gr
59、idLayout(int rows, int cols) 将创建将创建rows行、行、cols列的网格布局管理器对象,组列的网格布局管理器对象,组件之间没有间隙。件之间没有间隙。 GridLayout(int rows,int cols,int hgap,int vgap) 将创建将创建rows行、行、cols列的网格布局管理器对象,组列的网格布局管理器对象,组件之间的水平间隙为件之间的水平间隙为hgap,垂直间隙为,垂直间隙为vgap。崔沂狭专穷酞疤稀闽哉把幽鸡隔猎摔灶桩魄鼠厄翰丧炭蔬桅澈弊蜗靛旦嗓Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计/ f
60、ile name:JFrameClass.javaimport java.awt.*;import javax.swing.*;public class JFrameClass extends JFrame String str = 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, +, -, *, /, =; JButton button; /声明按钮对象声明按钮对象 JPanel panel1, panel2; /声明面板容器对象声明面板容器对象 JTextField text; /声明声明TextField对象对象 public JFrameClass() super(Grid
61、Layout布局管理器举例布局管理器举例); / 设置顶层窗口标题设置顶层窗口标题 button = new JButton15; / 创建创建15个按钮对象个按钮对象 panel1 = new JPanel(); / 创建两个创建两个Panel对象对象 panel2 = new JPanel(); getContentPane().add(panel1, North); / 将面板容器放到内容窗格中将面板容器放到内容窗格中 getContentPane().add(panel2, Center); text = new JTextField(20); / 创建创建TextField对象且添加
62、到对象且添加到panel1面板中面板中 panel1.add(text); panel2.setLayout(new GridLayout(5, 3); / 设置设置53的网格布局管理器的网格布局管理器 for (int i = 0; i 15; i+) / 创建创建15个按钮并放到个按钮并放到panel2面板中面板中 buttoni = new JButton(stri); panel2.add(buttoni); setSize(200, 300); / 设置窗口大小设置窗口大小 setVisible(true); / 将窗口设置为可见将窗口设置为可见 setResizable(false
63、); / 将窗口大小设置为不可调节将窗口大小设置为不可调节 掂反密搂工拉衡凸爵搁宪州掀喀壶挺傅柄倚绚糕啸姻姬误扛芋貉陶哩蛊辖Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计 3 3种布局管理器的使用总结:种布局管理器的使用总结: (1) (1) 每种容器有一种默认的布局管理器,利用每种容器有一种默认的布局管理器,利用Java Java 设计应用程序界面时需要清楚这一点,以便设计应用程序界面时需要清楚这一点,以便在没有为容器设置布局管理器时,了解摆放组件在没有为容器设置布局管理器时,了解摆放组件时采用的排列规则。时采用的排列规则。 (2) (2) 如果希望
64、为某个容器设置特定的布局管理器,如果希望为某个容器设置特定的布局管理器,首先需要创建相应的布局管理器对象,然后再利首先需要创建相应的布局管理器对象,然后再利用成员方法用成员方法setLayout()setLayout()进行设置。进行设置。 (3) (3) 巧妙地设置布局管理器,并利用面板容器将巧妙地设置布局管理器,并利用面板容器将界面结构化是设计复杂应用程序界面的基本手段。界面结构化是设计复杂应用程序界面的基本手段。尽管在很多尽管在很多JavaJava开发环境中提供了可视化界面开开发环境中提供了可视化界面开发工具,但是,掌握程序代码的书写方法仍然是发工具,但是,掌握程序代码的书写方法仍然是十
65、分重要的。十分重要的。 沪湛嫉漾召跪扫满窝浊探心封掘互袁毋外凝笔肿泉糠撼隘路突慢怪第引唆Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计6.4 Swing6.4 Swing组件组件 组件是应用程序界面中的重要元素,丰组件是应用程序界面中的重要元素,丰富的组件种类构成了强大的软件开发资富的组件种类构成了强大的软件开发资源。在程序开发过程中,根据不同的需源。在程序开发过程中,根据不同的需求,选择适合的组件是一件技术性很强求,选择适合的组件是一件技术性很强的工作,它关系到应用程序界面的美观的工作,它关系到应用程序界面的美观性、适用性、方便性与安全性。性、适用性
66、、方便性与安全性。 爽殆鹃灵糜颅算柞怜椰青课圭龙疑驱藻篮纯逊锑纬欣挥撇封凑虎誊速嘉榨Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计6.4.1 Swing6.4.1 Swing组件概述组件概述 在在SwingSwing中组件都是中组件都是JComponentJComponent类子类,类子类,这个类为子类提供了下列功能:这个类为子类提供了下列功能:工具提示。可以调用工具提示。可以调用setToolTipText()setToolTipText()成员方法指定一个字符串,当光标停留成员方法指定一个字符串,当光标停留在某个组件上时,会在组件附近开辟一在某个组
67、件上时,会在组件附近开辟一个小区域,并在其中显示这个字符串作个小区域,并在其中显示这个字符串作为提示信息。为提示信息。绘画和设置边框。可以调用绘画和设置边框。可以调用setBordersetBorder成成员方法为组件设置一个边框。如果希望员方法为组件设置一个边框。如果希望在组件内绘制图形,需要覆盖成员方法在组件内绘制图形,需要覆盖成员方法paintComponentpaintComponent()()。仗裹讳血价厉猿树脉窟呼伊疗畔煞远豌孤唇柜鲸啃得匆珠登垂夕润捧独搂Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计控制显示外观。在每个组件的背后都有一个控
68、制显示外观。在每个组件的背后都有一个ComponentUIComponentUI对象与之对应,由此完成组件的对象与之对应,由此完成组件的所有绘画、事件处理、定制尺寸任务。使用的所有绘画、事件处理、定制尺寸任务。使用的ComponentUIComponentUI对象与当前的显示外观有关,而对象与当前的显示外观有关,而显示外观可以显示外观可以UIManager.setLookAndFeel()UIManager.setLookAndFeel()成成员方法进行设置。员方法进行设置。定制属性。可以将任何定制属性。可以将任何JComponentJComponent组件的一个组件的一个或多个属性进行组合。
69、例如,一个布局管理器或多个属性进行组合。例如,一个布局管理器可以利用属性将多个约束条件组合在一起使其可以利用属性将多个约束条件组合在一起使其作用在一个组件上。作用在一个组件上。 辙尸舒赚荣斩空陇限玉有哪骄粳剐魂屠俺价叶渣凯狼搭传现菲灼导下狂营Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计支持拖拽功能。支持拖拽功能。JComponentJComponent类提供了设置拖拽类提供了设置拖拽组件操作的组件操作的APIAPI。支持双缓冲。在刷新组件时会产生闪烁现象。支持双缓冲。在刷新组件时会产生闪烁现象。为了解决这个问题,提供了双缓冲技术,它可为了解决这个问题
70、,提供了双缓冲技术,它可以使屏幕刷新更加平滑。在默认情况下,以使屏幕刷新更加平滑。在默认情况下,JPanelJPanel容器是双缓冲。容器是双缓冲。击键绑定。当用户按下键盘时,组件可以做出击键绑定。当用户按下键盘时,组件可以做出反应。例如,当一个按钮具有焦点时,按下反应。例如,当一个按钮具有焦点时,按下“空格空格”键就等于在按钮上按下鼠标。外观自动键就等于在按钮上按下鼠标。外观自动地将按下和释放地将按下和释放“空格空格”键绑定在一起,并显键绑定在一起,并显示相应的外观。示相应的外观。 瞬洞战邪室急穆抚唬鸟囱聪圆味卫刷染宣铬凄贮妥折品释犬汹植侧昏曝坷Java程序的设计 第6章 GUI程序的设计J
71、ava程序的设计 第6章 GUI程序的设计 与与AWTAWT组件相比较,组件相比较, Swing Swing组件增加了下组件增加了下面几个新功能:面几个新功能:按钮与标签组件不仅可以显示文本串,按钮与标签组件不仅可以显示文本串,还可以显示图标。还可以显示图标。轻松地为大多数组件添加或更改边框。轻松地为大多数组件添加或更改边框。可以通过调用成员方法或创建一个子类可以通过调用成员方法或创建一个子类对象改变对象改变SwingSwing组件的外观和行为。组件的外观和行为。SwingSwing组件不仅可以为矩形,还可以为其组件不仅可以为矩形,还可以为其他形状。例如,创建一个圆形按钮。他形状。例如,创建一
72、个圆形按钮。焕驭孰鲤辈譬绪悟尘寂莆妨钟菇宠享友鸵赘历糜糕集屉险佐城挽蹲倡篇位Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计6.4.2 6.4.2 静态文本组件静态文本组件 在在JavaJava中,静态文本组件是用标签组件中,静态文本组件是用标签组件实现的,这是一种不响应事件,主要用实现的,这是一种不响应事件,主要用于显示一些说明性描述信息的组件,它于显示一些说明性描述信息的组件,它的使用方式简单、应用频度高,是一种的使用方式简单、应用频度高,是一种在在GUIGUI应用程序界面设计中必不可少的组应用程序界面设计中必不可少的组件。在件。在SwingSwin
73、g中,用中,用JLabelJLabel类实现这个组类实现这个组件的功能,与件的功能,与AWTAWT中的标签组件相比较,中的标签组件相比较,它的显示形式得到了扩展,不仅可以显它的显示形式得到了扩展,不仅可以显示文字,还可以显示图标。示文字,还可以显示图标。 鸭撇品移吗原弦沤尚萍陀服聚右软茨瞧娃蹦松鹊它田烙谍单豹燃持养纠宪Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计在在JLabel类提供的构造方法:类提供的构造方法:JLabel()JLabel(Icon icon)JLabel(Icon icon,int horizontalAlignment)JLab
74、el(String text)JLabel(String text, int horizontalAlignment)JLabel(String text, Icon icon, int horizontalAlignment)跨芳斗宇恿寓晃膘咽难务涛矽壳督颗西颊秩扔吮辩腻倪呕滑歉挠便亩彝首Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计卉擦丁乒闺怜殖刺鄙徘且晴蝇烘乏瘩紧奸遗凿哉枕角萄尚恳勃验本沥皖舶Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计 使用标签组件的基本过程是:使用标签组件的基本过程是: (1) (1
75、) 创建创建JLabelJLabel对象,此时,可以选择对象,此时,可以选择不同的构造方法设置标签显示的内容、不同的构造方法设置标签显示的内容、图标及对齐方式。图标及对齐方式。 (2) (2) 调用容器对象的成员方法调用容器对象的成员方法add()add()将标将标签放入容器中。签放入容器中。 (3) (3) 利用提供的成员方法获取、设置标利用提供的成员方法获取、设置标签组件的各种属性。签组件的各种属性。素效永禽捻芒顷牢犁瘁首戏币驼蒸知描电容冉早案阮犯欲绳膛锚险泵扦疼Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计/ file name:JLabelFr
76、ameClass.javaimport javax.swing.*;import java.awt.*;public class JLabelFrameClass extends JFrame JLabel label1, label2, label3; public JLabelFrameClass() setTitle(JLabel 应用实例应用实例); label1 = new JLabel(Text - only label, SwingConstants.CENTER); label2 = new JLabel(Text and pictrue label, new ImageIco
77、n(picture.jpg), SwingConstants.CENTER); label3 = new JLabel(new ImageIcon(picture.jpg), SwingConstants.CENTER); getContentPane().setLayout(new GridLayout(3, 1); getContentPane().add(label1); getContentPane().add(label2); getContentPane().add(label3); setSize(260, 260); setVisible(true); setResizable
78、(false); 哑棚舌予淀西圃傻疚庶糊开氦芝雀腆逼来焕榷瞅姻茸欧侦蔼垮抉笆琴田扼Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计6.4.3 6.4.3 文本输入组件文本输入组件鸵排硝汗鞋搜叶谎噶寇帅酵纤莆盆澈力贡虎味万滚扩硫豢獭寨辙阀抢介苔Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计1. 1. 文本域文本域 文本域是一种允许用户输入一行文本内文本域是一种允许用户输入一行文本内容的组件。在容的组件。在JavaJava语言中,用语言中,用JTextFieldJTextField描述这个组件的特征与操作描述这个组件
79、的特征与操作能力。能力。 构造方法格式:构造方法格式:lJTextField()JTextField()lJTextField(String text)JTextField(String text)lJTextField(String text,int col)JTextField(String text,int col)lJTextField(int col)JTextField(int col)比畴转复前灶讶测搬傅抱交簇状廊欲蛋摇稗影承篱宫需磅竭葡包踌似础媳Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计呆影等闸由优赐箩你错冠慕霸佛巍姆听墟四囱摇根妖
80、陀瞩础土上恐蒂辅后Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计 如果在应用程序界面中需要使用文本域如果在应用程序界面中需要使用文本域组件,需要经历下列基本过程:组件,需要经历下列基本过程:l创建文本域创建文本域JTextFieldJTextField对象。对象。l将组件放入容器的适当位置。将组件放入容器的适当位置。l利用利用JTextFieldJTextField类的成员方法获取或设置文类的成员方法获取或设置文本域内容,并通过程序给予相应的处理。本域内容,并通过程序给予相应的处理。 忠好吠讶悬沿宣驻楞殷昂醒胯母优舜奶旋茂莽硫假励通涛携乳凄替秩重娜Ja
81、va程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计 为这个题目设计为这个题目设计3 3个类,一个是用于个类,一个是用于 绘制时钟的面板类绘制时钟的面板类ClockPanelClassClockPanelClass, 主要负责绘制时钟,其中定义了与绘主要负责绘制时钟,其中定义了与绘 制时钟有关的制时钟有关的3 3个成员方法;一个是个成员方法;一个是 顶层窗口类顶层窗口类JTextFieldFrameClassJTextFieldFrameClass,负责管理,负责管理这个应用程序的窗口,主要任务是将时钟和两这个应用程序的窗口,主要任务是将时钟和两个文本域放到窗口
82、的内容窗格中,并对用户按个文本域放到窗口的内容窗格中,并对用户按下下“回车回车”键事件进行处理;还有一个是用于键事件进行处理;还有一个是用于检测前面两个类使用情况的测试类检测前面两个类使用情况的测试类TestJTextFieldFrameClassTestJTextFieldFrameClass。 驻腥插跑肮极攫恨敲凉野凰渡吻日襄侵评唆氓二乙贮蹄悟碴杯令兔很之疤Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计2. 2. 密码域密码域 在在AWTAWT中,没有单独的密码域组件,而是中,没有单独的密码域组件,而是通过调用文本域对象的成员方法通过调用文本域对象
83、的成员方法setEchoCharsetEchoChar()()设置回显字符来达到密码域组件的效设置回显字符来达到密码域组件的效果。在果。在SwingSwing中提供了一个专门用于实现中提供了一个专门用于实现输入密码的文本域组件,它是用类输入密码的文本域组件,它是用类JTextFieldJTextField的子类的子类JPasswordFieldJPasswordField实现,实现,其使用方式与文本域基本一样。其使用方式与文本域基本一样。基肃痞寺悉涤试饼味秆车枯吊源窒博谭媒廉跟更矣疚加吴若虾肠皮呸滴拷Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计3.
84、3. 文本区文本区 如果用户输入的文本超过一行就需要使如果用户输入的文本超过一行就需要使用文本区组件。在用文本区组件。在SwingSwing中用类中用类JTextAreaJTextArea实现接收用户输入多行文本的实现接收用户输入多行文本的功能。功能。 构造方法格式:构造方法格式:lJTextArea ()lJTextArea (String text)lJTextArea (String text,int rows, int cols)僵芋酞碗身爷担镭杠烈债匿论履获牡厚靳蔬洪精会宽剪圣锯怪巢瓢括闪拈Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计伦年圾
85、奏悠大婚帽胎社芒怂垫染锐并着材瞒里恿愚痹劈萤曾霉质鸳烧洁长Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计6.4.4 6.4.4 按钮组件按钮组件 按钮是一类种类最多、使用最频繁的组按钮是一类种类最多、使用最频繁的组件。件。SwingSwing按钮既可以显示文字,也可以按钮既可以显示文字,也可以显示图标,并且每个按钮可以为快捷键显示图标,并且每个按钮可以为快捷键字母自动地显示下划线,当按钮被禁用字母自动地显示下划线,当按钮被禁用时,自动地变成浅灰色的外观。时,自动地变成浅灰色的外观。嫁雍送沼巨讹扬捷甲潭撵轴萎肯共耽茄跨豫繁错阶拦藉殃膝苫盒说脑呈急Java
86、程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计集氓藕瘫限征磁著敢艾啼抢矩玻蜒薛臣懈驭伙扣显娄肩拣恶验控漂塌羔胶Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计恤鸯棋爱贡通栅蛹航獭君妇佣碎纠茹谎妥秆焚癣冗本室浩琐捉灶艘岳备析Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计使用按钮组件需要经过下列基本步骤:使用按钮组件需要经过下列基本步骤:(1) (1) 创建按钮对象。创建按钮对象。(2) (2) 将按钮对象添加到容器中。将按钮对象添加到容器中。(3) (3) 设置响应点击按钮事件的操
87、作。设置响应点击按钮事件的操作。疲锨冀宠椽妨居回漂命抒帖撒逾锐谱逛础母更槛萧抵庐咕熙挽柜碱衅滥岛Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计1. 1. 普通按钮普通按钮 JButtonJButton类定义了最普通的按钮形式,用来响应类定义了最普通的按钮形式,用来响应用户的操作请求。在一个窗口容器中,如果有多用户的操作请求。在一个窗口容器中,如果有多个按钮,每一时刻只能有一个被设置为默认按钮个按钮,每一时刻只能有一个被设置为默认按钮。默认按钮将呈现高亮度的显示外观,并且当窗。默认按钮将呈现高亮度的显示外观,并且当窗口容器获得输入焦点时,点击口容器获得输
88、入焦点时,点击“回车回车”键与用鼠键与用鼠标点击该按钮获得同样的效果。标点击该按钮获得同样的效果。 可以利用成员方法可以利用成员方法isDefaultButton()isDefaultButton()检测某个检测某个按钮是否为默认按钮,也可以利用成员方法按钮是否为默认按钮,也可以利用成员方法setDefaultButton(Button default)setDefaultButton(Button default)将某个按钮将某个按钮设置为默认按钮。设置为默认按钮。 漠箍伦透吭瘁屡盒休商扩烤贵层泡翅陌不雹还惨狮坟被政褪巷稳枉匙模替Java程序的设计 第6章 GUI程序的设计Java程序的设计
89、 第6章 GUI程序的设计5 5种格式的构造方法:种格式的构造方法:JButton()JButton()JButton(Icon icon)JButton(Icon icon)JButton(String text)JButton(String text)JButton(Action a)JButton(Action a)JButton(String text, Icon icon) JButton(String text, Icon icon) 瀑崔粱部找舒灶肖凌录侈咽赂蒜另气窝皆蚂帖股侄笛障伴洲镇孵芜凡悄荧Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的
90、设计2. 2. 复选按钮复选按钮 所谓复选框组件是指同时可以选择多项的选择所谓复选框组件是指同时可以选择多项的选择组件,由于在操作时,通过点击复选框组件在组件,由于在操作时,通过点击复选框组件在“选中选中”与与“不选中不选中”之间进行切换,所以,之间进行切换,所以,也可以将此组件归结为一种特殊的按钮,被称也可以将此组件归结为一种特殊的按钮,被称为复选按钮。在为复选按钮。在SwingSwing中用中用JCheckBoxJCheckBox类实现。类实现。与与JButtonJButton一样,可以为复选框设置配套显示一样,可以为复选框设置配套显示的文本串与图标。通常,在程序设计中,将同的文本串与图标
91、。通常,在程序设计中,将同一类事物的多个选项用多个复选按钮表示,并一类事物的多个选项用多个复选按钮表示,并排列在一起。复选按钮在每一时刻可以选择一排列在一起。复选按钮在每一时刻可以选择一项,也可以选择多项。项,也可以选择多项。 膳蚕伺公嘘柄莆貉嫂家郑无稠各鸦沫辞韦行纹钝游大亥古泵部藤惹莉犊挥Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计7 7种格式的构造方法:种格式的构造方法:JCheckBox () JCheckBox () JCheckBox(Icon icon) JCheckBox(Icon icon) JCheckBox(Icon icon,
92、boolean selected) JCheckBox(Icon icon, boolean selected) JCheckBox (String text) JCheckBox (String text) JCheckBox(Action a) JCheckBox(Action a) JCheckBox (String text, boolean selected) JCheckBox (String text, boolean selected) JCheckBox(String text, Icon icon) JCheckBox(String text, Icon icon) 皱智煤
93、戚参鞭粟贱汲诉吟蚌绞响纫倔硼喝乓租附鞘幸腐痉移硕氦苔播描币Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计3. 3. 单选按钮单选按钮 单选按钮是用于实现在一组选项中,每单选按钮是用于实现在一组选项中,每时只允许选择一项且仅一项的情形,因时只允许选择一项且仅一项的情形,因此,这种组件需要成组出现,且在每一此,这种组件需要成组出现,且在每一组中,每一时刻仅有一个选项被选中。组中,每一时刻仅有一个选项被选中。用用JRadioButtonJRadioButton与与ButtonGroupButtonGroup共同协作共同协作实现单选按钮的操作。实现单选按钮的操
94、作。 诵族怖诽休蚊代欣抬捧堑感博葵呻蛊眼镣锯灰梆贰橱绑韩彦童盐嘉它盏眩Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计8 8种格式的构造方法:种格式的构造方法:JRadioButton() JRadioButton() JRadioButton(String text) JRadioButton(String text) JRadioButton(String text,boolean selected) JRadioButton(String text,boolean selected) JRadioButton (Icon icon) JRadioB
95、utton (Icon icon) JRadioButton(Icon icon,boolean selected) JRadioButton(Icon icon,boolean selected) JRadioButton (String text, Icon icon ) JRadioButton (String text, Icon icon ) JRadioButton(String text, Icon icon,JRadioButton(String text, Icon icon, boolean selected) boolean selected) 窗答紧离氟抡颊稠管聊庶房堑
96、讼蛮核骇睫缆型薛稿吴贪指叙嫁耶株含扶礁Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计6.5 6.5 事件处理机制事件处理机制 JavaJava采用事件处理机制响应用户的操作采用事件处理机制响应用户的操作请求,即程序的运行过程是不断地响应请求,即程序的运行过程是不断地响应各种事件的过程,事件的产生顺序决定各种事件的过程,事件的产生顺序决定了程序的执行顺序,事件处理是图形用了程序的执行顺序,事件处理是图形用户界面应用程序的重要组成部分,是实户界面应用程序的重要组成部分,是实现各种操作功能的重要途径。现各种操作功能的重要途径。 俩万氢握惰楷区楞莽阉喇讳炽闭殃
97、围烟槐矩穆侠荤扎艰例畅乖布稀萧食棠Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计6.5.1 Java6.5.1 Java事件处理机制事件处理机制 到目前为止,已经接触过两种形式的到目前为止,已经接触过两种形式的JavaJava程序,一种是运行在字符界面下的程序,一种是运行在字符界面下的控制台应用程序,另外一种是运行在图控制台应用程序,另外一种是运行在图形用户界面下的形用户界面下的GUIGUI应用程序。对于控制应用程序。对于控制台应用程序,尽管也属于符合面向对象台应用程序,尽管也属于符合面向对象思想的程序,但事件产生的顺序是事先思想的程序,但事件产生的顺
98、序是事先在程序中确定的,在任意给定时刻都可在程序中确定的,在任意给定时刻都可以知道下一条将要执行哪个操作。以知道下一条将要执行哪个操作。 准猾煞觉仆狮矣檄亢叼肃谢俐苛汹藤弱乌食幢杀砰狱凉篙门豺司摸梯摇锄Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计 假设用户点击了应用程序界面中的一个假设用户点击了应用程序界面中的一个按钮,这个按钮就是事件源,该事件由按钮,这个按钮就是事件源,该事件由一个事件对象标识,并与被点击按钮的一个事件对象标识,并与被点击按钮的对象关联起来。这里的事件对象是一个对象关联起来。这里的事件对象是一个属于属于ActionEventAct
99、ionEvent类型的对象,其中包含类型的对象,其中包含了有关事件与事件源的信息。对象将作了有关事件与事件源的信息。对象将作为参数传递给处理该事件的成员方法。为参数传递给处理该事件的成员方法。烃桓股荔悬刨翁契囊糯灯第凡塑瘁击铁伴劳沼淫绷春拘孤绒凯唇疫播烷檄Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计 JavaJava事件处理的另一个重要特点是:事件处理的另一个重要特点是: 不必由产生事件的类对象完成,而是可以委托另不必由产生事件的类对象完成,而是可以委托另外一个类对象专门负责事件处理,这样可以防止外一个类对象专门负责事件处理,这样可以防止任务过于集中
100、,易于规范事件处理的过程。任务过于集中,易于规范事件处理的过程。 6.5.2 6.5.2 事件的处理过程事件的处理过程塑宇陵茫渠静侩镍斜跨槽抛袖枣吏熄遏饰吭菜邑才哮鸳冬怪浚拨臣揍益茹Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计 将专门负责处理事件的类对象称为监听器将专门负责处理事件的类对象称为监听器(ListenerListener)。监听器既可以由产生事件的类)。监听器既可以由产生事件的类实现,也可以由其他类实现,甚至可以由内部实现,也可以由其他类实现,甚至可以由内部类或匿名类实现。监听器是事件的目标,其中类或匿名类实现。监听器是事件的目标,其中含
101、有处理相应事件的成员方法。这些成员方法含有处理相应事件的成员方法。这些成员方法是对相应的监听接口中声明的成员方法的具体是对相应的监听接口中声明的成员方法的具体实现。也就是说,要想处理某种事件,必须创实现。也就是说,要想处理某种事件,必须创建某种事件的监听器。监听器类是一个实现某建某种事件的监听器。监听器类是一个实现某种监听接口的类。不同的事件类拥有不同的监种监听接口的类。不同的事件类拥有不同的监听接口,每个监听接口中声明了处理这类事件听接口,每个监听接口中声明了处理这类事件的抽象成员方法。这种事件处理方式为称为的抽象成员方法。这种事件处理方式为称为“委托委托”模式,即委托其他类对象处理事件。模
102、式,即委托其他类对象处理事件。富蔽担殴殆椅飘恤橡羌傻谁奄开屏黔至沸陨窄驱率蹲鸣毛寓犊颤酋视缮惕Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计 编写事件处理部分的基本过程:编写事件处理部分的基本过程: (1) (1) 定义监听器类,它是一个实现相应定义监听器类,它是一个实现相应监听接口的类。这个类既可以是包含事监听接口的类。这个类既可以是包含事件源的类,也可以是其他的类,或者是件源的类,也可以是其他的类,或者是内部类和匿名类。内部类和匿名类。 (2) (2) 事件源组件注册监听器。要注册组事件源组件注册监听器。要注册组件希望处理的所有事件的监听器。件希望
103、处理的所有事件的监听器。律督箭秒九荔两颠殃卧暂余枯奴这危续社厘蛀您城馏兹先弯函秧畔脏履堰Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计6.5.3 6.5.3 事件类事件类 低级事件低级事件是指来自键盘、鼠标与窗口操是指来自键盘、鼠标与窗口操作有关的事件。例如,窗口极小化、关作有关的事件。例如,窗口极小化、关闭窗口、移动鼠标或敲击键盘等。闭窗口、移动鼠标或敲击键盘等。 语义事件语义事件是指与组件有关的事件,如,是指与组件有关的事件,如,点击按钮、点击复选按钮、点击单选按点击按钮、点击复选按钮、点击单选按钮、在文本域中输入文本信息、拖动滚钮、在文本域中输入
104、文本信息、拖动滚动条等。这些事件来自图形用户界面,动条等。这些事件来自图形用户界面,其含义由程序设计员赋予,例如,其含义由程序设计员赋予,例如,“确确定定”按钮将确认刚才的操作,按钮将确认刚才的操作,“取消取消”按钮将撤消刚才的操作。按钮将撤消刚才的操作。少琳舱元嫂诛成肠会捕雷彤斡检彤啄窃娄唾郡近措铸咯揉猜掏沪壹弦韩鞠Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计1. 1. 低级事件低级事件粗挂证洁激尤鸣堕兜乏驰双呵飞旭隙融似宛底灸编邱趋矗兢站劳噎涸阴宜Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计忽询檀水槛纠
105、岛糯瓢耸函酬瘫狼初桂铰复暴饯唆杯琢铝页肌娠滑学掠霞踩Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计2. 2. 语义事件语义事件恨序归苯弛蹄牵湃押缄面唤傅炮亲趟呢励便柿爪挚肉羽蕊套仟盅狙剩谷萄Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计缆盼睦帧息隅背怜承桃盅梳销遏熬庆鞍清恳绝碉斟酣陋苍邮慕掺损酥定巴Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计6.5.4 6.5.4 窗口事件的处理窗口事件的处理桅蔓媳鲁耳秆单可片弹淳喷甘掂猛价池钻耐盲芳躬拾渡群叉御刑你屠碴锑Java程序
106、的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计 在大多数情况下,人们可能只对其中的在大多数情况下,人们可能只对其中的几种事件感兴趣,而按照几种事件感兴趣,而按照JavaJava语法的规语法的规定,监听器类需要实现接口中的全部方定,监听器类需要实现接口中的全部方法,这样就需要将没有特别操作要求的法,这样就需要将没有特别操作要求的那些事件对应的成员方法体设计为空。那些事件对应的成员方法体设计为空。显然,这会增加程序的复杂性,降低程显然,这会增加程序的复杂性,降低程序的清晰度。为了解决这个问题,序的清晰度。为了解决这个问题,JavaJava提出了适配器(提出了适配器(A
107、dapterAdapter)的概念。所谓)的概念。所谓适配器是指适配器是指JavaJava类库提供的一种实现了类库提供的一种实现了监听器接口的类。监听器接口的类。 痈庚荣楷塞仙淆诵监拌耶仪肾且避醋绞谅闽埂沦舟加棠携讨历舒快锯梆阐Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计public abstract class WindowAdapter implements WindowListener, WindowStateListener, WindowFocusListener public void windowOpened(WindowEvent e
108、) public void windowClosing(WindowEvent e) public void windowClosed(WindowEvent e) public void windowIconified(WindowEvent e) public void windowDeiconified(WindowEvent e) public void windowActivated(WindowEvent e) public void windowDeactivated(WindowEvent e) public void windowStateChanged(WindowEven
109、t e) public void windowGainedFocus(WindowEvent e) public void windowLostFocus(WindowEvent e) 掖沉爬扒痢脊陡畅烦挑杂镀镶邹圃字摹潍撩严到登善片毯念挡崩贬岂嚼音Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计6.5.5 6.5.5 鼠标事件的处理鼠标事件的处理 鼠标事件由鼠标事件由MouseEventMouseEvent类描述。在这个类描述。在这个类中,提供了几个用于获得鼠标信息的类中,提供了几个用于获得鼠标信息的成员方法。成员方法。 int int getX()g
110、etX()、int int getY()getY() 返回发生鼠标返回发生鼠标事件时光标所处的坐标位置。事件时光标所处的坐标位置。 Point Point getPoint()getPoint() 以以PointPoint类型的形式类型的形式返回发生鼠标事件时光标所处的位置。返回发生鼠标事件时光标所处的位置。 int int getClickCount()getClickCount() 返回点击鼠标的次数返回点击鼠标的次数扳桶凝身镜污跨团雕缀卑铝秩茶旋惦赂窥势蠕肉瞒廊占毡涛局疡蛊辅泽芭Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计 与窗口事件不同,鼠标
111、事件被划分成两与窗口事件不同,鼠标事件被划分成两个类别,一类被称为鼠标事件,个类别,一类被称为鼠标事件, 用用MOUSE_EVENT_MASKMOUSE_EVENT_MASK标识;标识; 另一类被称为鼠标移动事件,另一类被称为鼠标移动事件, 用用MOUSE_MOTION_EVENT_MASKMOUSE_MOTION_EVENT_MASK标识。标识。 它们分别对应它们分别对应MouseListenerMouseListener接口和接口和MouseMotionListenerMouseMotionListener接口。接口。 炬牡旨琢允踢喂锥呈仁雷洲坏铡掀寞烩橙郴撞凑翠绕缚郧敛泄介像真军茄Jav
112、a程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计照咖墩俄虑简赂斌字趁志舰揪傻椒询肿夕爱德观颓胀家啸丸拥栖鼓舔赠碌Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计前郁曼荫洛蠢趋搀矮兰莽虹爱衍粱两堆虚乔诧肤集吹簿硷翼疟桃援揖捣辣Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计6.5.6 6.5.6 语义事件的处理语义事件的处理 语义事件是与组件有关的一些事件。例语义事件是与组件有关的一些事件。例如,点击某个按钮组件就会产生如,点击某个按钮组件就会产生ActionEventActionE
113、vent事件;当复选按钮或单选按事件;当复选按钮或单选按钮被选或取消选择时就会发生钮被选或取消选择时就会发生ItemEventItemEvent事件;当拖动滚动条时就发生事件;当拖动滚动条时就发生 AdjustmentEventAdjustmentEvent事件。这事件。这3 3个类别的事个类别的事件分别用件分别用ActionEventActionEvent、ItemEventItemEvent和和AdjustmentEventAdjustmentEvent类描述。类描述。雏动倦湾构柿逃栽瞄熊恨留烙毯酚湘帅姨宏寨漫憨孕垛棉钳材等幕皖菜赔Java程序的设计 第6章 GUI程序的设计Java程序的
114、设计 第6章 GUI程序的设计 实际上,语义事件与低级事件的处理方实际上,语义事件与低级事件的处理方法基本一样,都需要利用相应的接口定法基本一样,都需要利用相应的接口定义监听器类,然后再将监听器注册到相义监听器类,然后再将监听器注册到相应的组件上。应的组件上。豁阀臣假敝蹿潍伸逞假鳞锡辖疑喷所颅一饼涪鸥吸搏坞魔杠灶袜泊弘莉布Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计6.6 6.6 综合应用举例综合应用举例 举例举例:设计一个应用程序,实现简易计算器:设计一个应用程序,实现简易计算器功能。功能。 问题分析问题分析:鉴于简化问题的考虑,简易计算:鉴于简化
115、问题的考虑,简易计算器的功能只限定可以对实数进行器的功能只限定可以对实数进行+ +、- -、* *、/ / 的计算,但需要考虑连续计算的能力。的计算,但需要考虑连续计算的能力。 这个程序主要包括两个部分,一是应用程序这个程序主要包括两个部分,一是应用程序界面;另一个是事件处理。界面;另一个是事件处理。饲茁衰糖抨啡颓燥菌女泛特碳拖油袄烫粤剖嵌茵习懒叉乔滩栏松饲逝蕉魔Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计 设计说明设计说明:在设计应用程序界面时需要:在设计应用程序界面时需要考虑结果显示区域与计算器按钮区域。考虑结果显示区域与计算器按钮区域。结果显示
116、区域可以选用标签组件;计算结果显示区域可以选用标签组件;计算器按钮分为两个类别,一类是简单的数器按钮分为两个类别,一类是简单的数字按钮,一类是具有操作功能的命令按字按钮,一类是具有操作功能的命令按钮。这两个类别的按钮将对应不同的事钮。这两个类别的按钮将对应不同的事件监听器类。处理数字按钮事件的监听件监听器类。处理数字按钮事件的监听器主要进行拼数操作;处理命令按钮事器主要进行拼数操作;处理命令按钮事件的监听器主要进行具体的计算。件的监听器主要进行具体的计算。瞒受颂烩艳饭懒遵浚嫌蛰式丈拯鲍楚略升蜒阿觉记蛤鞍拣隶漱晤孤斯木叔Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GU
117、I程序的设计举例:显示月历举例:显示月历冶弟郝潍唤膊谊蔗浓胀脓鞭坎诡躺冗吠大汁女猾节握谢蛔豪肇戊段恭碟框Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计 问题分析问题分析:本题将根据用户输入的年:本题将根据用户输入的年份、月份,并显示月历。由于,需要份、月份,并显示月历。由于,需要计算某年某月第计算某年某月第1 1天是星期几,所以必天是星期几,所以必须知道一个基准日期。这里,将以须知道一个基准日期。这里,将以20092009年年1 1月月1 1日为基准,因此,要求用日为基准,因此,要求用户选择户选择20092009年年1 1月以后的任何年月。月以后的任何
118、年月。物袒谜瑚骄焕略堵庚晕物仗挝石洗榆戒雷呻梗店雪置汁咕独迹槛愿蘑袁淡Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计 设计说明设计说明:这个程序主要包括:这个程序主要包括4 4个类,一个是个类,一个是描述月历的类;一个是布局月历界面的面板容描述月历的类;一个是布局月历界面的面板容器类;一个是外层窗口类;最后一个是用于检器类;一个是外层窗口类;最后一个是用于检测使用情况的测试类。测使用情况的测试类。 在月历类中,包含显示月历的相关信息,如,在月历类中,包含显示月历的相关信息,如,计算某月总的天数;计算某月第计算某月总的天数;计算某月第1 1天是星期几,天
119、是星期几,最终根据这些信息将控制显示日期的文本存放最终根据这些信息将控制显示日期的文本存放在一个在一个StringString型数组中。型数组中。 在面板容器类中,由于任何一个月份所涉及的在面板容器类中,由于任何一个月份所涉及的星期数最多为六周,所以将界面设计为星期数最多为六周,所以将界面设计为6 6行、行、7 7列,并将年份、月份显示在外层窗口的标题栏列,并将年份、月份显示在外层窗口的标题栏中,将星期日、星期一、中,将星期日、星期一、星期六字样用一、星期六字样用一组标签显示出来,具体日期用按钮显示出来。组标签显示出来,具体日期用按钮显示出来。擂足蒂躺汪君梆闷难蕴舱季牢势欢储赦示敬踪儒巧示驭潍媚膏绸结竭站笛Java程序的设计 第6章 GUI程序的设计Java程序的设计 第6章 GUI程序的设计