第八章图形用户界面(Swing)方案_第1页
第八章图形用户界面(Swing)方案_第2页
第八章图形用户界面(Swing)方案_第3页
第八章图形用户界面(Swing)方案_第4页
第八章图形用户界面(Swing)方案_第5页
已阅读5页,还剩65页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第八章图形用户界面8.1Java的图形用户界面简介8.2基本用户界面8.3组件布局管理器8.4事件处理8.5高级图形用户界面图形用户界面(GUI)是一种方便的人机界面,它通过图形的方式,借助菜单、按钮等图形界面组件和鼠标操作,在用户和计算机之间进行交互。构成GUI的基本要素是组件,组件分为基本的控制组件和容器。组件(component)是构成GUI的基本要素,通过对不同事件的响应来完成和用户的交互或组件之间的交互。组件一般作为一个对象放置在容器(Container)中。容器是能容纳和排列组件的组件,要显示组件,用户必须把它放置在容器里,通过容器的add()方法将组件加入到容器中。容器本身也是组件,因此可以将一个容器添加到另一个容器中实现容器的嵌套。8.1Java的图形用户界面简介Java的GUI功能主要包含在java.awt包和javax.swing包中。Java抽象窗口工具包AWT(AbstractWindowToolkit)是java图形界面的工具箱。其中有一些类不是使用java语言写的,因此并没有达到真正的平台独立。为了实现真正的平台独立,产生了Swing包。Swing完全用Java语言编写,Swing界面在不同的平台上外观完全一样,真正做到了平台独立。Swing提供了更完整的组件,引入了许多新的特性和功能。所有的Swing组件都以J开头,以便与老的AWT组件区分。Swing包定义了顶层容器和其它容器两种类型的组件。JWindow、JFrame、JDialog和JApplet都是顶层容器,它们分别是容器Window、Frame、Dialog和Applet的子类;其它容器是由JComponent组件类派生的子类如JButton、JPanel和JMenu等。顶层容器和其它容器的区别是:它包含一个内容面板,Swing组件可以加入到内容面板里面,但不能直接加入到顶层容器中。ComponentContainerAWT组件(Button等)WindowJComponentPanelJAppletJFrameJWindowJDialogJlabel,Jpanel,Jbutton等AppletFrameDialogAWT、Swing组件的层次继承关系java.awt

包含所有制作用户界面及绘图、图像所需的类

java.awt.color

处理颜色的类

java.awt.datatransfer

提供在应用软件内及其间数据转换所需的类

java.awt.dnd

提供拖(drag)及放(drop)处理

java.awt.event

事件处理

java.awt.font

关于字型的类

java.awt.geom

提供定义及操作2D几何对象所需的Java2D类

java.awt.im

输入方法结构类

java.awt.im.spi

提供界面供开发输入方法,可用于任何执行阶段环境

java.awt.image

图像处理类

java.awt.image.renderable

制造rendering-independent图像所需的类

java.awt.print

处理打印的类

AWT是由下列包所组成的。GUI接口的建立步骤①建立元件:在构造方法中,使用new()方法,通过构造方法的参数进行初始化。同时通过getContentPane获取容器的句柄。②加入容器中:在构造方法中,使用容器句柄.add(元件)将元件加入容器中。③配置版面:在构造方法中,通过容器.setXXX(XXX),元件.setXXX(XXX),JFrame.setXXX(XXX)方法进行版面格式的配置。④处理事件:在构造方法中,使用元件.addXXXListener()加入事件处理器。⑤在构造方法外部定义事件处理器的功能。8.2基本用户界面8.2.1基本用户界面简介8.2.2标签8.2.3按钮8.2.4选项框8.2.5复选框和单选按钮8.2.6列表框8.2.7文本框8.2.8文本区8.2.9滚动条8.2.1基本用户界面简介Swing基本组件都是JComponent类的子类,这些组件可独立存在于Applet和Application中,提供了小巧灵活的交互功能。JComponent类包含了一些方法来设置组件的属性,如:改变背景颜色、定义显示文本的字体等。JComponent的常用方法如下:

