第7章图形用户界面的设计与实现

上传人:M****1 文档编号:568583091 上传时间:2024-07-25 格式:PPT 页数:73 大小:534KB
返回 下载 相关 举报
第7章图形用户界面的设计与实现_第1页
第1页 / 共73页
第7章图形用户界面的设计与实现_第2页
第2页 / 共73页
第7章图形用户界面的设计与实现_第3页
第3页 / 共73页
第7章图形用户界面的设计与实现_第4页
第4页 / 共73页
第7章图形用户界面的设计与实现_第5页
第5页 / 共73页
点击查看更多>>
资源描述

《第7章图形用户界面的设计与实现》由会员分享,可在线阅读,更多相关《第7章图形用户界面的设计与实现(73页珍藏版)》请在金锄头文库上搜索。

1、学习导读学习导读 首首先先,我我们们学学习习一一些些基基本本的的图图形形编编程程知知识识,包包括括窗窗口口的的显显示示及及外外观观设设置置、在在窗窗口口中中显显示示文文字和图像等;字和图像等;接接下下来来,介介绍绍Java的的事事件件处处理理机机制制,例例如如如如何何在在程程序序中中接接收收并并处处理理如如键键盘盘按按键键和和鼠鼠标标点点击等击等“事件事件”;最最后后,系系统统地地介介绍绍图图形形用用户户界界面面中中常常用用组组件件的的用用法法,如如布布局局管管理理器器、文文本本框框、复复选选框框、菜单、对话框等。菜单、对话框等。 第七章 图形用户界面的设计与实现 迈复允碴帖鱼椎拯卧贯坊次粳橱

2、肮课约闯知炙固琐视辜坞病银奖襄央井嗡第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现教学重点与难点教学重点与难点:v框架的组成及外观框架的组成及外观v在框架中显示文本和图形在框架中显示文本和图形v字体和颜色的设置字体和颜色的设置vJava的事件处理机制的事件处理机制v窗口事件、焦点事件、键盘事件、鼠标事件窗口事件、焦点事件、键盘事件、鼠标事件的处理的处理vSwing各种组件的用法各种组件的用法魄镶垫综顷龄却扬雨兜菲叁著栏翰唱朔礁斡盯先括泌浦印幼籽罕详统兼科第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现7.1 图形用户界面概述 Java1.0的出现带来了抽象窗口工具箱(

3、AWT)。设计目标是希望构建一个通用的GUI,使得利用它编写的程序能够运行在所有的平台上,以实现Sun公司提出的口号“一次编写,随处运行”。在Java1.2中,Sun公司推出了新的用户界面库:Swing。相对AWT来说,Swing功能更强大、使用更方便,它的出现使得Java的图形用户界面上了一个台阶。但是,Swing并没有代替AWT。在Java1.1中,AWT事件处理模型有了根本改变。Swing使用的仍然是Java1.1的事件处理模型。 层樱产燃友乡漏偶缺总击蛆狈物浩奈罢氛猖柜膝蠢粤它侦舵她拉跌阻逢跋第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现7.2 简单图形用户界面 7.2.

4、1 第一个图形用户界面 在Java中,顶层窗口称为框架。在AWT库中,对应于框架的类是Frame,在Swing库中,相应的类是JFrame。JFrame类扩展了Frame类。大部分AWT组件在Swing中都有等价的组件,它们在表示形式上差一个“J”。框架是一个容器,我们可以在这个容器中放入其他一些图形用户界面组件,如按钮、菜单等,从而组成一个功能完善的程序。 汤懊易陈犬篱钟睦抉竟幌疮直曼悬苔保刊谴叹赵诛聪犯浩烟凯闯蛤库但泡第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现【例7.1】 显示一个空框架 importjavax.swing.*;publicclassFirstFramep

5、ublicstaticvoidmain(Stringargs)SimpleFrameframe=newSimpleFrame();/设置用户关闭框架时的响应动作frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);/显示该框架 frame.show();classSimpleFrameextendsJFramepublicSimpleFrame()/设置框架大小setSize(WIDTH,HEIGHT);publicstaticfinalintWIDTH=300;publicstaticfinalintHEIGHT=200; 运行结果撩旺堵童

6、丹芥藕蓖执饲捣术员斟孝奉翱跨胃橱舍悸心戍痒眺拉某甜炳愧江第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现7.2.2 框架外观 JFrame类的继承层次图 研统雍湾搓问战秤宁郁缓莉谐滨珐密讲慕赏仓俘熊晶浩窝蒙邓阎丑苦割牛第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现Component类是所有GUI对象的祖先,Window类是Frame类的父类,JFrame类直接从Frame继承而来。对于框架外观的操作比较重要的方法如下:vsetIconImage窗口最小化(在Java中称为图标化)时,把一个Image对象用作图标。vsetTitle设置窗口中标题栏的文字。vsetRes

7、izable设置用户是否可以改变框架大小。vdispose方法关闭窗口,并回收该窗口的所有资源。vsetLocation设置组件的位置。vsetBounds重新设置组件的大小和位置。 画虫想樱战司玛苗蛰滇圈悯菌歌撑久麻椒钟塞忍娘窝尘寇巫损蓝沙款黔沼第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现【例7.2】 框架外观的设置 设置具有以下特征的框架:v它的高度和宽度为整个屏幕的1/3; v自定义窗口的标题和图标; v窗口的大小不可变。 程序代码见FrameSizeSet.java。运行结果如下:图标标题最大化按钮失效挚意凉吓安伯妻碉阴刻砷粟精情峨课柠尤势椰崖葡魏她灿轴屯圆啥嚼盛苟第7

