1、第八章第八章 图形用户界面图形用户界面8.1 Java的图形用户界面简介的图形用户界面简介8.2 基本用户界面基本用户界面8.3 组件布局管理器组件布局管理器8.4 事件处理事件处理8.5 高级图形用户界面高级图形用户界面 图形用户界面(GUI)是一种方便的人机界面,它通过图形的方式,借助菜单、按钮等图形界面组件和鼠标操作,在用户和计算机之间进行交互。构成GUI的基本要素是组件,组件分为基本的控制组件和容器。组件(component)是构成GUI的基本要素,通过对不同事件的响应来完成和用户的交互或组件之间的交互。组件一般作为一个对象放置在容器(Container)中。容器是能容纳和排列组件的组
2、件,要显示组件,用户必须把它放置在容器里,通过容器的add()方法将组件加入到容器中。容器本身也是组件,因此可以将一个容器添加到另一个容器中实现容器的嵌套。8.1 Java的图形用户界面简介的图形用户界面简介 Java的GUI功能主要包含在java.awt包和javax.swing包中。Java抽象窗口工具包AWT(Abstract Window Toolkit)是java图形界面的工具箱。其中有一些类不是使用java语言写的,因此并没有达到真正的平台独立。为了实现真正的平台独立,产生了Swing包。Swing完全用Java语言编写,Swing界面在不同的平台上外观完全一样,真正做到了平台独立
3、。Swing提供了更完整的组件,引入了许多新的特性和功能。所有的Swing组件都以J开头,以便与老的AWT组件区分。Swing包定义了顶层容器和其它容器两种类型的组件。JWindow、JFrame、JDialog和JApplet都是顶层容器,它们分别是容器Window、Frame、Dialog和Applet的子类;其它容器是由JComponent组件类派生的子类如JButton、JPanel和JMenu等。顶层容器和其它容器的区别是:它包含一个内容面板,Swing组件可以加入到内容面板里面,但不能直接加入到顶层容器中。ComponentContainerAWT组件(Button等)Window
4、JComponentPanelJAppletJFrameJWindowJDialogJlabel,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几何对象所需的Jav
5、a 2D类 java.awt.im 输入方法结构类 java.awt.im.spi 提供界面供开发输入方法,可用于任何执行阶段环境 java.awt.image 图像处理类 java.awt.image.renderable 制造rendering-independent图像所需的类 java.awt.print 处理打印的类 AWT是由下列包所组成的。GUI接口的建立步骤 建立元件:在构造方法中,使用new()方法,通过构造方法的参数进行初始化。同时通过getContentPane获取容器的句柄。加入容器中:在构造方法中,使用容器句柄.add(元件)将元件加入容器中。配置版面:在构造方法中,
6、通过容器.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基本组件都是JComp
7、onent类的子类,这些组件可独立存在于Applet和Application中,提供了小巧灵活的交互功能。JComponent类包含了一些方法来设置组件的属性,如:改变背景颜色、定义显示文本的字体等。JComponent的常用方法如下:方 法 作 用 void setBackground(Color c)设置组件的背景颜色void setForeground(Color c)设置组件的前景颜色void setFont(Font f)设置组件的字体void isVisible()检查组件是否可见。组件初始为可见,但顶层容器JFrame是个例外void setVisible(boolean b)根
8、据参数b的值显示或隐藏组件void setEnable(boolean b)启用或禁止一个组件(默认是可使用状态)void isEnable检查该组件是否正显示在容器中void setLocation(int x,int y)或 设置组件的左上角位置。若组件为顶层容器,void setLocation(Point p)使用屏幕坐标;否则使用该容器的坐标Point getLocation()获得组件的左上角位置。Point getLocationOnScreen()获得组件左上角的位置。该值使用屏幕坐标void setSize(int width,int height)或 重新设置组件的大小vo
9、id setSize(Demension d)Dimension getSize()得到组件的当前大小viod setBounds(int x,int y,设置组件的大小。x,y设置组件在容器中的坐标,int width,int height)width,height设置组件的宽和高int getBounds().width获取组件的宽度int getBounds().height获取组件的高度int getBounds().x获取组件左上角的x坐标int getBounds().y获取组件左上角的y坐标void remove(Component c)移走容器中的组件cvoid removeA
10、ll()移走容器中的所有组件8.2.2 标签标签(JLabel)标签是用户不能修改,只能察看的文本显示区域,它主要是显示单行的字符串,起着传递消息的功能。每一个标签用一个JLabel类的对象表示,创建标签的同时应该说明这个标签的字符串。1.创建标签JLabel label=new JLabel(“”);2.构造函数JLabel(String label);构造一个显示内容为label的标签JLabel(Icon icon);构造一个带有图标的标签JLabel(String label,int alignment);构造一个显示字符串label的标签,并指定它的对齐方式:LEFT(左对齐)CEN
11、TER(居中对齐)RIGHT(右对齐)JLabel(String label,Icon icon,int alignment);用于构造一个带有指定文本、图标 和对齐方式的标签3.常用方法 public int getAlignment()返回当前的对齐方式 public String getText()返回当前显示的内容 public Icon getIcon()返回标签的图标 public void setAlignment(int alignment)设置对齐方式 public void setText(String label)设置显示的字符串 public void setIcon(
12、Icon icon)设置标签的图标4.举例(LabelDemo.java)JApplet是一个顶层容器,Swing组建不能直接加入到JApplet,必须将组建加入到顶层容器的内容面板中。要获得一个内容面板,可使用getContentPane()方法,要设置它的内容面板可使用setContentPane()方法。8.2.3 按钮(按钮(JButton)按钮(button)是用来触发特定动作的组件。在Java中提供多种形式的按钮,其中主要是鼠标单击触发的按钮。按钮类JButton直接继承组件类JComponent。1.创建按钮JButton button=new JButton(“”);2.构造函
13、数JButton();创建一个没有文本的按钮JButton(String label);创建一个有指定文本的按钮JButton(Icon icon);创建一个有显示图标的按钮JButton(String label,Icon icon);创建一个有指定文本和图标的按钮3.常用方法 public String getText()返回按钮的名字 public void setText(String label)为按钮设置名字 public Icon getIcon()返回按钮的图标 public void setIcon(Icon icon)为按钮设置图标4.举例(ButtonDemo.java)
14、8.2.4 选项框选项框 选项框分为复选框(JCheckBox)和单选按钮(JRadioButton),它们都有选中和不选中两种取值,可以通过点击来改变他们的状态。复选框可以让用户作出多项选则。单选按钮是一组按钮,用户只能从中选择一个。它们是具有开关或真假值状态的按钮。1.创建复选框JCheckBox checkBox=new JCheckbox();2.构造函数JCheckBox(String s);创建一个带有文本标签s的复选框JCheckBox(String s,boolean b);创建一个有标签的复选框。若b为true,表示复选框被选中JCheckBox(Icon icon);创建一
15、个带有图标的复选框JCheckBox(Icon icon,boolean b);创建一个有图标的复选框。若b为true,表示复选框被选中JCheckBox(String s,Icon icon);创建一个带有文本标签和图标的复选框JCheckBox(String s,Icon icon,boolean b);创建一个有标签和图标的复选框。若b为true,表示复选框被选中3.常用方法 public boolean isSelected()返回复选框的状态 public void setSelected(boolean state)设置复选框的状态4.单选按钮(JRadioButton)单选按钮的
16、用法同复选框。由于单选按钮是在一组按钮中选择一个,所以要对单选按钮分组。为了创造单选按钮组,首先用类ButtonGroup创建按钮组对象,然后用add()方法将单选按钮加入到该按钮组中。5.举例(ChoiceDemo.java)8.2.5 组合框(组合框(JComboBox)组合框又称下拉列表框,是一个能从列表中选择某个单独项的组件。当用户点击它时,所有选项将被弹出,用户可从中做出选择。组合框分为可编辑和不可编辑的两种,默认为不可编辑,可使用setEditable(true)将其变为可编辑的,用户既可以从列表中选择也可以在附带的文本框中直接输入文本。1.创建组合框 首先使用构造方法JCombo
17、Box()创建组合框对象,然后调用方法addItem(Object)将表项加入到列表中。8.2.5 组合框(组合框(JComboBox)2.常用方法void setEditable(boolean b)设置组合框的编辑状态(true为可编辑的,false为不可编辑的)void addItem(Object item)向列表中加入表项itemvoid insertItemAt(Object item,int index)将表项item插入到列表的指定位置void removeItem(Object item)从列表中删除表项itemvoid removeAllItems()删除列表中的所有表项O
18、bject getItemAt(int index)返回指定索引位置的表项的文本int getItemCount()返回列表中的表项数目int getSelectedIndex()返回当前选项的索引位置Object getSelectedItem(int index)返回当前被选中的表项void setSelectedIndex(int index)选中在指定索引位置的表项void setSelectedItem(Object)选中列表中的指定表项void setMaxinumRowCount(int max)设置一次能显示出来的列表行数3.举例(ComboBoxDemo.java)8.2.6
19、 列表框列表框(JList)列表框(JList)可以使用户选择多个选项,而且列表框的所有选项都是可见的。1.创建列表框 建立一个列表框应首先建立一个字符串数组,然后将数组传递给JList构造器:String str=“green”,”red”,”blue”;JList list=new JList(str);当选项数目超过了列表框的可见区域的时候,列表框的右侧不会出现一个滚动条,不能提供自动滚动条功能。如果希望列表框能滚动,则需要将列表框加入到滚动面板中,滚动面板是能为其它组件提供滚动功能的容器。创建滚动面板可使用如下两种构造方法:JScrollPane(Component):创建一个包含组件
20、的滚动面板,默认情况下,如果组件没有超出面板本身大小,则滚动条不出现。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)VE
21、RTICAL_SCROLLBAR_AS_NEEDED:只有需要时,垂直滚动条才出现(6)VERTICAL_SCROLLBAR_NEVER:垂直滚动条不出现2.常用方法setVisibleRowCount(int n):设置列表框能显示的选项数。默认显示8个选项setSelectionMode(int mode):确定选择方式。参数mode有三种选择方式:SINGLE:单选SINGLE_INTERVAL_SELECTION:选一项或某个范围的多个相邻选项MULTIPLE_INTERVAL_SELECTION:多选Object getSelectedValue():返回选定的值,若选择方式为空,则
22、返回nullgetSelectedValues():返回选定的第一个值。如果选择方式为空,则返回Object一个空数组3.举例(ListDemo.java)8.2.7 文本框(文本框(JTextField)文本框(JTextField)是单行的文本输入区域。1.创建文本框JTextField textField=new JTextField(“”);2.构造函数JTextField();构造一个默认长度的文本框JTextField(int n);创建一个能容纳n个字符的文本框JTextField(String text);创建一个带有初始字符串text的文本框JTextField(String
23、 text,int n);创建一个带有初始字符串并且能容纳指定长度的文本框3.常用方法 void setEditable(boolean)指定文本组件是否可编辑 boolean isEditable()返回文本组件是否可编辑的状态 void setText(String text)设置文本组件的文本内容 String getText()获取文本组件的文本内容 String getSelectedText()获取文本组件被高亮度显示的文本内容4.密码框 文本框有一个特殊的子类JPasswordField,称为密码域,即口令文本框。在JPasswordField对象中输入的文本会被其它指定的字符所
24、替代,密码域常用来在Java程序中输入口令。密码域的构造方法为JPasswordField(String text,int n),其中text表示要显示的文本,n表示文本列数。创建一个密码域后可调用方法setEchoChar(char)设置用户输入字符的回显字符(默认为“*”),也可调用getPassword()返回密码域中的文本,存放在一个字符数组中。5.举例(TextFieldDemo.java)8.2.8 文本区(文本区(JTextArea)文本框只能显示一行内容,有时满足不了程序开发的需要,对于多行或大段文本的显示需要使用Java提供的文本区(JTextArea)来实现。1.创建文本区
25、JTextArea ta=new JTextArea();2.构造函数JTextArea();创建一个系统默认大小的文本区JTextArea(int row,int columns);创建一个指定行数和列数的文本区JTextArea(String text);创建一个包含初始内容的文本区JTextArea(String text,int row,int columns);创建一个包含初始内容并且指定行数和列数的文本区3.常用方法 public void append(String str)在文本区的最后面添加文本 public int getRows()返回文本区的行数 public void
26、 setRowes(int rows)设置文本区的行数 public int getColumns()返回文本区的列数 public void setColumns(int columns)设置文本区的列数 public void setLineWarp(boolean b)设置文本到达组件边界是否转到下一行(默认情况下,若文本区的文本超出显示范围,多余的文本就被剪掉)public void setWarpStyleWord(boolean b)若b为true,表示文本到达组件边界时,是从当前单词开始转到下一行;否则从当前字符转到下一行。在Swing中,文本区不含有水平、垂直滚动条。若需要滚动
27、条,则需要将文本区加入到滚动面板中,然后把滚动面板插入到内容面板中。4.举例(TextAreaDemo.java)8.2.9 滚动条滚动条(JScrollBar)滚动条(JScrollBar)是一种很直观而简单的控制组件。在Java语言中,它通常有两方面的用处:一方面将它作为滑块使用,根据其所代表的数据完成某些控制;另一方面是直接用它来实现窗口的滚动。创建滚动条时,必须要指定它的方向(垂直VERTICAL或水平HORIZONTAL,其中Java默认VERTICAL)、初始值、可见范围的宽度、最小值和最大值。滚动条的当前值是由getValue()来获取的,该方法返回一个整型数。1.构造方法JSc
28、rollBar(int style):创建一个指定方向的滚动条,JScrollBar.HORIZONTAL 为水平滚动条,JScrollBar.VERTICAL为垂直滚动条。JScrollBar(int style,int initvalue,int shumbsize,int min,int max):五个参数分别表示 方向、初始值、滚动快的大小、最小值和最大值。2.常用方法int getValue()获得滚动条的当前值void setValue(int)设置滚动条的当前值3.举例(ScrollBarDemo.java)8.3 组件布局管理器组件布局管理器 用容器的add()方法将组件添加到
29、容器中后,并没有对这些组件的位置进行设置。容器里组件的位置和大小由布局管理器决定,每个容器都有自己的默认布局方式,可通过容器的setLayout()方法重设容器的布局方式。1.顺序布局(FlowLayout)顺序布局是面板JPanel的默认布局方式,将组件从左至右摆放,当一行摆满后就转到下一行继续摆放。当用户对由Flow布局管理的区域进行缩放时,布局就发生变化。举例(FlowLayoutDemo.java)2.边界布局(BorderLayout)边界布局是顶层容器JWindow、JFrame、JDialog、JApplet的默认布局方式,将容器分为东、南、西、北、中五个区域,这几个区按照“上北
30、下南、左西右东”的分布规律进行布局,组件可以指定自己放在哪个区域。因为只有5个区,所以最多只能容纳5个组件。当窗口缩放时,组件相应的位置不变化,但其大小改变。可用语句setLayout(new BorderLayout();设置容器的布局为边界布局。void add(String s,Component comobj)其中:s指定组件加入的位置(North,South,East,West,Center)comobj表示要加入的组件。举例(BorderLayoutDemo.java)3.网格布局(GridLayout)网格布局是在一个二维网格中布置组件,须定义行数和列数。网格布局适合于数量较多的
31、组件。向网格中添加组件的顺序是先向第一行第一格中添加第一个组件,然后是第一行第二格等等,第一行全部添加完毕后,开始第二行的添加,以此类推。组件的相应位置不随区域的缩放而改变,只是组件的大小改变。可用下面的语句设置容器的布局为网格布局:setLayout(new GridLayout(int row,int col);举例(GridLayoutDemo.java)4.网格包布局(GridBagLayout)网格包布局是网格布局的一个扩展,网格布局中所有组件被布局管理器设为默认大小,且大小相同;而网格包布局可排列大小不同的组件,只需指定组件占用的单元即可。GridBagLayout语句可将容器的布
32、局方式设置为网格包布局,具体步骤如下:(1)创建一个GridBagLayout对象,并调用setLayout方法将该对象指定为布局管理器;(2)创建网格包约束对象GridBagConstraints,此对象用来设定组件在布局中的属性(如位置、大小等);(3)用setConstraint方法将网格包约束条件传给布局管理器,最后添加组件。setConstraint方法的格式如下:void setConstraint(Component comp,GridBagConstraints constraints)使用GridBagConstraints时要满足一定的约束条件,主要有:(1)gridx和g
33、ridy:指定组件摆放的行和列值。默认值为RELATIVE,表示该组件紧接着上一个摆放,二者都为0表示摆放在左上角。(2)gridwidth和gridheight:指定组件在横向和纵向上占有的网格数。设为常量REMAINDER表示把横向和纵向剩下的方格都分配给该组件。(3)weightx和weighty增量字段:用来设置缩放容器时,各组件分配的宽度和高度的比例数,若希望缩放时组件的大小不变,则将组件的增量设为0。(4)fill和anchor:如果组件分配的空间大于它所需要的空间时,GridBagLayout会根据fill的值调整该组件的大小。fiill是类GridBagConstraints中
34、定义的四个类变量之一:GridBagConstraints.NONE(默认值)GridBagConstraints.BOTH(在水平和垂直方向上都扩展)GridBagConstraints.HORIZONTAL(在水平方向上扩展)GridBagConstraints.VERTICAL(在垂直方向上扩展)如果组件未填充整个网格,通过设置anchor来指定它的位置。取值如下:GridBagConstraints.NORTH、GridBagConstraints.SOUTH、GridBagConstraints.EAST、GridBagConstraints.WEST、GridBagConstrai
35、nts.NORTHEAST等。(5)ipadx、ipady和insets:ipadx,ipady用来设置面板内各个组件左右和上下间隙大小(以象素为单位)。Insets变量是Insets类的一个实例,用来判断环绕面板本身的间隙大小。类Insets包含了用于顶部、底部、左侧和右侧插入空间的值,这些值用在面板本身的绘制。举例(GridBagLayoutDemo.java)5.卡片布局 卡片布局是将容器的组件进行编号,象卡片一样堆放起来,每次只显示一个。通过CardLayout类提供的show()方法可显示指定标号的组件。setLayout(new CardLayout();/设置容器的布局为卡片布局
36、void add(String s,Component comobj)其中s指定组件的编号;comobj表示被加入的组件。show(Object name,String s)其中name为容器对象名;s为组件的编号。举例(CardLayoutDemo.java)6.面板的使用 面板(JPanel)是一个容器,组件可以直接添加到面板中,也可以把面板放到另一个更大的面板中实现面板的嵌套,还可以使用方法setContentPane()把面板设为顶层容器的内容面板。使用面板的目的就是为了分层次、分区域管理各种组件,通过各个面板的布局管理器对本身的组件进行管理,达到布局美观合理。举例(PanelDemo
37、.java)7.手工布局 在Java中,不但可以使用布局管理器,也可以不使用它而直接手工放置各个组件。举例(NoLayoutDemo.java)8.4 事件处理在Java中,程序和用户的交互是通过响应各种事件来实现的。当用户操作GUI组件时会引发各种事件,Java虚拟机就会将事件的消息传递给程序,由程序中的事件处理方法对事件进行处理。系统根据用户的操作构造出相应事件类的对象,如鼠标的移动、单击某按钮、键盘的单击等。Java用Event类的对象来保存和表示事件,当用户在程序的运行过程中引发一个系统可以识别的事件时,系统将自动创建一个Event类的对象来表示这个事件,并在这个对象中保存该事件的相关
38、信息。在Java中采用了委托型事件处理模式,即对象本身没有成员方法来处理事件,而是将事件委托给事件监听者处理,每个事件有一个相应的监听者接口,它规定了能够接收(并处理)该类事件的方法的规范。监听者实现了监听者接口的类,它包含有事件处理程序。每一个AWT对象至少注册一个listener对象,以便处理AWT对象的事件。编程人员要为事件源指定监听者对象(即指定处理某种事件的事件处理程序)。事件的产生者称为事件源。对事件进行处理的类叫做事件监听者。如果希望对事件进行处理,可调用事件源的注册方法把事件监听者注册给事件源,当事件源发生事件时,事件监听者就代替事件源对事件进行处理,这就是委托。委托的方法如下
39、:Source.addxxxListener(Event Listener);Java有20多个预定义事件类,它们包含了所有组件上可能发生的事件。每个事件都有一个相应的事件接口,事件接口的事件处理方法完成对事件的处理。因此事件监听者的任务就是要实现相应的事件接口。4.4.1 事件监听者 事件监听者是一种处理事件的接口,定义于java.awt.event包中,在此包中也定义了各种事件类。当事件源对象因用户的操作(鼠标或键盘)而产生事件时,系统会自动触发此事件类对象E,并通知所委托之事件监听者A(若来源对象已向A注册),然后事件监听者A中所定义之处理各种事件的方法(事件处理者1n)便会处理此事件E
40、的各种状况。来源对象向事件监听者A注册事件监听者A事件处理者2事件处理者n事件处理者1用户操作产生事件E4.4.2 Java常用事件、事件源、接口和方法常用事件、事件源、接口和方法 事件 事件源 事件接口名称实现方法ActionEvent JButton ActionListener actionPerformed(ActionEvent)JCheckBoxJRadioButton JTextFieldJTextArea JMenuItemListSelectionEvent JlistListSelectionListener valueChanged()AdjustmentEventJSc
41、rollbarAdjustmentListener adjustmentValueChangedItemEventJComboBoxItemListener itemStateChanged(ItemEvent)MouseMotionEventComponentMouseMotionListener mouseDragged(MouseEvent)mouseMoved(MouseEvent)mousePressed(MouseEvent)mouseReleased(MouseEvent)MouseEventComponentMouseListener mouseEntered(MouseEve
42、nt)mouseExited(MouseEvent)mouseClicked(MouseEvent)FocusEventComponentFocusListener focusGained focusLost 事件 事件源事件接口名称 实现方法keyPressed(KeyEvent)KeyEventComponentKeyListenerkeyReleased(KeyEvent)keyTyped(KeyEvent)windowClosing(WindowEvent)windowOpened(WindowEvent)windowIconified(WindowEvent)WindowEventJ
43、WindowWindowListenerwindowDeiconified(WindowEvent)windowClosed(WindowEvent)windowActivated(WindowEvent)windowDeactivated(WindowEvent)DocumentEventJTextFieldDocumentListenerinsertUpdate()JTextArearemoveUpdate()ChangedUpdate()ComponentEventComponentComponentListenercomponentMovedcomponentHiddencompone
44、ntResizedcomponentShownContainerEventContainerContainerListenercomponentAddcomponentRemovedgetSource()返回产生事件的对象,该方法适用于所有的事件getActionCommand()获得事件源的命令名称getItemSelectable()返回产生事件的事件源getItem()返回发生事件的项目getAdjustmentType()返回调节类型getValue()返回发生事件的调整值4.4.3 事件处理编程范例 例1 按钮事件的处理 例2 列表事件处理 例3 文本区事件处理 例4 滚动条事件处理
45、 例5 键盘事件举例 例6 鼠标事件举例例5 键盘事件举例 当键盘上的某个按键被按下时,会产生一个KEY_PRESSED事件;当用户释放该键时,会产生KEY_RELEASE事件。键盘事件由KeyListener中的三个方法来处理,分别是:public void keyPressed(KeyEvent e)处理按键按下事件Public void keyReleased(KeyEvent e)处理按键释放事件Public void keyTyped(KeyEvent e)处理按键生成的字符 getKeyChar()方法用来返回用户键入的字符 getKeyCode()方法用来返回键盘事件的虚拟键代码
46、,虚拟键代码通过前缀VK_对应键盘上的按键。举例(keyDemo.java)适配器类适配器类 Java语言为许多方法事件接口提供了Adapter(适配器)类,如:MouseAdapter、WindowAdapter、KeyAdapter等。这些Adapter类实现了相应的事件接口,类中的方法是空的,继承Adapter类时,重写所需的方法即可。举例(keyDemo2.java)8.5 高级图形用户界面高级图形用户界面 Java的高级图形用户界面组件主要包括窗口、菜单和对话框等,它们可以构成标准GUI应用程序。8.5.1 8.5.1 颜色和字体颜色和字体1.1.颜色颜色常用颜色表颜色常量 色彩RG
47、B值颜色常量 色彩 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(float r,float g,fl
48、oat b)指定三原色R、G、B的浮点值Color(int r,int g,int b)指定三原色R、G、B的整数值Color(int rgb)指定一个二进制整数来代表三原色的混合色:1623位代表红色815位代表绿色07位代表蓝色。(2)常用方法setColor(Color c)设置绘图颜色setBackground(Color c)设置背景色setForeground(Color c)设置前景色getColor(Color c)获取绘图颜色getBackground(Color c)获取背景色getForeground(Color c)获取前景色2.字体字体 Java通过Font类处理字体
49、。Font类的构造方法如下:Font(String name,int style,int size)其中的三个参数分别代表字体名称、风格、大小。Java提供了5种逻辑字体:Dialog、SansSerif、Monospaced、Serif和DialogInput,并将它们映射为计算机上的物理字体。如:在Windows系统上,SansSerif对应为Arial。如果使用了计算机不支持的字体,Java将以该计算机的默认字体来代替。设定字体风格的常量:Font.BOLD(加粗)、Font.ITALIC(倾斜)、Font.PLAIN(正常),也可将它们叠加在一起得到组合的效果。字体大小是以点来衡量的,
50、一个点是1/72英寸,可选取整数值。创建字体后,可调用setFont()方法将其设置为当前字体。常用方法:int getStyle():返回当前字体的风格的整数值 int getSize():返回当前字体大小的整数值 String getName():返回当前字体名称的字符串 String getFamily():返回当前字体家族名称的字符串boolean isPlain():返回当前字体是否是正常字体 boolean isBold():返回当前字体是否是黑体 boolean isItalic():返回当前字体是否是斜体举例(ColorFontDemo.java)8.5.2 8.5.2 窗口、