方法 作用voidsetBackground(Colorc) 设置组件的背景颜色voidsetForeground(Colorc) 设置组件的前景颜色voidsetFont(Fontf) 设置组件的字体voidisVisible() 检查组件是否可见。组件初始为可见, 但顶层容器JFrame是个例外voidsetVisible(booleanb) 根据参数b的值显示或隐藏组件voidsetEnable(booleanb) 启用或禁止一个组件(默认是可使用状态)voidisEnable 检查该组件是否正显示在容器中voidsetLocation(intx,inty)或 设置组件的左上角位置。若组件为顶层容器,voidsetLocation(Pointp) 使用屏幕坐标;否则使用该容器的坐标PointgetLocation() 获得组件的左上角位置。PointgetLocationOnScreen() 获得组件左上角的位置。该值使用屏幕坐标voidsetSize(intwidth,intheight)或 重新设置组件的大小voidsetSize(Demensiond) DimensiongetSize() 得到组件的当前大小viodsetBounds(intx,inty, 设置组件的大小。x,y设置组件在容器中的坐标,intwidth,intheight) width,height设置组件的宽和高intgetBounds().width 获取组件的宽度intgetBounds().height 获取组件的高度intgetBounds().x 获取组件左上角的x坐标intgetBounds().y 获取组件左上角的y坐标voidremove(Componentc) 移走容器中的组件cvoidremoveAll() 移走容器中的所有组件8.2.2标签(JLabel)

标签是用户不能修改,只能察看的文本显示区域,它主要是显示单行的字符串,起着传递消息的功能。每一个标签用一个JLabel类的对象表示,创建标签的同时应该说明这个标签的字符串。1.创建标签JLabellabel=newJLabel(“”);2.构造函数JLabel(Stringlabel); 构造一个显示内容为label的标签JLabel(Iconicon); 构造一个带有图标的标签JLabel(Stringlabel,intalignment); 构造一个显示字符串label的标签, 并指定它的对齐方式: LEFT(左对齐)

CENTER(居中对齐)

RIGHT(右对齐)JLabel(Stringlabel,Iconicon,intalignment);用于构造一个带有指定文本、图标 和对齐方式的标签3.常用方法

publicintgetAlignment() 返回当前的对齐方式

publicStringgetText() 返回当前显示的内容

publicIcongetIcon() 返回标签的图标

publicvoidsetAlignment(intalignment) 设置对齐方式

publicvoidsetText(Stringlabel) 设置显示的字符串

publicvoidsetIcon(Iconicon) 设置标签的图标4.举例(LabelDemo.java)JApplet是一个顶层容器,Swing组建不能直接加入到JApplet,必须将组建加入到顶层容器的内容面板中。要获得一个内容面板,可使用getContentPane()方法,要设置它的内容面板可使用setContentPane()方法。8.2.3按钮(JButton)

按钮(button)是用来触发特定动作的组件。在Java中提供多种形式的按钮,其中主要是鼠标单击触发的按钮。按钮类JButton直接继承组件类JComponent。1.创建按钮JButtonbutton=newJButton(“”);2.构造函数JButton(); 创建一个没有文本的按钮JButton(Stringlabel); 创建一个有指定文本的按钮JButton(Iconicon); 创建一个有显示图标的按钮JButton(Stringlabel,Iconicon); 创建一个有指定文本和图标的按钮3.常用方法

publicStringgetText() 返回按钮的名字

publicvoidsetText(Stringlabel) 为按钮设置名字

publicIcongetIcon() 返回按钮的图标

publicvoidsetIcon(Iconicon) 为按钮设置图标4.举例(ButtonDemo.java)8.2.4选项框选项框分为复选框(JCheckBox)和单选按钮(JRadioButton),它们都有选中和不选中两种取值,可以通过点击来改变他们的状态。复选框可以让用户作出多项选则。单选按钮是一组按钮,用户只能从中选择一个。它们是具有开关或真假值状态的按钮。1.创建复选框JCheckBoxcheckBox=newJCheckbox();2.构造函数JCheckBox(Strings); 创建一个带有文本标签s的复选框JCheckBox(Strings,booleanb);

创建一个有标签的复选框。若b为true,表示复选框被选中JCheckBox(Iconicon); 创建一个带有图标的复选框JCheckBox(Iconicon,booleanb);

创建一个有图标的复选框。若b为true,表示复选框被选中JCheckBox(Strings,Iconicon);创建一个带有文本标签和图标的复选框JCheckBox(Strings,Iconicon,booleanb);

创建一个有标签和图标的复选框。若b为true,表示复选框被选中3.常用方法

publicbooleanisSelected() 返回复选框的状态

publicvoidsetSelected(booleanstate)