8、章图形用户界面的设计与实现第7章图形用户界面的设计与实现7.2.3 在框架中显示信息 JFrame包 含 了 四 个 窗 格 : RootPane、 LayeredPane、GlassPane和ContentPane。如果需要将一些图形用户界面元素加入到框架中,我们需要在面板组件(JPanel)中进行绘制,然后将该面板组件加入到框架的内容窗格(ContentPane)中。相应的代码如下:/得到JFrame的内容窗格对象Container contentPane = getContentPane();Component c = .;/将组件加入到内容窗格中contentPane.add(c);面

9、板JPanel类本身是容器,它可以容纳其他图形用户界面元素,如按钮、菜单等。胸勺武端昂群赋穴邻腾厌庭测鲜灿骂蠢瞬嫂噶狙饰役稚抗驭价阔易抹斟课第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现为了在面板中进行绘制,需要重载JComponent类的paintComponent方法。classMyPanelextendsJpanelpublicvoidpaintComponent(Graphicsg)super.paintComponent(g);./相关的绘制代码paintComponent方法是自动执行的,当窗口需要被重新绘制时,如用户缩放窗口,或还原已最小化的窗口时,系统就会自动调用

10、该方法。在框架中显示文本信息的方法:g.drawString(text, x, y)须遏倪晾棵咕案肥吐膘善男罩鸡飘儡挡师篓斟姓戍京迟括阶俗亚惠柱侥胃第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现【例7.3】 在框架中显示信息 程序代码见HelloWorld .java。运行结果如下:众奉乾洲量拽椭碉落饰巷衷竟项待渴锨卒院盎瘁德氰输默纶毯卢受吕江攀第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现7.2.4 文本和字体 通过Font类对象设置字体。Font StringFont = new Font (“宋体”, Font.ITALIC, 20 ); 字体风格有以下几种选

11、项:vFont.PLAIN/常规vFont.BOLD/加粗vFont.ITALIC/倾斜 不同的系统中安装了不同的字体,为了得到本系统中所有已 安 装 的 字 体 , 我 们 可 以 通 过 GraphicsEnvironment类 的getAvailableFontFamilyNames方法来实现。该方法返回一个字符串数组,数组内包含所有可用的字体名。【例7.4】显示系统中所有字体名。程序见ListFonts.java沼焕悄粘棠精素肇铅肌拈鸵镇澈厢正躲捆美淡饭岳粤璃梭突幸员戌裤晦溃第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现【例7.5】字体设置 采用“宋体”显示字符串“你好,

12、Java!”,字体风格为加粗、倾斜,大小为20点。程序代码见FontSet.java。运行结果如下:聊正遏垂圆泄移荣粒趋辙遁细瑰帐矣殷右浪造挝拒剔记惦焊参酬妇拂膳嘉第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现7.2.5 绘制简单图形 利用Graphics类提供的一些方法进行简单图形的绘制。如:drawLine、drawPolyLine、drawPolygon、drawArc。 drawLine用来画线,调用格式:voiddrawLine(intx1,inty1,intx2,inty2)(x1, y1)和(x2, y2)为线的两个端点。drawPolygon用来绘制多边形,调用格

13、式:voiddrawPolygon(Polygonp)参数是多边形对象Polygon ,先定义Polygon对象,然后将点加入到该对象中,然后利用drawPolygon进行多边形的绘制:Polygonp=newPolygon;p.addPoint(x1,y1);p.addPoint(x2,y2);.g.drawPolygon(p);蓟奎末服店端灰债诊钱汾履汐缉狐杜扼既豪预群椿捷冕茎组媳间孝菲溪童第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现【例7.6】简单图形的绘制 直线,弧,多边形的绘制。程序代码见SimpleDraw.java。运行结果如下:砷蝗秆淤赵碰帽悲溶痰卓渠琴欠敌合劈

14、手晶埋镀臃膳馆证委垦都都眼暂寥第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现Java提供了矩形、圆角矩形、椭圆等基本形状的绘制方法:矩形:voiddrawRect(intx,inty,intwidth,intheight)圆角矩形:voiddrawRoundRect(intx,inty,intwidth,intheight,intarcWidth,intarcHeight) 椭圆:voiddrawOval(intx,inty,intwidth,intheight) Java还提供了方便的填充封闭图形的方法,只需要将前面介绍的方法中的draw改为fill即可。如:voidfillR

15、ect(intx,inty,intwidth,intheight)voidfillRoundRect(intx,inty,intwidth,intheight,intarcWidth,intarcHeight)voidfillOval(intx,inty,intwidth,intheight)互狙奈显恶藏侣静菌韩酮矗忻咖桂昭仗兆颁迪沟紫伦秧暂裹坷瞬樟摊冲伎第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现7.2.6 颜色 Graphics类提供了与颜色相关的方法:getColor返回当前颜色设置。setColor设置当前颜色。setColor方法的调用格式为:void setColo

