版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第7章图形用户界面编程前面章节介绍的例子中,输入输出都是通过命令提示符窗口(控制台)来完成的,对程序的使用者而言不美观也不是很友好,从本章开始将介绍如何编写带有图形用户接口(GUI)的Java程序。目前在开发图形用户接口的应用时,使用最多的就是Swing技术。本章将对Swing技术做一个简单的介绍,使读者对Swing的开发有一个基本认识。7.1Swing和AWT的对比Swing是Sun公司推出的第二代图形用户接口工具包,通过Swing可以开发出功能强大、界面优美的客户应用程序。Swing中不但提供了很多功能完善的控件,而且其还具有良好的扩展能力,用Swing来进行交互界面的开发是一件另开发人员非常愉快的工作。Swing从诞生到现在大致经历了如下几个阶段。Swing项目是从1996年年底开始的,在项目开始的同时所有的参与者共同选定了这个名称,目的就是开发一个不依赖于本地系统的图形用户接口工具包。1997年后半年Swing进入测试阶段,并在1998年春随同JDK1.1首次发行,对于JDK1.1之前的版本,是不能使用Swing库的。Swing从首次发行开始,就不断快速地成长,自JDK1.2之后,便被完全集成到了Java的标准类库中,成为Java基础类库(JFC)大家族中的一个重要组成部分。7.1.1Swing与AWT之间的关系AWT中提供的控件数量很有限,远没有Swing丰富,例如Swing中提供的JTable、JTree等高级控件在AWT中就没有。另外,AWT中提供的都是重量级控件,如果编写的程序希望运行在不同的平台上,必须在每一个平台上单独测试,无法真正实现“一次编写,随处运行”。Swing的出现并不是为了替换AWT,而只是提供功能更丰富的开发选择,Swing中使用的事件处理机制就是AWT1.1中提供的。因此实际开发中会同时使用Swing与AWT,但一般控件只采用Swing的,而很多辅助类时常需要使用AWT当中的,特别是在进行事件处理开发时。通过上面的介绍读者应该体会到,Swing与AWT是合作的关系,并不是用Swing取代AWT。7.1.2Swing与AWT的控件的混用建议由于AWT中提供的是重量级控件,是依赖本地系统的对等体实现的,而Swing控件属于轻量级控件,是由纯Java编写的,使用基本图形元素直接在屏幕上绘制,因此在搭建界面时,如果将二者同时使用,就有可能会出现先后遮挡关系不正常的现象。7.2一个简单的图形用户界面程序本小节将介绍一个简单的图形用户界面程序,读者如果不明白部分代码,可以在学习完本章后再复习本小节内容;也可以直接查看本章相关小节进行有针对性地学习。用户界面中添加一个JTextField、JButton,并给JButton添加一个事件,单击按钮改变Text文本框的值。7.3容器类窗口和面板是Swing中,提供用来创建表示图形用户界面的类。该类的对象将被当作容器使用,所有的Swing组件都必须被添加到容器中,才能被显示出来。7.3.1顶级容器概述所有的Swing组件都是抽象类JComponent类的子类。JComponent类是大多数Swing组件的超类,声明了所有JComponent子类共有的属性和方法,例如包含了用于设置组件大小、修改背景颜色、定义字体等一系列的方法。JComponent类(javax.swing包)是Container类的子类。Container类用来管理一组相关的组件,内容面板就是Container类的一个对象。Container类中声名了所有Container子类共有的属性和行为。7.3.2JFrame主窗口JFrame是一个窗口容器组件,与其他的Swing组件不同,JFrame组件不是用纯Java语言所编写的,是一个重量级的组件,其中包含了操作系统中部分GUI的方法。所谓重量级组件,实际上就是说该组件在创建的时候,都会有一个相应的本地计算机中的组件在为它来工作。JFrame是一个窗口容器组件,可以被显示在用户桌面上,同时也是一个框架,在其中,可以添加需要的其他的Swing组件。但需要注意的是:在创建了Swing窗体后,是不能够直接把组件添加到创建的窗体中的,Swing窗体含有一个称为内容面板的容器,组件只能添加到Swing窗体对应的内容面板中。创建Swing窗体对应的内容面板,可以使用Container类中的getContentPane()方法获得内容面板对象。7.3.2JFrame主窗口7.3.3JDialog对话框窗口JDialog是Dialog类的子类,该类所创建的对话框对象也是重量容器。创建的JDialog对象可以用来向用户返回信息,接收用户的输入,实现与用户的交互。但JDialog与JFrame窗口的区别在于:JDialog对象需要依赖于其他的窗口(比如Jframe)而存在,当它所依赖的窗口关闭或最小化的时候,该对话框也随之关闭或最小化;当窗口还原时,对话框窗口也随之还原。对话框分为如下所示的两种模式。响应模式:只让程序响应对话框的内部事件,而对于对话框以外的事件则不予响应;非响应模式:该模式可以让程序响应对话框以外的事情。7.3.3JDialog对话框窗口方法作用StringgetTitle()用于获取对话框窗口的名字voidsetTitle(Strings)用于设置对话框窗口的名字voidsetModal(booleanb)用于设置对话框窗口的模式setSize(int
width,intheight)用于设置对话框窗口的大小voidsetVisible(booleanb)用于设置对话框窗口是否可见7.3.4JPanel面板的使用如果需要创建复杂的GUI程序,就需要将窗口中的每一个组件都放置在精确的位置上,这种情况下就需要一种中间容器:JPanel面板类。因为JPanel类是Container容器的子类,因此JPanel类以及其子类的实例同样是一个容器也是一个组件。窗口中可以由多个面板组成,每一个面板都以特定的布局来排列组件。在一个容器里添加了多个组件后,再将这个容器组件添加到别的容器里,就形成了容器间的嵌套。7.4布局管理器Java语言中,把创建的组件放置到窗口中,需要设置窗口界面的格式,这时候就必须使用布局管理器(layoutmanager)的类,来排列界面上的组件。7.4.1布局管理器的概述当组件被加入到容器中时,由布局管理器排列组件。同时在整个程序编写的过程中,容器内的所有组件,都由布局管理器来进行管理。Java中的布局管理器包括:FlowLayout、GridLayout、BorderLayout、CardLayout和GridBagLayout。当创建好需要的布局管理器后,就可以调用容器的setLayout()方法,来设定该容器的布局方式。在组件加入到容器中之前,若不设定布局管理器方式,则会采用默认的布局管理器:面板的默认布局管理器是FlowLayout;窗口及框架的默认布局管理器是BorderLayout。下面将具体介绍几种主要的布局管理器。7.4.2边框布局BorderLayout边框布局是使用BorderLayout类来创建的。该布局方式会将容器分为五个部分,分别是:东、西、南、北和中央。中央是一个大组件,四周是四个小的组件。7.4.3流动布局FlowLayout流动布局是使用FlowLayout类来创建的。该布局方式是最简单的一种布局管理器,其排列组件的方式是按照:从左到右排列,当组件排列到容器行尾时,会自动换行并继续排列剩下的组件。构造方法作用FlowLayout()用于创建一个FlowLayout流动布局管理器,组件间的间距为零FlowLayout(intalign)根据指定的对齐方式,来创建一个FlowLayout流动布局管理器,其中参数align的取值为LEFT(左对齐)、RIGHT(右对齐)和CENTER(居中)FlowLayout(int
align,int
hgap,int
vgap)根据指定的对齐方式、组件间的水平和垂直间距,来创建一个FlowLayout流动布局管理器,参数hgap来指定水平间距,参数vgap来指定垂直间距7.4.4卡片布局CardLayout卡片布局CardLayout不同于其他的布局,它可以容纳多个组件,同时隐藏了其中一部分组件。用一个形象的比喻,卡片布局CardLayout就像是一副扑克牌,而每一次只能看到最上面的一张。方法作用voidadd(String
s,Containerc)用于将面板或其他组件加入到容器中,字符串参数s用于指定卡片的名称(对该卡片编号),参数c用于指定将被用作卡片容器或组件voidshow(Containerc,Strings)用于显示卡片布局管理器中的每一层卡片,参数c用于指定放置卡片的主容器,字符串参数s用于指定卡片的名称7.4.5网格布局GridLayout网格布局GridLayout管理器,可以将容器划分为若干行与若干列的网格区域,并将组件放置在由行和列组成的网格中。构造方法作用GridLayout()用于建立一个新的GridLayout布局管理器,默认值是1行1列GridLayout(int
rows,intcols)用于建立一个行数为rows、列数为cols的GridLayout布局管理器GridLayout(int
rows,intcols,int
hgap,int
vgap)用于建立一个行数为rows、列数为cols的GridLayout布局管理器,同时设置组件的水平间距为hgap,垂直间距为vgap7.4.6使用绝对定位使用绝对定位的方式来排列容器中的组件,实际上就是设置容器的布局方式为null(空布局)。同时,对于添加到容器中的组件,均调用setBounds(int
x,int
y,int
width,intheight)方法,来设置组件本身在容器中的大小和位置,其中参数x、y用来指定组件在容器中的位置坐标,参数width、height用来指定组件的大小。7.5Java事件处理机制Java语言编写的GUI程序,若要与用户交互,就必须能够接收用户的输入。因此Java中提供了一组事件监听器接口类,来提供处理各类事件需要的方法。Java中包含了多种用于事件监听的接口类,大部分接口类都在java.awt.event包中,主要包括:ActionListener接口类:
FocusListener接口类:ItemListener接口类:
KeyListener接口类:
MouseListener接口类:
MouseMotionListener接口类:
AdjustmentListener接口类:
WindowListener接口类:
7.5.1事件处理模型事件处理模型分为三个部分,包括:事件源、事件对象和事件监听器。事件源是程序与用户交互过程中,由于用户的操作,可能触发事件的组件;事件对象是用来封装已发生事件的信息,用来在事件发生后,对事件作相应的处理;事件监听器则是用来放置在程序中,监听察看特定组件(即事件源)上,是否发生了事件。整个事件监听器工作的流程是:当事件源上发生了事件后,就会被事件监听器所发现,同时通知对应的事件对象,之后事件对象对该事件处理并给予响应。若要使程序能够处理用户界面所触发的事件,就必须在程序中完成三项必须的工作:(1)实现事件监听的接口类;(2)为需要产生事件的组件添加一个事件监听器;(3)为该组件可能会发生的事件,实现一个或一组事件处理方法。7.5.2为组件注册事件给一个事件源组件注册事件监听器,可以调用相应的事件监听器添加方法,语法格式为:eventSourceObject.addEventListener(eventListenerObjectevent);其中eventSourceObject代表事件源组件对象,addEventListener()是对应事件监听器的添加方法,而eventListenerObject型参数event是该事件对应的事件对象。7.6常见的事件处理在这一节中,将介绍几种较常用的事件监听器。并通过具体的例子,来分别说明不同的事件监听器的作用及其使用方法。7.6.1鼠标事件鼠标事件是通过MouseListener接口类来实现,可以用于监听用户单击鼠标左右键、双击鼠标左右键以及鼠标是否进入或离开组件区域的事件。任何组件都可以触发这些事件,并产生一个MouseEvent事件对象。方法作用mouseClicked(MouseEventevent)在鼠标被单击时调用的方法mouseEntered(MouseEventevent)在鼠标进入组件区域时调用的方法mouseExited(MouseEventevent)在鼠标离开组件区域时调用的方法mousePressed(MouseEventevent)在鼠标被按下不放开时调用的方法mouseReleased(MouseEventevent)在鼠标被释放时调用的方法getClickCount()返回一个整数,用于获取鼠标被单击的次数getPoint()返回一个Point对象,指出鼠标单击位置在组件中的(x,y)坐标getX()返回鼠标单击位置的X坐标getY()返回鼠标单击位置的Y坐标7.6.2鼠标移动事件鼠标移动事件是通过MouseMotionListener接口类来实现,可以用于监听鼠标的移动事件,在任意时刻,只要当鼠标移动或拖动,都会触发鼠标移动事件。任何组件都可以触发这些事件,并产生一个MouseEvent事件对象。方法作用mouseDragged(MouseEventevent)在鼠标被拖动时调用的方法mouseMoved(MouseEventevent)在鼠标移动时调用的方法getPoint()返回一个Point对象,指出鼠标单击位置在组件中的(x,y)坐标getX()返回鼠标单击位置的X坐标getY()返回鼠标单击位置的Y坐标7.6.3选项事件选项事件是通过在JCheckBox、JComboBox或JRadioButton等组件上,执行选择或取消操作时,所触发的事件。选项事件通过ItemListener接口类来实现,当选项组件一旦被用户改变了状态,事件监听器就会产生一个ItemEvent事件,若需要确定事件发生在哪个选项上,可以使用getItem()方法,同时还可以使用getStateChange()方法来判断该选项是否被选中。7.6.4窗口事件窗口事件是当用户打开或关闭、最大化或最小化窗口等事件时触发的。任何一个组件都可以触发窗口事件。使用窗口事件需要实现WindowListener接口类,在窗口事件触发时,会产生一个WindowEvent事件对象。方法作用windowActivated(WindowEventevent)窗口激活时调用的方法windowClosed(WindowEventevent)窗口关闭时调用的方法windowClosing(WindowEventevent)窗口关闭后调用的方法windowDeactivated(WindowEventevent)窗口非激活状态时调用windowDeiconified(WindowEventevent)窗口非图标化时调用windowIconified(WindowEventevent)窗口图标化时调用windowOpened(WindowEventevent)窗口打开时调用7.6.5键盘事件当按下或松开键盘上的按键时,会产生键盘事件。KeyListener接口类提供了用于处理键盘事件的方法,在键盘事件触发时,会产生一个KeyEvent事件对象,同时该事件对象中的getKeyCode()方法,可以用来判断按下的是键盘上的哪个按键。方法作用keyPressed(KeyEventevent)在键盘上的按键被按下时调用的方法keyReleased(KeyEventevent)在键盘上的按键被松开时调用的方法keyTyped(KeyEventevent)在点击键盘上的按键,输入一个字符时调用的方法7.7Swing组件创建图形用户界面GUI,就是为了让计算机程序更好地和用户交互。JavaSwing提供了20多种不同的用户界面组件。所有的Swing组件都是从javax.swing.Jcomponent类中派生而来的,从而继承了组件所特有的属性和方法。例如setEnable(booleanb)方法,当组件对象调用该方法并且参数值为true时,组件就会被启用;而当参数值为false时,组件会被禁用,外观也会发生变化。同时组件对象可以调用isEnable()方法来检查组件是否被启用。JavaSwing为每一种组件都提供了事件处理机制,有相应的事件监视器察看组件上是否发生了事件。通过事件处理机制,所编写的程序都可以捕获用户对任何组件的操作,同时予以响应。下面的几节中,将详细介绍Swing中提供的几种常用的组件,以及对应的事件处理机制。7.7.1按钮按钮组件是GUI中最常用到的一种组件了。按钮组件可以捕捉到用户的点击,同时利用按钮事件处理机制响应用户的请求。JButton类是Swing提供的按钮组件,在单击JButton类对象创建的按钮时,会产生一个ActionEvent事件。处理按钮事件的接口ActionListener接口中处理事件的方法actionPerformed(ActionEvente)事件源获得监视器的方法addActionListener()7.7.2文本组件在这一节中,将主要介绍JavaSwing提供的,用于处理文本交互的组件,包括JTextField文本框、JPasswordField密码框、JTextArea文本区域和JLabel标签组件。1.JTextField文本框及JPasswordField密码框2.JTextArea文本区域3.JLabel标签组件7.7.3单选按钮JRadioButton单选按钮JRadioButton,存在选中与未被选中两种状态。一般情况下,JRadioButton单选按钮都会成组出现,每组中的多个单选按钮中,只能选中一个。当一个单选按钮被选中后,该组中其他的单选按钮将会处于未选中状态。因此,单选按钮常用于表示一组互斥的选项。另外,ButtonGroup(javax.swing包中)对象用于维护一组互斥的单选按钮之间的关系,若需要将几个JRadioButton单选按钮作为一组互斥访问,就可以建立一个ButtonGroup对象,同时将这几个JRadioButton单选按钮添加到该对象中。7.7.4复选框JCheckBox复选框JCheckBox,同样存在选中与未被选中两种状态。JCheckBox复选框是带有标签或不带标签的框,被选中时,框中将有一个复选标记,否则为空。构造方法作用JCheckBox()用于建立一个新的JchcekBox组件对象JCheckBox(Iconicon)用于建立一个有图像标签,但没有文字标签的JCheckBox组件对象JCheckBox(Icon
icon,booleanselected)用于建立一个有图像标签,但没有文字标签的JCheckBox组件对象,且设置其初始状态(有无被选取),selected为true则初始被选中,反之未被选中JCheckBox(Stringtext)用于建立一个有文字标签的JCheckBox组件对象JCheckBox(String
text,booleanselected)用于建立一个有文字标签的JcheckBox组件对象,且设置其初始状态(有无被选取),selected为true则初始被选中,反之未被选中JCheckBox(String
text,Iconicon)用于建立一个有文字标签且有图像标签的JcheckBo组件对象,初始状态默认为未被选取JCheckBox(String
text,Icon
icon,booleanselected)用于建立一个有文字标签且有图像标签的JcheckBox组件对象,且设置其初始状态(有无被选取),selected为true则初始被选中,反之未被选中7.7.5下拉列表JComboBox下拉列表JComboBox可以用来提供一列选项,用户可以在下拉列表提供的选项中,进行单项选择。构造方法作用JComboBox()用于建立一个新的JComboBox组件对象JComboBox(ComboBoxModelmodel)使用ListModel对象建立一个新的JComboBox组件对象JComboBox(Object[]items)利用Array对象建立一个新的JComboBox组件对象JComboBox(Vectoritems)利用Vector对象建立一个新的JComboBox组件对象7.7.6滑块JSlider滑块JSlider组件允许用户能够通过划块,来选择某一个范围内的数值。同时划块允许进行连续数值间的选择。构造方法作用JSlider()用于建立一个水平的JSlider组件对象,默认刻度从0-100,初始刻度为50JSlider(BoundedRangeModelm)使用默认模式m建立一个水平的JSlider组件对象JSlider(intorientation):用于建立一个自定义方向的JSlider组件对象,默认刻度从0-100,初始刻度为50JSlider(intmin,intmax)用于建立一个水平方向的JSlider组件对象,自定义刻度,最小值为min、最大值为max,初始刻度为50JSlider(intmin,intmax,intvalue)用于建立一个水平方向的JSlider组件对象,自定义刻度,最小值为min、最大值为max,初始刻度值为valueJSlider(intorientation,intmin,intmax,intvalue):用于建立一个自定义方向orientation,刻度min~max,与刻度初始值value的J
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 饭店海鲜处理方案范本
- 债务重组方案范本
- 画室入股合伙方案范本
- 防水砂浆伸缩缝施工方案
- 煤矿改造加固方案范本
- 塔吊公司组建方案范本
- 食堂配送执行方案范本
- 楼顶混凝土维护方案范本
- 阳光房幕墙工程施工方案
- 深入学习贯彻全国民政工作会议精神
- 《临床检验技术》课件-尿液结晶
- 2025江苏南京市城建集团所属企业职业经理人招聘1人笔试历年参考题库附带答案详解
- 清除河道施工方案(3篇)
- 小颗粒超市机器人课件
- 脱硫脱硝控制系统自动化方案
- 2024-2025学年浙江省宁波市第七中学教育集团八年级下学期期中语文试题
- 5-SJ-20190929095306-001-ZXV10 M9000(V1.2.17)产品描述指导-926309
- 建筑安全监督站培训课件
- 《语文教学技能训练》课件全套 第1-8章 课堂教学语言技能训练- 教学反思技能训练
- 测绘公司安全培训课件
- 消防救援机器人技术应用与发展
评论
0/150
提交评论