设置复选框的状态4.单选按钮(JRadioButton)单选按钮的用法同复选框。由于单选按钮是在一组按钮中选择一个,所以要对单选按钮分组。为了创造单选按钮组,首先用类ButtonGroup创建按钮组对象,然后用add()方法将单选按钮加入到该按钮组中。5.举例(ChoiceDemo.java)8.2.5组合框(JComboBox)组合框又称下拉列表框,是一个能从列表中选择某个单独项的组件。当用户点击它时,所有选项将被弹出,用户可从中做出选择。组合框分为可编辑和不可编辑的两种,默认为不可编辑,可使用setEditable(true)将其变为可编辑的,用户既可以从列表中选择也可以在附带的文本框中直接输入文本。1.创建组合框首先使用构造方法JComboBox()创建组合框对象,然后调用方法addItem(Object)将表项加入到列表中。8.2.5组合框(JComboBox)2.常用方法voidsetEditable(booleanb)设置组合框的编辑状态(true为可编辑的,false为不可编辑的)voidaddItem(Objectitem)向列表中加入表项itemvoidinsertItemAt(Objectitem,intindex)将表项item插入到列表的指定位置voidremoveItem(Objectitem)从列表中删除表项itemvoidremoveAllItems()删除列表中的所有表项ObjectgetItemAt(intindex)返回指定索引位置的表项的文本intgetItemCount()返回列表中的表项数目intgetSelectedIndex()返回当前选项的索引位置ObjectgetSelectedItem(intindex)返回当前被选中的表项voidsetSelectedIndex(intindex)选中在指定索引位置的表项voidsetSelectedItem(Object)选中列表中的指定表项voidsetMaxinumRowCount(intmax)设置一次能显示出来的列表行数

3.举例(ComboBoxDemo.java)

8.2.6列表框(JList)

列表框(JList)可以使用户选择多个选项,而且列表框的所有选项都是可见的。1.创建列表框建立一个列表框应首先建立一个字符串数组,然后将数组传递给JList构造器:Stringstr[]={“green”,”red”,”blue”};JListlist=newJList(str);

当选项数目超过了列表框的可见区域的时候,列表框的右侧不会出现一个滚动条,不能提供自动滚动条功能。如果希望列表框能滚动,则需要将列表框加入到滚动面板中,滚动面板是能为其它组件提供滚动功能的容器。创建滚动面板可使用如下两种构造方法:JScrollPane(Component):创建一个包含组件的滚动面板,默认情况下,如果组件 没有超出面板本身大小,则滚动条不出现。JScrollPane(Component,int,int):创建一个带有组件、垂直滚动条配置和水平 滚动条配置的滚动面板。可利用如下方法对滚动条进行配置:8.2.6列表框(JList)(1)HORIZONTAL_SCROLLBAR_ALWAYS:水平滚动条始终出现(2)HORIZONTAL_SCROLLBAR_AS_NEEDED:只有需要时,水平滚动条才出现(3)HORIZONTAL_SCROLLBAR_NEVER:水平滚动条不出现(4)VERTICAL_SCROLLBAR_ALWAYS:垂直滚动条始终出现(5)VERTICAL_SCROLLBAR_AS_NEEDED:只有需要时,垂直滚动条才出现(6)VERTICAL_SCROLLBAR_NEVER:垂直滚动条不出现2.常用方法setVisibleRowCount(intn):设置列表框能显示的选项数。默认显示8个选项setSelectionMode(intmode):确定选择方式。参数mode有三种选择方式:

SINGLE:单选

SINGLE_INTERVAL_SELECTION:选一项或某个范围的多个相邻选项

MULTIPLE_INTERVAL_SELECTION:多选ObjectgetSelectedValue():返回选定的值,若选择方式为空,则返回nullgetSelectedValues():返回选定的第一个值。如果选择方式为空,则返回Object[]一个空数组

3.举例(ListDemo.java)8.2.7文本框(JTextField)文本框(JTextField)是单行的文本输入区域。1.创建文本框JTextFieldtextField=newJTextField(“”);2.构造函数JTextField(); 构造一个默认长度的文本框JTextField(intn); 创建一个能容纳n个字符的文本框JTextField(Stringtext); 创建一个带有初始字符串text的文本框JTextField(Stringtext,intn); 创建一个带有初始字符串并且能容纳指定长度的文本框3.常用方法

voidsetEditable(boolean) 指定文本组件是否可编辑

booleanisEditable() 返回文本组件是否可编辑的状态

voidsetText(Stringtext) 设置文本组件的文本内容

StringgetText()

获取文本组件的文本内容