16、r(Color c) 我们可以选用Color类提供的13种标准颜色的预定义常数,也可以采用Color构建器来创建Color对象:Color(intredness,intgreenness,intblueness)参数redness,greenness,blueness分别表示红、绿、蓝的值,它们的值在0至255范围内。以下是颜色使用的例子:g.setColor(Color.green);g.drawString(“你好!”,100,100);g.setColor(newColor(128,0,128);/自定义颜色g.drawString(“你好!”,100,200);杂伞狸掇虚已簇贫胖地塞第

17、午梳包姥赃萨疹拉秘顿卤怖挝妊卿铁浚罐滴署第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现JFrame类的超类Component类提供的颜色操作的相关方法:setBackground设置背景色。setForeground设置在组件上进行绘制的默认颜色。【例7.7】 颜色设置 设置图形颜色,将框架背景颜色设置为桌面的颜色。程序代码见ColorRect.java。运行结果如下: 韭人宗讳盯础杏蒂司匝爵詹辙碰晴座战公期经肤秸茹凋盂诸黔孪郎睦茨等第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现7.2.7 图像 通过Graphics类提供的drawImage方法实现图像的显示:pu

18、blicvoidpaintComponent(Graphicsg).g.drawImage(image,x,y,null);参数image封装了要显示的图像文件。通过Toolkit类的静态getDefaultToolkit方法,可以读取GIF文件和JPEG文件:Stringname=“test.gif”;Imageimage=Toolkit.getDefaultToolkit().getImage(name);通过以上代码,可以得到一个本地图像文件,如果要在网络上得到一个图像文件,必须使用URL类。相应的代码如下:URLurl=newURL(“http:/ 从本地加载一幅图像,并在窗口的中间显

19、示。程序代码见ImageShow.java。运行结果如下:涡腾血囚疮矿稼纂相伙纷沦烩文铡培睁苯毫风锁匠祥弄猴屋森伟爆籍蕉摘第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现7.3 事件处理 7.3.1 事件处理原理 如果用户在用户界面执行了一个动作,这将导致一个事件的发生。事件是描述发生了什么的对象。在Java中,定义了各种不同类型的事件类,用来描述各种类型的用户操作。事件是由事件源产生的,事件的产生者称为事件源。例如,在Button组件上点击鼠标会产生以这个Button为源的一个事件:ActionEvent。 事件源拥有自己的方法,我们通过它向其注册事件监听器。事件监听器是一个类的

20、实例,这个类实现了一个特殊的接口,称为Lintener interface。当事件源产生了一个事件以后,事件源就会发送通知给相应的事件监听器,监听器对象根据事件对象内封装的信息,决定如何响应这个事件。 茹掌漆剖靡陡汗醒哆传辊膘扼函挨浪椎迁旬抛嚎丢孜躁检总达忆十贯廊浪第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现我们可以通过以下方法来注册监听器对象:eventSourceObject.addEventListener(eventListenerObject);以按钮类对例:MyActionListenerlistener=.;JButtonbutton=newJButton(”提交

21、”);button.addActionListener(listener);监听器对象listener所属的类MyActionListener必须实现相应的接口,以响应事件:publicclassMyActionListenerimplementsActionListener.publicvoidactionPerformed(ActionEventevent)/相应的响应操作淬海隋刷狄氧旺熊治汛辩桨抉玲语恶遭坠乎簇袋呢作走稼往谴缆京薯弧唇第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现7.3.2 处理按钮点击事件 创建按钮:JButtonMyButton=newJButton(“

22、Java”);通过Container类的Add方法,将组件加入到该容器中。classMyPanelextendsJPanelpublicMyPanel()JButtonMyButton=newJButton(“Java”);add(MyButton);为按钮设置监听器。指定的监听器必须实现ActionListener接口的actionPerformed方法:publicvoidactionPerformed(ActionEventevent)奎抓衷咖靖厂规杜渝炯创烩慧园辜猾业福著完惯评戳弟栈罩深钒私瘟傻穴第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现【例7.9】点击按钮 采用内部

23、类ButtonAction充当事件监听器。在面板中放置两个按钮,当用户点击其中一个按钮时,面板中显示对应的操作。例如,如果点击“按钮一”,显示“您点击的是:按钮一” 。程序代码见ButtonClick.java。运行结果如下:贮涪女历渍彩生蛆煤国句盲哎竭杜耽形井但措引铅午逆皖衙尊透谋拔墟腺第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现7.3.3 捕获窗口事件 JFrame对象是窗口事件(WindowEvent)的事件源,我们要指定一个监听器对象:MyWindowListenerlistener=.;frame.addWindowListener(listener);监听器对象要实

24、现WindowListener接口。WindowListener接口中共有七个方法,它们分别对应七个窗口事件:publicinterfaceWindowListenervoidwindowOpened(WindowEvente);voidwindowClosing(WindowEvente);voidwindowClosed(WindowEvente);voidwindowIconified(WindowEvente);voidwindowDeiconified(WindowEvente);voidwindowActivated(WindowEvente);voidwindowDeactiva

25、ted(WindowEvente);隶券鞘吓匪趁等汗呢绽抨兵维甥篡赚伏蠕得都彼芬新川枣值纤策搬捞蓄徽第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现WindowListener接口实现方法一:定义一个类来实现WindowListener接口,在感兴趣的方法中添加我们需要的代码,然后让其他方法为空即可。classQuitWindowimplementsWindowListenerpublicvoidwindowClosing(WindowEvente)System.exit(0);voidwindowOpened(WindowEvente)voidwindowClosed(Windo

26、wEvente)voidwindowIconified(WindowEvente)voidwindowDeiconified(WindowEvente)voidwindowActivated(WindowEvente)voidwindowDeactivated(WindowEvente)满钒性弹赁缉茄雌霸猜疏芥赠淌肘么盾柴幅郝褥袭尔诚啤粮西鱼壬跪厌峰第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现WindowListener接口实现方法二:Java为每个具有多个方法的AWT监听器接口提供了一个适配器类。适配器类实现了监听器接口的所有方法,但是却不做任何实际工作。与WindowLis

27、tener接口对应的WindowAdapter类实现了以上七个空方法,我们只需要通过扩展适配器类来实现我们感兴趣的方法。 classQuitWindowextendsWindowAdapterpublicvoidwindowClosing(WindowEvente)System.exit(0);【例7.11】捕获窗口事件 捕获窗口的关闭事件。程序代码见WindowClosing.java。丢扎鹿抚汇万植曲业欲悍粮土圭似镍颧枝爆苯夏枝罚褪鸭佰卸馒枢斧蓖倔第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现7.3.4 AWT事件层次结构图 AWT事件类的继承关系图讽乎赣早分敷耗蹭请郧栗的钎

28、棵曾壕癌颐务菇抗炼藏驶认姆汽没唆话翟逊第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现AWT将事件分为两类:语义(语义(Semantic)事件)事件ActionEvent:对应按钮点击、菜单选择、列表框选择、在文本域中按回车键等。AdjustmentEvent:用户调整滚动条。ItemEvent:用户从一组选择框或者列表项中进行选择。TextEvent:文本域或者文本框中的内容发生改变。低级(低级(Low-Level)事件)事件ComponentEvent:组件大小改变、移动、显示或者隐藏。KeyEvent:键盘上的一个键被按下或者释放。MouseEvent:鼠标按键被按下、释放、

29、鼠标移动或者拖动。FocusEvent:组件获得焦点或者失去焦点。WindowEvent:窗口被激活、屏蔽、最小化、最大化或关闭。ContainerEvent:添加或者删除一个组件。或颖拟宙期碑迈肌揩稳坤韦蓉梭僻讹莱詹涛析砰竖绽须萍希先泄答器癌废第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现7.3.5 焦点事件 如果某个组件能够接收用户按键,那么该组件就拥有焦点。拥有焦点的组件在显示形式上与其他组件有一些差别:文本域内会显示光标;按钮四周会显示一个由虚线组成的矩形框。可以捕获丢失的焦点事件来进行输入的合法性检查。如果输入不合法,通过调用requestFocus方法把焦点重新移回到

30、该文本域,提示用户重新输入: publicvoidfocusLost(FocusEventevent)/passText为需要进行合法性检查的文本域if(event.getComponent()=passText&!event.isTemporary()/isFormatValid为自定义方法,用户检查合法性if(!isFormatValid(passText.getText()passText.requestFocus();虏秃汁货斤愚眷椿熙脊画猖距瞅择允潜溺日焉罪塌虐咏图冬哮缚垫踊采滋第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现7.3.6 键盘事件 KeyListener接

31、口中有三个方法:publicvoidkeyPressed(KeyEvente)publicvoidkeyReleased(KeyEvente)publicvoidkeyTyped(KeyEvente)Java对于用户按键的处理过程:当前键盘状态为小写状态,要输入一个大写字母“A”,我们的操作过程为:先按住Shift键不放,再按下A键,然后松开。整个过程Java会产生五个事件:按下Shift键:为VK_SHIFT调用keyPressed方法;按下A键:为VK_A调用keyPressed方法;键入字符“A”:为字符“A”调用keyTyped方法;松开A键:为VK_A调用keyReleased方法;

32、松开Shift键:为VK_SHIFT调用keyReleased方法。账巢剂蚀搀浩联麓详篡剃兽直闰试恐哟癌炽酌腮馋暑婴会暮济席仙宫晚蒲第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现【例7.12】捕获键盘事件 用户每次按下键盘上的某个键,程序捕获键盘输入,并显示在面板中,内容包括:虚拟键码、键的名称和字符。例如:当前键盘状态为小写状态,用户按下“A”键,显示的值依次为:65,A,a。 程序代码见KeyPress.java。运行结果如下:勉亩陈揣襄拌顽赚蛔屈鲍阂榴歼麦熟坑历嫁征粕米劲沥联询棺媚咙蟹菜泅第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现7.3.7 鼠标事件 vM

33、ouseListener接口 :mousePressed:鼠标键被按下时调用;mouseReleased:鼠标键被释放时调用;mouseClicked:合并上述两个事件为一次鼠标点击事件。这三个方法的参数是MouseEvent,通过getX和getY方法,能 够 得 到 鼠 标 点 击 时 的 鼠 标 指 针 的 x和 y坐 标 。 通 过getClickCount方法,可以区别是单击操作,还是双击操作。vMouseMotionListener接口 :mouseMoved:鼠标移动;mouseMoved :用户拖动鼠标。 v鼠标指针形状的设置:setCursor(Cursor.getPrede

34、finedCursor(Cursor.HAND_CURSOR); 吵坎饯熊赊蕾柔肚梁该毕琼菠牧意耀沿冒煞似怀闹厄舞信须苟易戎到耐嚣第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现【例7.13】利用鼠标进行绘图 点击窗口中的空白处,得到一张“笑脸”的图像;点击已存在的图像,图像在“笑脸”和“哭脸”之间切换;用鼠标可以对图像进行拖动操作;在窗口左上角,显示当前鼠标光标的位置。程序代码见MouseDraw.java。运行结果如下:霞危服尾祁仇住刹虹盘缨淤枉脓雌禹乐象村琼溶盖耽勤曾遍湛蹭腊己骡脖第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现7.4 Swing组件 7.4.1

35、Swing组件的类继承关系 蘸寥歌吃朵迅彝落鉴侗惊萤摩馒谰诀匹麦票刊盐鹊庙淫特找捧酗苛园化瘩第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现7.4.2布局管理器 在Java中,提供了布局工具以支持用户界面元素的自动定位。容器中的所有组件都由一个布局管理器进行动态管理。 v流布局管理器流布局管理器在一行上水平排列组件,直到该行没有足够的空间为止,然后另起一行继续排列。当用户缩放容器时,布局管理器将进行自动控制,重新排列。我们可以指定流布局管理器的组件排列方式,如居中(默认)、左对齐、右对齐等。如:setLayout(newFlowLayout(FlowLayout.LEFT);/左对

36、齐setLayout(newFlowLayout(FlowLayout.RIGHT);/右对齐setLayout(newFlowLayout(FlowLayout.CENTER);/居中 诀遂渍诞毗紧棉柔芬癸撅具很枚憾裔剧以揣宅领滓砌藉偷珠约靡疲怕橱泳第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现v边界布局管理器边界布局管理器边界布局管理器的布局分为五个位置:CENTER、EAST、WEST、NORTH、SOUTH,我们可以把组件放在这五个位置的任意一个,如果未指定位置,则缺省的位置是CENTER。采用边界管理器进行布局时,四周的组件先被放置,剩余的空间由位于中间的组件占用;当容

37、器的大小改变时,四周组件的厚度不会被改变,而中间组件的大小需要改变。递喷夕骗谦恐秧蠢昏氓憨围豪癌淖坝脏流控锗曙讽憎随沾擦令堡犹锰餐叁第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现【例7.14】 流布局管理器示例 程序代码见FlowLayoutTest.java。运行结果如下:java FlowLayoutTest 10 java FlowLayoutTest 15 绸杀坎帚许可喳独使督泥穿膳摈程缺覆胎盒芥郝嫩邻调话须季们驼掐单嚷第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现【例7.15】边界布局管理器示例 将三个按钮置于南区,而两个文本置于北区。 程序代码见Bord

38、erLayoutTest.java。运行结果如下:返镐公帛陨舶段省含萨暑姻探间樟谴童炼廊什尺郁航购釉停菱堂浇佐辛钢第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现7.4.3 文本组件 Java提供的文本组件:用于单行文本输入的文本域(JTextField)和用于多行输入的文本区(JTextArea)。v获得文本域的内容获得文本域的内容add1 = Integer.parseInt(originText.getText().trim(); v跟踪文本域内容的修改跟踪文本域内容的修改/新建文档监听器DocumentListenerresultListener=newResultList

39、ener();./为第一个文本域安装一个文档监听器originText.getDocument().addDocumentListener(resultListener);当文本发生改变后,下面三个方法之一会被调用:voidinsertUpdate(DocumentEvente)voidremoveUpdate(DocumentEvente)voidchangedUpdate(DocumentEvente) 佯痢鄙瑞辽瑶铸是菠星日悉搂营梨剧陆鼻腋竿蒸渠忆烂守雨烹只财讫菩龄第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现v重新设置文本域的内容重新设置文本域的内容resultText.

40、setText(s); 【例7.16】获取两个文本域的输入并求和,然后显示在第三个文本域中。 程序代码见TextFieldTest.java。运行结果如下:初始状态改变输入波泡辗彭辛落诅舵恃令邑高介教朔陨埋贞疯狼抱直椒缓鬼激操彝殷槐莹醋第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现v密密码码域域JPassworkFieldJPassworkField特殊的文本域,在密码域中输入时,用户的输入并不会真正显示出来,而是显示回显符,如“*”,以防止被他人看见用户输入的密码。 【例7.17】将密码域的输入显示在文本域中 程序代码见PasswordFieldTest.java。运行结果如下

41、:沥含遗契长详去将猫贵泽狂八战赂狞峙图职里喝症穴秧挪隧讯收是登赂溜第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现v文本区组件文本区组件 在一个文本区里,用户可以输入多行文本,多行文本之间的换行可以采用三种方式:1)手动换行。即输入ENTER键,这将在文本中插入换行符“n”。2)通过设置换行属性来避免手动换行,由文本区组件自动处理。textArea.setLineWrap(true);但是这样的设置并没有真正在文本中插入换行符“n”。3)给文本区增加滚动条,这可以通过把文本区插入到一个滚动窗格中来实现。这也是给其他组件添加滚动条的方法。JScrollPanescrollPane=n

42、ewJScrollPane(textArea);澎蟹互稻势上彰摈痊位柒靛统芍炳俊转茫黑南迸凳券山看欣茂伙施锚雷亨第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现【例7.18】文本区的三种显示方式 程序代码见TextAreaTest.java。运行结果如下:佰庙印漱群拱赔醋瓶凤筏酿休景辞惩赐例薯滥彭偷袁稽主农渴谬侈椎上页第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现7.4.4 标签 让我们回头看看前面的示例结果,我们必须记住组件的位置,否则无法分辨出各个组件。对于程序编制者,这还可以解决,但是对于一般用户,就相当困难了。因此,为了在运行时能够识别组件,我们需要标签组件。

43、JLablelabel=newJLabel(“NoWrapArea”,JLabel.LEFT);通过上面的代码我们建立了一个标签对象,其显示的文本是“NoWrapArea”,对齐方式为左对齐。 风波画早造幻季糟九烦隐赤浊印胁庭沼卑泊损瓣坟冬岁突夜监汲誓绸滚珍第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现7.4.5 按钮 为在按钮上显示相应的信息,可以提供初始的文本和图标。loginButton = new JButton(登录, new ImageIcon(login.gif); 当希望按钮对单击动作有所反应时,我们需要为按钮注册一个事件监听器,并且实现这个事件监听器,就可以完成

44、所需要的按钮功能。/注册事件监听器loginButton.addActionListener(newLoginAction();/实现事件监听器privateclassLoginActionimplementsActionListener卜凌昏僧肆珐邢鸟瞳挥纪凸革冕达醛姨啮索狞射弃梅勘曳船善抠冒潘胡彬第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现【例7.19】密码验证示例 当用户输入密码后,按下“登录”按钮,然后我们将密码输入是否正确的结果显示在文本域中。 程序代码见Login.java。运行结果如下:酮沽鬃额冉淤躁淆戮羊涛绿馋烙睛题算概挨贩郴睦碾算恐柞幢倒砷骇粉抡第7章图形用户

45、界面的设计与实现第7章图形用户界面的设计与实现7.4.6 Swing常用的选择类组件 v单选按钮组件单选按钮组件 单选按钮组件是一组互斥按钮,即我们一次只能选择其中的一个选项,选项的选取只需要单击即可。ButtonGroupgroup=newButtonGroup();JRadioButtonbutton1=newJRadioButton(“EAST”,true);.JRadioButtonbutton4=newJRadioButton(“NORTH”,false);为指定单选按钮的初始选项,我们在新建JRadioButton对象时,将其构造器的第二个参数设置为“true”;同时,其他按钮对象

46、的第二个参数被设置为“false”。 遣源婆着簇鲜脂只搞鹅茶茄汽头维碧漾途酉叠秦岩库灰玄椅罗灭绕哨涉绳第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现【例7.20】单选按钮组件示例 通过选择单选按钮中的选项来设置标签组件的内容,由标签组件显示我们的选择。 程序代码见RadioButtonExample.java。运行结果如下:趴娶寇夸漂竿榨凋实狸褐装卖涛乙今诊爪澈挡黔跃粒哉洪丈简厅绞葡睁谣第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现v复选框组件复选框组件复选框组件可以进行多重选择,即我们能够选择其中的多个选项,如果要取消或选取某选项,可以单击此选项。和单选按钮不同,

47、复选框允许用户选择多个选项。我们通过单击复选框来选取该选项,再单击一下,则取消选取。建立复选框组件对象需要使用标签来表明该复选框的含义,标签在复选框构造器里进行设置;对复选框是否被选取可以通过isSelected方法进行状态判断。boldCheck=newJCheckBox(“Bold”);/新建复选框。italicCheck=newJCheckBox(“Italic”);/新建复选框。boldCheck.isSelected();/判断“mathCheck”复选框是否被选定。新农拨掀撤翻枢蜕篆俯趋浓储洼梯横获抹妙拇籽鲸素歼态年涕卖兴证江松第7章图形用户界面的设计与实现第7章图形用户界面的设计

48、与实现【例7.21】复选框组件示例 选择字体风格。 程序代码见CheckBoxExample.java。运行结果如下:滋异掇寨伞搐扑垦抬肇低淄口亥姨羽吟闯脱忙访碘嗜侥菜焦珐夹牧涝矿槐第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现v列表框组件列表框组件 列表框组件允许用户从一个列表中选择一个或多个条目。用户可以从列表框中选择一个或多个条目。建立列表框前,需要指定所显示的列表条目:Stringcourses=“Math”,“English”,“Physics”,“Chemic”,“Biology”,“Politics”;JListcourseList=newJList(courses

49、);如果列表框比较长,而显示屏幕比较小,可以设置列表中显示的行数,同时使用滚动条:courseList.setVisibleRowCount(4);JScrollPanelistScrollPane=newJScrollPane(courseList);选择列表框中的多个条目有两种方式:连续条目选择和间断条目选择。锤忿敬铣企胯郊腰霍着第砷荣伺代士阐侨灌梆十司嗽兜氖盒郁毙绕辩呐驰第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现用户选择列表框条目时,列表框就会产生选择事件。将列表选择监听器ListSelectionListener添加给列表组件,并在该监听器中实现valueChange

50、d方法:courseList.addListSelectionListener(newcourseListener();.privateclasscourseListenerimplementsListSelectionListenerpublicvoidvalueChanged(ListSelectionEventevent).获得用户所选择的列表框条目以及条目所在的索引号需要使用getSelectedValues方法和getSelectedIndices方法:ObjectselectedCourses=courseList.getSelectedValues();intselectedIn

51、dexCourses=courseList.getSelectedIndices();抚嗣倘腾耶妄岳肠劳疫税敛鸳叙珊胶抱篡异莫梯慑鼎呛烬渐纳榨尚凛润渍第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现【例7.22】列表框组件示例 在给定的科目中选择多门课程。程序代码见ListExample.java。运行结果如下:刑振顾汾珠栅你瘪糜霓占污单琢抉蔑圣遭村斌箱虫悯砒仑锭究恃叹捅嘛韩第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现v组合框组件组合框组件 组合框将编辑框和下拉列表框结合起来,使得用户可以在一组预定义的选项中选择一个条目,而且能够修改选项内容。新建一个有内容的组合框

52、既可以象列表框那样指定数组,也可以采用向组合框对象里加入条目的方法。对组合框是否能够被编辑也可以进行设置。/新建组合框。jobsBox=newJComboBox();jobsBox.setEditable(true);/设置组合框是否能够被编辑。jobsBox.addItem(job1);jobsBox.addItem(job2);猾就狭顽幂叶涪刀魔娱巳铝壳阻最历曼旅纽惮仪卿律会废逝瘴礼散衬绝污第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现组合框的内容是可以动态变化的:addItem方法能够把条目添加到列表的末尾;insertItermAt方法将把新条目添加到列表的任何位置;re

53、moveItem方法和removeItemAt方法将能够删除指定条目;removeAllItems方法将删除所有条目:jobsBox.insertItermAt(“job7”,6);/在第7个位置增加“job7”条目。jobsBox.removeItem(“job7”);/删除“job7”条目。jobsBox.removeItemAt(5);/删除第6个条目,即“job6”。jobsBox.removeAllItems();/删除所有条目。棍胃崎趟臻曰宴欲唇刃福包瀑脱卒硒竖糜圣登铣掳黔棒传沪几来噪塌背掳第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现当选择一个条目时,组合框就产生一

54、个事件,对事件的监听需要添加事件监听器,并实现actionPerformed方法:/增加事件监听器。jobsBox.addActionListener(newjobsListener();.privateclassjobsListenerimplementsActionListenerpublicvoidactionPerformed(ActionEventevent).当组合框的选择事件发生时,可以通过getSelectedItem方法来获取当前被选择的条目:ObjectselectedJob=jobsBox.getSelectedItem();包若郝互兜挞起可邱框勉汕萍沈静抠徒顿默设卸萤排

55、骚抗静匈思酱禁蜕它第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现【例7.23】组合框组件示例 应用组合框来进行选择职业。 程序代码见ComboBoxExample.java。运行结果如下:勋还穗蕴杠补杏野烧陋谐犀闰航线迸坯喝撑抠仅直粕庙桨急重遁急身袍收第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现v滑块组件滑块组件 滑块组件一般有一个连续区间和可拖动的滑块,用户可以通过拖动滑块在一个区间范围里进行选择。JSliderageSlider=newJSlider();ageSlider=newJSlider(SwingConstants.VERTICAL,0,120,20

56、);当 滑 块 被 拖 动 时 , 滑 块 的 值 将 发 生 变 化 , 触 发ChangeEvent事 件 。 滑 块 组 件 的 事 件 监 听 器 要 实 现ChangeListener接口,并实现此接口中的stateChanged方法:AgeListenermyAgeListener=newAgeListener();ageSlider.addChangeListener(myAgeListener);privateclassAgeListenerimplementsChangeListenerpublicvoidstateChanged(ChangeEventevent).滑块值发

57、生变化时,使用getValue方法来获得滑块值:myTextField.setText( + sourceSlider.getValue(); 冗条凰哺夫析观撇渴舟抉龙乌戴驼蹭蛊启套聂肠专迅棱忍联圣哥归掂蒋内第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现【例7.24】滑块组件示例 在进行年龄输入时,使用滑块进行直观的选择。 程序代码见SliderExample.java。运行结果如下:肖暑侧蚂鸳偶衣葱非蓟迭膊奉束琉霹颇浑亲渗踪坟啮域受鸣讯蔑窒啥坝晶第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现7.4.7 边界当界面中的组件比较多时,需要从视觉上将组件分隔。通用的办法

58、是为面板设置边界,并将需要分隔的组件添加到该面板中。可选的边界风格包括:低斜面、凸斜面、蚀刻、直线、不光滑、空。创建边界需要调用BorderFactory的静态方法。当需要给边界 增 加 标 题 以 提 示 时 , 可 以 使 用 BorderFactory的createTitledBorder方法:/初始化带标题的空边界。Borderborder=BorderFactory.createEmptyBorder();Bordertitled=BorderFactory.createTitledBorder(border,Bordertypes);当创建好需要的边界后,就可以把边界对象添加到组件

59、中:buttonPanel.setBorder(titled);咆拖晨折纹幌贤驶针混举纯邮些杖运韩缠杜峡恬肥正毙蚜坏赫眺萌容娘柿第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现【例7.25】边界示例 各种边界的不同效果。 程序代码见BorderExample.java。运行结果如下:灭贯厘丛苞承拎旷靠嘿碘枫喇妈席序奉吱蚊倡规妇虏渺扳共铅戈室汉郝务第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现7.4.8菜单以及弹出式菜单 典型的菜单:吹假叹担巩九抿沟兽桐攒画缺蓝愁洋桌犯音炽频质祟浑沪融冗治詹籽喻涨第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现v创建菜单创建

60、菜单 四个步骤:创建菜单栏、创建菜单以及子菜单、创建菜单项,并将菜单项加入到子菜单或菜单中,将子菜单加入到菜单中,将菜单加入到菜单栏中。/(a)创建菜单栏,并将菜单栏加入到框架中。JMenuBarmenuBar=newJMenuBar();setJMenuBar(menuBar);/(b)创建“File”菜单、“Edit”菜单和“View”菜单。JMenufileMenu=newJMenu(File);JMenueditMenu=newJMenu(Edit);JMenuviewMenu=newJMenu(View);/(b)创建子菜单。JMenuoptionMenu=newJMenu(Opti

61、on);枷拉她借牵培损陵榆栅付航裤坚佑休辉挡蜡淳恬必岛楔痛使尊抚公妄兽窑第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现/(c)通过Action对象新建“New”菜单项,并添加事件监听器。newItem=fileMenu.add(newShowAction(New);/(c)通过指定菜单项对象新建“Paste”菜单项。pasteItem=newJMenuItem(Paste,P);/(d)将菜单项加入到子菜单或菜单中,将子菜单加入到菜单中,将菜单加入到菜单栏中。fileMenu.add(newItem);editMenu.add(pasteItem);viewMenu.add(op

62、tionMenu);menuBar.add(fileMenu);menuBar.add(editMenu);menuBar.add(viewMenu);铬凯谈惧嫩悸高冬臃蔗诱逝睛战拉搔座痉余鞠养吐丘抑遮成滩掇哈线姬寂第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现v创建复选框和单选按钮菜单项创建复选框和单选按钮菜单项 和创建一般的菜单项几乎一样,只需要注意一下复选框和单选按钮的不同构造函数以及单选按钮组的构建:/创 建 单 选 按 钮 菜 单 项 “Forward”, 并 将 “Forward”菜 单 项 加 入 到“Search”菜单中。ButtonGroupgroup=newB

63、uttonGroup();forwardItem=newJRadioButtonMenuItem(Forward);group.add(forwardItem);searchMenu.add(forwardItem);/创建复选框菜单项“ToolBar”,并加入到子菜单中。JCheckBoxMenuItemtoolItem=newJCheckBoxMenuItem(ToolBar);optionMenu.add(toolItem);赘敬圾沟铀样薪行纺眷钡诫唁棒逾疯闪揪逻弧框殴降养泛螟滔借载咀樟急第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现v菜单项的使用状态菜单项的使用状态 菜单

64、项能够被选取取决于菜单项的启用和禁用状态:/初始设置“Save”菜单项为禁用状态。saveItem.setEnabled(false);v快捷键和加速器快捷键和加速器 快捷键显示为带有下划线的字母,加速器则显示为菜单项旁边的组合键。:/设置菜单的快捷键。fileMenu.setMnemonic(F);/设置“Exit”菜单项的快捷键为“T”。JMenuItemexitItem=newJMenuItem(Exit,T);/设置“Exit”菜单项的加速器为“CtrlT”。exitItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_T,Inp

65、utEvent.CTRL_MASK);酣纪招毖陈帘狮淋莹疼腹箔鬃吏笺常琶肮用纵裹崖舶愁垫损赦筑辈吕钞概第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现v弹出式菜单弹出式菜单弹出式菜单的创建和菜单的创建基本相同,也需要新建一个弹出式菜单后再加入菜单项。/弹出式菜单。popup=newJPopupMenu();/新建弹出式菜单中的“Cut”菜单项和监听器。cutItemPop=newJMenuItem(Cut,C);popup.add(cutItemPop);粱曼饶煎嘘祁妈培瘤歉薛谁菠淑俞剥评筏嘿嚏僵誊舱品憾趣撩悄抢载陶循第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现【例

66、7.26】菜单示例 菜单的用法。程序代码见MenuExample.java。运行结果如下:黄山潮脱常糠棱诧闹椭岸筐愧逛愚仟嗡赤烹嘻安污煎瓶递幸儡骏瓣驭闸壬第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现7.4.9 对话框对话框分为模式对话框和无模式对话框。模式对话框必须在用户处理完后才允许用户与主窗口继续进行交互。无模式对话框允许用户同时在对话框和程序剩余部分中输入信息。 在Swing中,提供了四种简单的对话框:showMessageDialog:显示一条消息等待用户点击OK;showConfirmDialog:显示一条消息并等待确认;showOptionDialog:显示一条消息

67、并等待用户在一组自定义选项中的选择;showInputDialog:显示一条消息并等待用户的输入。巫寒窍鲤葛澡睛惭氯眠猖瞥挽流爽标褐椅簧疏嘘沿骂耙号导脖茶哀块残胆第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现以showConfirmDialog为例:intselection=JOptionPane.showConfirmDialog(DialogFrame.this,/父窗口Areyousure?,Logout,/消息以及对话框标题JOptionPane.OK_CANCEL_OPTION,/底部按钮类型JOptionPane.WARNING_MESSAGE);/消息类型底 部 按

68、 钮 的 类 型 和 对 话 框 有 密 切 的 关 系 , 对 于showMessageDialog和showInputDialog对话框来说,只能有一 组 标 准 按 钮 , 分 别 是 OK和 OK/CANCEL。 对 于showConfirmDialog,按钮可以包括四种:DEFAULT_OPTION,YES_NO_OPTION,YES_NO_CANCEL_OPTION,OK_CANCEL_OPTION。协年纷梗五鸦饵枉霄山租台墨玫濒探社慰椒结丢爬疥趣轿桩茵敞廊花础最第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现【例7.27】对话框示例 对话框的使用:当单击“退出”按钮时

69、,将弹出对话框,同时原先的框架窗口将不能被激活,必须选择对话框中的一个选项才能够退出对话框。 程序代码见DialogExample.java。运行结果如下:庇汕盖钦汽掉改五氖诱诱码殊怎止钳催缄党痒由酋舜婴试七词滞仇涡尼墙第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现本章小结 通过本章的学习,我们了解了Java的基本图形绘制、事件处理模型和常用的Swing组件的用法。在基本图形绘制中,框架的概念非常重要。我们可以设置框架的外观,输出文本,设置字体和颜色,绘制如矩形等基本图形,显示图像等。事件是描述发生了什么的对象;事件是由事件源产生的,事件的产生者称为事件源;事件源拥有自己的方法,我们通过它向其注册事件监听器。事件监听器是一个类的实例,这个类实现了一个特殊的接口:Lintener interface。当事件源产生了一个事件以后,事件源就会发送通知给相应的事件监听器,监听器对象根据事件对象内封装的信息,决定如何响应这个事件。Swing提供了一整套的GUI组件,包括:布局管理器、文本组件、标签、选择类组件、边界、菜单、对话框等。魁嫌阐蔷塞侍滓乘序骨索鞭孙思量莱押匿览帚止帛闲靡谓溯虏人窄讯航一第7章图形用户界面的设计与实现第7章图形用户界面的设计与实现

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

最新文档


当前位置:首页 > 资格认证/考试 > 自考

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