StringgetSelectedText() 获取文本组件被高亮度显示的文本内容4.密码框文本框有一个特殊的子类JPasswordField,称为密码域,即口令文本框。在JPasswordField对象中输入的文本会被其它指定的字符所替代,密码域常用来在Java程序中输入口令。密码域的构造方法为JPasswordField(Stringtext,intn),其中text表示要显示的文本,n表示文本列数。创建一个密码域后可调用方法setEchoChar(char)设置用户输入字符的回显字符(默认为“*”),也可调用getPassword()返回密码域中的文本,存放在一个字符数组中。5.举例(TextFieldDemo.java)8.2.8文本区(JTextArea)文本框只能显示一行内容,有时满足不了程序开发的需要,对于多行或大段文本的显示需要使用Java提供的文本区(JTextArea)来实现。1.创建文本区JTextAreata=newJTextArea();2.构造函数JTextArea(); 创建一个系统默认大小的文本区JTextArea(introw,intcolumns);创建一个指定行数和列数的文本区JTextArea(Stringtext); 创建一个包含初始内容的文本区JTextArea(Stringtext,introw,intcolumns);

创建一个包含初始内容并且指定行数和列数的文本区3.常用方法

publicvoidappend(Stringstr) 在文本区的最后面添加文本

publicintgetRows() 返回文本区的行数

publicvoidsetRowes(introws) 设置文本区的行数

publicintgetColumns() 返回文本区的列数

publicvoidsetColumns(intcolumns) 设置文本区的列数

publicvoidsetLineWarp(booleanb) 设置文本到达组件边界是否转到下一行(默认情况下,若文本区的文本超出显示范围,多余的文本就被剪掉)

publicvoidsetWarpStyleWord(booleanb)若b为true,表示文本到达组件边界时,是从当前单词开始转到下一行;否则从当前字符转到下一行。在Swing中,文本区不含有水平、垂直滚动条。若需要滚动条,则需要将文本区加入到滚动面板中,然后把滚动面板插入到内容面板中。4.举例(TextAreaDemo.java)8.2.9滚动条(JScrollBar)

滚动条(JScrollBar)是一种很直观而简单的控制组件。在Java语言中,它通常有两方面的用处:一方面将它作为滑块使用,根据其所代表的数据完成某些控制;另一方面是直接用它来实现窗口的滚动。创建滚动条时,必须要指定它的方向(垂直VERTICAL或水平HORIZONTAL,其中Java默认VERTICAL)、初始值、可见范围的宽度、最小值和最大值。滚动条的当前值是由getValue()来获取的,该方法返回一个整型数。1.构造方法JScrollBar(intstyle):创建一个指定方向的滚动条,JScrollBar.HORIZONTAL

为水平滚动条,JScrollBar.VERTICAL为垂直滚动条。JScrollBar(intstyle,intinitvalue,intshumbsize,intmin,intmax):五个参数分别表示 方向、初始值、滚动快的大小、最小值和最大值。2.常用方法intgetValue() 获得滚动条的当前值voidsetValue(int) 设置滚动条的当前值3.举例(ScrollBarDemo.java)8.3组件布局管理器用容器的add()方法将组件添加到容器中后,并没有对这些组件的位置进行设置。容器里组件的位置和大小由布局管理器决定,每个容器都有自己的默认布局方式,可通过容器的setLayout()方法重设容器的布局方式。1.顺序布局(FlowLayout)顺序布局是面板JPanel的默认布局方式,将组件从左至右摆放,当一行摆满后就转到下一行继续摆放。当用户对由Flow布局管理的区域进行缩放时,布局就发生变化。

举例(FlowLayoutDemo.java)2.边界布局(BorderLayout)边界布局是顶层容器JWindow、JFrame、JDialog、JApplet的默认布局方式,将容器分为东、南、西、北、中五个区域,这几个区按照“上北下南、左西右东”的分布规律进行布局,组件可以指定自己放在哪个区域。因为只有5个区,所以最多只能容纳5个组件。当窗口缩放时,组件相应的位置不变化,但其大小改变。可用语句setLayout(newBorderLayout());设置容器的布局为边界布局。

voidadd(Strings,Componentcomobj)

其中:s指定组件加入的位置(North,South,East,West,Center) comobj表示要加入的组件。举例(BorderLayoutDemo.java)3.网格布局(GridLayout)网格布局是在一个二维网格中布置组件,须定义行数和列数。网格布局适合于数量较多的组件。向网格中添加组件的顺序是先向第一行第一格中添加第一个组件,然后是第一行第二格等等,第一行全部添加完毕后,开始第二行的添加,以此类推。组件的相应位置不随区域的缩放而改变,只是组件的大小改变。可用下面的语句设置容器的布局为网格布局:setLayout(newGridLayout(introw,intcol));举例(GridLayoutDemo.java)4.网格包布局(GridBagLayout)网格包布局是网格布局的一个扩展,网格布局中所有组件被布局管理器设为默认大小,且大小相同;而网格包布局可排列大小不同的组件,只需指定组件占用的单元即可。

GridBagLayout语句可将容器的布局方式设置为网格包布局,具体步骤如下:(1)创建一个GridBagLayout对象,并调用setLayout方法将该对象指定为布局管理器;(2)创建网格包约束对象GridBagConstraints,此对象用来设定组件在布局中的属性(如位置、大小等);(3)用setConstraint方法将网格包约束条件传给布局管理器,最后添加组件。

setConstraint方法的格式如下:voidsetConstraint(Componentcomp,GridBagConstraintsconstraints)

使用GridBagConstraints时要满足一定的约束条件,主要有:(1)gridx和gridy:指定组件摆放的行和列值。默认值为RELATIVE,表示该组件紧接着上一个摆放,二者都为0表示摆放在左上角。(2)gridwidth和gridheight:指定组件在横向和纵向上占有的网格数。设为常量REMAINDER表示把横向和纵向剩下的方格都分配给该组件。(3)weightx和weighty增量字段:用来设置缩放容器时,各组件分配的宽度和高度的比例数,若希望缩放时组件的大小不变,则将组件的增量设为0。(4)fill和anchor:如果组件分配的空间大于它所需要的空间时,GridBagLayout会根据fill的值调整该组件的大小。fiill是类GridBagConstraints中定义的四个类变量之一:

GridBagConstraints.NONE(默认值)

GridBagConstraints.BOTH(在水平和垂直方向上都扩展)

GridBagConstraints.HORIZONTAL(在水平方向上扩展)GridBagConstraints.VERTICAL(在垂直方向上扩展)如果组件未填充整个网格,通过设置anchor来指定它的位置。取值如下:GridBagConstraints.NORTH、GridBagConstraints.SOUTH、GridBagConstraints.EAST、GridBagConstraints.WEST、GridBagConstraints.NORTHEAST等。(5)ipadx、ipady和insets:ipadx,ipady用来设置面板内各个组件左右和上下间隙大小(以象素为单位)。Insets变量是Insets类的一个实例,用来判断环绕面板本身的间隙大小。类Insets包含了用于顶部、底部、左侧和右侧插入空间的值,这些值用在面板本身的绘制。举例(GridBagLayoutDemo.java)5.卡片布局卡片布局是将容器的组件进行编号,象卡片一样堆放起来,每次只显示一个。通过CardLayout类提供的show()方法可显示指定标号的组件。setLayout(newCardLayout());//设置容器的布局为卡片布局voidadd(Strings,Componentcomobj)

其中s指定组件的编号;comobj表示被加入的组件。show(Objectname,Strings)

其中name为容器对象名;s为组件的编号。举例(CardLayoutDemo.java)6.面板的使用面板(JPanel)是一个容器,组件可以直接添加到面板中,也可以把面板放到另一个更大的面板中实现面板的嵌套,还可以使用方法setContentPane()把面板设为顶层容器的内容面板。使用面板的目的就是为了分层次、分区域管理各种组件,通过各个面板的布局管理器对本身的组件进行管理,达到布局美观合理。举例(PanelDemo.java)7.手工布局在Java中,不但可以使用布局管理器,也可以不使用它而直接手工放置各个组件。举例(NoLayoutDemo.java)8.4事件处理在Java中,程序和用户的交互是通过响应各种事件来实现的。当用户操作GUI组件时会引发各种事件,Java虚拟机就会将事件的消息传递给程序,由程序中的事件处理方法对事件进行处理。系统根据用户的操作构造出相应事件类的对象,如鼠标的移动、单击某按钮、键盘的单击等。Java用Event类的对象来保存和表示事件,当用户在程序的运行过程中引发一个系统可以识别的事件时,系统将自动创建一个Event类的对象来表示这个事件,并在这个对象中保存该事件的相关信息。在Java中采用了委托型事件处理模式,即对象本身没有成员方法来处理事件,而是将事件委托给事件监听者处理,每个事件有一个相应的监听者接口,它规定了能够接收(并处理)该类事件的方法的规范。监听者实现了监听者接口的类,它包含有事件处理程序。每一个AWT对象至少注册一个listener对象,以便处理AWT对象的事件。编程人员要为事件源指定监听者对象(即指定处理某种事件的事件处理程序)。事件的产生者称为事件源。对事件进行处理的类叫做事件监听者。如果希望对事件进行处理,可调用事件源的注册方法把事件监听者注册给事件源,当事件源发生事件时,事件监听者就代替事件源对事件进行处理,这就是委托。委托的方法如下:Source.addxxxListener(EventListener);Java有20多个预定义事件类,它们包含了所有组件上可能发生的事件。每个事件都有一个相应的事件接口,事件接口的事件处理方法完成对事件的处理。因此事件监听者的任务就是要实现相应的事件接口。4.4.1事件监听者

事件监听者是一种处理事件的接口,定义于java.awt.event包中,在此包中也定义了各种事件类。当事件源对象因用户的操作(鼠标或键盘)而产生事件时,系统会自动触发此事件类对象E,并通知所委托之事件监听者A(若来源对象已向A注册),然后事件监听者A中所定义之处理各种事件的方法(事件处理者1~n)便会处理此事件E的各种状况。来源对象向事件监听者A注册事件监听者A事件处理者2事件处理者n事件处理者1用户操作产生事件E4.4.2Java常用事件、事件源、接口和方法事件 事件源事件接口名称 实现方法ActionEvent JButton ActionListener actionPerformed(ActionEvent) JCheckBox JRadioButton JTextField JTextArea JMenuItemListSelectionEventJlist ListSelectionListenervalueChanged()AdjustmentEvent JScrollbar AdjustmentListener adjustmentValueChangedItemEvent JComboBox ItemListener itemStateChanged(ItemEvent)MouseMotionEvent Component MouseMotionListener mouseDragged(MouseEvent) mouseMoved(MouseEvent) mousePressed(MouseEvent) mouseReleased(MouseEvent)MouseEvent Component MouseListener mouseEntered(MouseEvent) mouseExited(MouseEvent) mouseClicked(MouseEvent)FocusEvent Component FocusListener focusGained focusLost

事件 事件源 事件接口名称 实现方法

keyPressed(KeyEvent)KeyEvent Component KeyListener keyReleased(KeyEvent) keyTyped(KeyEvent) windowClosing(WindowEvent) windowOpened(WindowEvent) windowIconified(WindowEvent)WindowEvent JWindow WindowListener windowDeiconified(WindowEvent) windowClosed(WindowEvent) windowActivated(WindowEvent) windowDeactivated(WindowEvent)DocumentEvent JTextField DocumentListener insertUpdate() JTextArea removeUpdate() ChangedUpdate()ComponentEvent Component ComponentListener componentMoved componentHidden componentResized componentShownContainerEvent Container ContainerListener componentAdd componentRemovedgetSource()返回产生事件的对象,该方法适用于所有的事件getActionCommand()获得事件源的命令名称getItemSelectable()返回产生事件的事件源getItem()返回发生事件的项目getAdjustmentType()返回调节类型getValue()返回发生事件的调整值4.4.3事件处理编程范例例1按钮事件的处理例2列表事件处理例3文本区事件处理例4滚动条事件处理例5键盘事件举例例6鼠标事件举例例5键盘事件举例当键盘上的某个按键被按下时,会产生一个KEY_PRESSED事件;当用户释放该键时,会产生KEY_RELEASE事件。键盘事件由KeyListener中的三个方法来处理,分别是:publicvoidkeyPressed(KeyEvente)处理按键按下事件PublicvoidkeyReleased(KeyEvente)处理按键释放事件PublicvoidkeyTyped(KeyEvente)处理按键生成的字符

getKeyChar()方法用来返回用户键入的字符

getKeyCode()方法用来返回键盘事件的虚拟键代码,虚拟键代码通过前缀VK_对应键盘上的按键。举例(keyDemo.java)适配器类

Java语言为许多方法事件接口提供了Adapter(适配器)类,如:MouseAdapter、WindowAdapter、KeyAdapter等。这些Adapter类实现了相应的事件接口,类中的方法是空的,继承Adapter类时,重写所需的方法即可。举例(keyDemo2.java)8.5高级图形用户界面Java的高级图形用户界面组件主要包括窗口、菜单和对话框等,它们可以构成标准GUI应用程序。8.5.1颜色和字体1.颜色常用颜色表颜色常量色彩 RGB值 颜色常量色彩RGB值

black 黑色 (0,0,0) magenta 洋红(255,0,255)blue 蓝色 (0,0,255) orange 橙色(255,200,0)cyan 青色 (0,255,255) pink 粉红(255,17,275)darkGray灰黑 (64,64,64) red 红色(255,0,0)gray 灰色 (128,128,128) white 白色(255,255,255)green 绿色 (0,255,0) yellow 黄色(255,255,0)lightGray浅灰 (192,192,192)(1)构造方法Color(floatr,floatg,floatb)指定三原色R、G、B的浮点值Color(intr,intg,intb) 指定三原色R、G、B的整数值Color(intrgb) 指定一个二进制整数来代表三原色的混合色:

16~23位代表红色

8~15位代表绿色

0~7位代表蓝色。(2)常用方法setColor(Colorc) 设置绘图颜色setBackground(Colorc) 设置背景色setForeground(Colorc) 设置前景色getColor(Colorc) 获取绘图颜色getBackground(Colorc) 获取背景色getForeground(Colorc) 获取前景色2.字体

Java通过Font类处理字体。Font类的构造方法如下:Font(Stringname,intstyle,intsize)其中的三个参数分别代表字体名称、风格、大小。

Java提供了5种逻辑字体:Dialog、SansSerif、Monospaced、Serif和DialogInput,并将它们映射为计算机上的物理字体。如:在Windows系统上,SansSerif对应为Arial。如果使用了计算机不支持的字体,Java将以该计算机的默认字体来代替。设定字体风格的常量:Font.BOLD(加粗)、Font.ITALIC(倾斜)、Font.PLAIN(正常),也可将它们叠加在一起得到组合的效果。字体大小是以点来衡量的,一个点是1/72英寸,可选取整数值。创建字体后,可调用setFont()方法将其设置为当前字体。常用方法:

intgetStyle():返回当前字体的风格的整数值

intgetSize():返回当前字体大小的整数值

StringgetName():返回当前字体名称的字符串

StringgetFamily():返回当前字体家族名称的字符串booleanisPlain():返回当前字体是否是正常字体

booleanisBold():返回当前字体是否是黑体

booleanisItalic():返回当前字体是否是斜体举例(ColorFontDemo.java)8.5.2窗口、框架、对话框窗口(JWindow)、框架(JFrame)、对话框(JDialog)和小应用程序(JApplet)是Swing的四个顶层容器,它们构成图形用户界面的主体,他们不允许直接加入组件。通常情况下,组件被加入到容器的内容面板(contentpane)中。要获得一个内容面板,可使用getContentPane()方法,要设置它的内容面板可使用setContentPane()方法。将组件加入到一个容器的内容面板中,步骤如下:(1)创建一个面板;(2)使用方法add(Component)将组件加入到面板中;(3)用面板作为参数来调用方法setContentPane(Container)。1.窗口(JWindow)窗口能够显示在用户的桌面上,没有标题栏、最大化、最小化和关闭按钮。这种无边框的窗口通常用在程序首次启动和动画程序中,但在图形用户界面中一般不会直接产生JWindow对象,而是使用JFrame类。2.框架(JFrame)框架是一个功能齐全的窗口,它带有标题栏、窗口管理按钮,可在其中添加组件,框架是通过Jframe类生成的,JFrame类的构造方法如下:JFrame() 创建无标题的窗口JFrame(Strings) 创建有标题的窗口框架在创建时是不可见的,需调用方法setVisible(true)或show()设为可见。对应setVisible(false)或hide()设为不可见的。JFrame从基类Frame继承的常用方法如下:setTitle(Strings):设置框架的标题setIconImage(Imageimage):设置框架图标的图像setResizable(Booleanb):设置窗口是否可调整大小(默认可调整)setSize(intwidth,intheight):设置窗口的宽高setBounds(intx,inty,intwidth,intheight):设置窗口的左上角坐标和宽高pack():用紧凑方式显示窗口dispose():关闭窗口并收回创建窗口的系统资源。举例(FrameDemo.java)3.对话框对话框分为有模式和无模式两种。有模式对话框打开后必须做出响应,在处理完之前,用户不能同应用程序的主窗口进行交互,只有用户关闭此对话框后,应用程序才能继续。无模式对话框则可以响应对话框以外的其它事件,无模式对话框打开后,用户能够同时与应用程序窗口进行交互。创建对话框最方便的方法是使用JOptionPane类,这是一些小窗口,用来询问问题、警告用户、提供简单的重要信息等。这些对话框都是有模式对话框,用户不需要创建新的类来表示这些窗口,也不用编写事件处理方法来接收输入,仅需要一条语句就可以建立起多变的对话框,类JOptionPane可用来创建四种标准对话框,如下表所示。标准对话框名称 含义Confirm确认对话框 显示一条信息,并等待用户点击OK按钮Input输入对话框 显示一条信息,要求用户完成一行输入Message消息对话框 显示一条信息,并得到用户的确认Option对话框 显示一条信息,并得到用户在一组选项中的选择

这四种对话框外观布局都有相似之处,左边有一图标,对应对话框信息的类型,下方有一个或多个选项按钮,并且要为用户提供信息。在对话框构造方法重要设置一些参数,来定制所需的对话框,他们共有的参数的功能如下:

Component:该参数指出了对话框从属哪个容器,即该对话框的拥有者,若为null,则以“默认的”窗口为此对话框的拥有者。Object:可以是一个字符串、一个组件或者一个图标对象,如果它是一个字符串,该文本会被显示在对话框中;如果它是一个组件或图标,该对象会被显示出来取代文本信息。往对话框中添加不同的组件,会实现不同的功能。

String:定义标题栏要显示的字符串。

IntmessageType:它描述了对话框的类型,相应的对话框左侧的图标反映了这种类型的不同。有五种类型可选,分别是:ERROR_MESSAGE、INFORMATION_MESSAGE、PLAIN_MESSAGE、QUESTION_MESSAGE或者WARING_MESSAGE,用户也可以提供自己的替代图标。

IntoptionType:它指明了哪种选项按钮被显示出来,用户可以选择四种选项类型中的一种:DEFAULT_OPTION、YES_NO_OPTION、YES_NO_CANCEL_OPTION和OK_CANCEL_OPTION,反映了用户的响应。(1)Confirm确认对话框:有两个构造方法,分别为intshowConfirmDialog(Component,Object)和intshowConfirmDialog(Component,Object,String,int,int)返回值为YES_OPTION、NO_OPTION或CANCEL_OPTION。(2)Input对话框:会询问一个问题,并用一个文本框来存储对它的响应,返回值为一字符串,有两个方法,分别是:StringshowInputDialog(Component,Object)和StringshowInputDialog(Component,Object,String,int)(3)Message对话框:用来显示信息的简单窗口,与其它对话框不同,它不返回任何值,有两种方法,分别是:voidshowMessageDialog(Component,Object)和voidshowMessageDialog(Component,Object,String,int)(4)Option对话框:集成了所有其它对话框的特性。通过如下的方法来构造:showOptionDialog(Component,Object,String,int,int,Icon,Object[],object)

前三个参数表示父组件,要显示的文本、图标或组件,对话框的标题。第四个参数表示对话框的类型,使用类变量YES_NO_OPTION或YES_NO_CANCEL_OPTION。第五个参数描述了对话框的类型,第六个参数表示要显示的一个Icon对象,它代替前一个参数的图标。第七个参数是一个对象数组,在YES_NO_OPTION或YES_NO_CANCEL_OPYION没有使用的情况下(第四个参数为0),存放在对话框中做出选择的组件和其他对象。最后一个参数是在没有使用YES_NO_OPTION或YES_NO_CANCEL_OPTION时设置默认选项。举例(DialogDemo1.java)

除使用JOptionPane显示信息外,还需要经常访问文件系统,文件选择器JFileChooser类提供了从文件系统中进行文件选择的界面。文件选择器实际上并不能打开或保存文件,它只是帮助找到要打开或保存的文件对象,要想真正实现打开或保存,还要使用文件的输入、输出系统。JFileChooser类能够创建有模式文件对话框,分为文件打开对话框和文件关闭对话框,其创建步骤如下:(1)创建一个JFileChooser对象:JFileChooserchooser=newJFileChooser();(2)将文件选择器设为可见,调用showOpenDialog或showSaveDialog来显示对话框:intreturnvalue=choose.showOpenDialog(parent);parent定义了对话框的拥有者,parent为null时,使用默认拥有者。当用户单击确定按钮则返回JFileChooser.APPROVE_OPTION,单击取消按钮则返回JFileChooser.CANCEL_OPTION。

文件对话框的常用方法如下:

chooser.setCurrentDirectory(newFile(*.*)):设置当前目录

chooser.getCurrentDirectory():获取当前目录

chooser.setMultiSelectionEnable(true):允许用户选择多个文件

chooser.setSelectedFile(newFile(filename)):使用默认文件名

Stringfilename=chooser.getSelectedFile():得到选择的一个文件

Stringfilename=chooser.getSelectedFiles

温馨提示

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

评论

0/150

提交评论