1、第第7章章 图形用户界面的设计与实现图形用户界面的设计与实现7.1 图形用户界面核心概念图形用户界面核心概念7.2 容器与布局管理容器与布局管理7.3 常用常用GUI标准组件标准组件7.4 鼠标和键盘事件鼠标和键盘事件7.5 菜单的使用菜单的使用7.6 对话框的使用对话框的使用7.1 图形用户界面核心概念图形用户界面核心概念-示例示例 容器容器-可以容纳可以容纳GUI部件(按某种布局)部件(按某种布局)-窗体窗体、面板、面板 部件部件-部署在容器中,实现某种交互。部署在容器中,实现某种交互。-文本框、按纽、标签等文本框、按纽、标签等GUI部件部件 图形用户界面核心概念图形用户界面核心概念 创建
2、窗体创建窗体方法方法1:Frame f=new Frame(“标题标题“)方法方法2:class MyFrame extends Frame .Frame f=new MyFrame(“标题标题“)图形用户界面核心概念图形用户界面核心概念 创建创建GUI部件部件 创建文本框、按钮、标签创建文本框、按钮、标签 TextField x=new TextField(10);Button b=new Button(“ok”);Label dis=new Label(“hint”);图形用户界面核心概念图形用户界面核心概念 布局设置布局设置setLayout(new FlowLayout()加入部件加入
3、部件 add(部件对象部件对象1););add(部件对象部件对象2););.图形用户界面核心概念图形用户界面核心概念 将部件加入窗体容器将部件加入窗体容器 处理事件处理事件事件处理事件处理-委托事件处理模型委托事件处理模型 事件源事件源-发生事件发生事件 事件监听者事件监听者-处理事件处理事件 -符合相应接口要求符合相应接口要求图形用户界面核心概念图形用户界面核心概念事件处理事件处理事件委托处理事件委托处理图图图形用户界面核心概念图形用户界面核心概念事件处理事件处理 委托事件处理委托事件处理-过程过程(1)给)给事件源对象事件源对象注册监听者注册监听者 button.addActionList
4、ener(ActionListener a);(2)给)给监听者监听者编写事件处理代码编写事件处理代码 public void actionPerformed(ActionEvent e)图形用户界面核心概念图形用户界面核心概念事件处理事件处理(1)事件源对象的容器类作为监听者)事件源对象的容器类作为监听者 addActionListener(this);(2)用内嵌类实现)用内嵌类实现 addActionListener(new Process();谁作为监听者合适谁作为监听者合适?-要其要其actionPerformed中方便访问事件处理相关对象中方便访问事件处理相关对象(3)用匿名内嵌类
5、实现)用匿名内嵌类实现 addActionListener(new ActionListener().);图形用户界面核心概念图形用户界面核心概念 演练例子演练例子 编程改变编程改变Applet背景的颜色背景的颜色,在在Applet中安排一个中安排一个按钮,每次点击按钮随机换一种新颜色。按钮,每次点击按钮随机换一种新颜色。图形用户界面核心概念图形用户界面核心概念提示提示:颜色由三色构成颜色由三色构成:red,green,blue (0-255)new Color(red,green,blue)用用setBackground(Color)设置背景设置背景 作业作业 编写一个窗体应用程序,在窗体中
6、安排一个标编写一个窗体应用程序,在窗体中安排一个标签和一个按钮,在标签上显示按钮的点击次数。签和一个按钮,在标签上显示按钮的点击次数。标签初始显示标签初始显示0,以后每点击一次按钮,标签上,以后每点击一次按钮,标签上显示的数值增显示的数值增1。图形用户界面核心概念图形用户界面核心概念区分事件源区分事件源 编写一个窗体应用程序,在窗体中安排两个文编写一个窗体应用程序,在窗体中安排两个文本框,一个标签,两个标记为本框,一个标签,两个标记为“+”和和“*”的按钮,的按钮,从两个文本框输入两个数,从两个文本框输入两个数,点击点击“+”按钮按钮将文本将文本框中两个数进行加法运算,结果显示在标签中框中两个
7、数进行加法运算,结果显示在标签中;点点击击“*”按钮按钮将文本框中两个数进行减法运算,结将文本框中两个数进行减法运算,结果显示在标签中。果显示在标签中。在动作事件处理代码中区分事件源在动作事件处理代码中区分事件源 getSource()用来获取事件源对象。用来获取事件源对象。getActionCommand()结果为字符串,用来获取按钮事件对象的命令名结果为字符串,用来获取按钮事件对象的命令名 -ActionEvent对象提供方法对象提供方法图形用户界面核心概念图形用户界面核心概念事件处理事件处理 关键代码关键代码public void actionPerformed(ActionEvent
8、e)int x1=Integer.parseInt(f1.getText();int x2=Integer.parseInt(f2.getText();if(e.getActionCommand().equals(“+”)res.setText(+(x1+x2);else res.setText(+(x1*x2);7.1.6 关于事件适配器类关于事件适配器类 Java中为那些具有多个方法的监听者接口提供了中为那些具有多个方法的监听者接口提供了事件适配器类,这个类通常命名为事件适配器类,这个类通常命名为XxxAdapter,在该类中以空方法体实现了相应接口的所有方法,在该类中以空方法体实现了相应
9、接口的所有方法,程序员设计可通过继承适配器类来编写监听者类,程序员设计可通过继承适配器类来编写监听者类,在类中只需给出关心的方法,从而减轻工作量。在类中只需给出关心的方法,从而减轻工作量。例例7-3 处理窗体的关闭处理窗体的关闭 import java.awt.*;import java.awt.event.*;import java.applet.*;public class TestFrame extends Applet public void init()new MyFrame();class Demo extends Frame implements ActionListener B
10、utton btn;public Demo()super(MY WINDOWS);btn=new Button(关闭关闭);setLayout(new FlowLayout();add(btn);btn.addActionListener(this);addWindowListener(new closeWin();setSize(300,200);setVisible(true);public static void main(String args)new Demo();例例7-3 处理窗体的关闭处理窗体的关闭 public void actionPerformed(ActionEvent
11、 e)if(e.getActionCommand()=关闭关闭)dispose();class closeWin extends WindowAdapter public void windowClosing(WindowEvent e)Window w=e.getWindow();w.dispose();上机练习上机练习 设有一批英文单词存放在一个数组中,编制设有一批英文单词存放在一个数组中,编制一个图形界面程序浏览单词。在界面中安排一一个图形界面程序浏览单词。在界面中安排一个标签显示单词,另有个标签显示单词,另有“上一个上一个”、“下一个下一个”两个按钮实现单词的前后翻动。两个按钮实现单词
12、的前后翻动。7.2 布局管理布局管理 FlowLayout(流式布局流式布局)BorderLayout(边缘或方位布局边缘或方位布局)GridLayout(网格布局网格布局)CardLayout(卡片式布局卡片式布局)GridBagLayout(网格块布局网格块布局)布局管理布局管理-FlowLayout(流式布局流式布局)-是是Panel的默认布局的默认布局 从上到下、左到右排放,放不下再换至下一行从上到下、左到右排放,放不下再换至下一行 -不会改变控件的大小不会改变控件的大小。按照参数要求安排部件间的纵横间隔纵横间隔和对齐方式对齐方式 public FlowLayout()居中对齐方式,组
13、件纵横间隔5个像素。public FlowLayout(int align,int hgap,int vgap)3个参数分别指定对齐方式、纵、横间距 public FlowLayout(int align)参数规定对齐方式对齐方式,组件纵横间距纵横间距默认5个像素。布局布局管理管理布局管理布局管理-BorderLayout(边缘或方位布局边缘或方位布局)-是是Frame的默认布局的默认布局 将容器内部空间分为东(将容器内部空间分为东(East)、南()、南(South)、西)、西(West)、北()、北(North)、中()、中(Center)五个区域)五个区域 布局布局管理管理BorderL
14、ayout(边缘或方位布局边缘或方位布局)控件的大小随容器大小改变。控件的大小随容器大小改变。按照参数要求安排部件间的纵横间隔纵横间隔和对齐方式对齐方式 public BorderLayout()()各组件之间的纵横间距为各组件之间的纵横间距为0 public BorderLayout(int hgap,int vgap)2个参数分别指定纵、横间距个参数分别指定纵、横间距 加入组件加入组件add(方位名字符串方位名字符串,组件组件)布局管理布局管理GridLayout布局布局 把容器的空间分为若干行乘若干列的网格区域 组件按从左向右,从上到下的次序被加到各单元格中 组件的大小将调整为与单元格大
15、小相同。布局管理布局管理GridLayout构造方法构造方法 public GridLayout()所有组件在一行中。public GridLayout(int rows,int cols)通过参数指定布局的行和列数。public GridLayout(int rows,int cols,int hgaps,int vgaps)指定划分的行列数以及组件间的水平和垂直间距。布局管理布局管理 GridLayout布局布局加入组件加入组件 add(组件名组件名)public void init()this.setLayout(new GridLayout(3,3,10,10);for (int i=
16、1;i=9;i+)this.add(new Button(Button#+i);布局布局管理管理如何布局如何布局?CardLayout布局布局 加入的部件叠成卡片的形式加入的部件叠成卡片的形式 构造方法构造方法 public CardLayout()显示组件将占满整个容器,不留边界不留边界。public CardLayout(int hgap,int vgap)容器边界分别留出水平和垂直间隔,组件占中央。组件加入组件加入 add(字符串字符串,组件名组件名)其中,字符串用来标识卡片名称。布局布局管理管理CardLayout布局布局-卡片翻动卡片翻动 show(容器容器,字符串字符串):显示指定
17、名称的卡片:显示指定名称的卡片 first(容器容器):显示第一块卡片:显示第一块卡片 last(容器容器):显示最后一块卡片:显示最后一块卡片 next(容器容器):显示下一块卡片:显示下一块卡片 布局管理布局管理常常用用GUI标准组件标准组件Component类类(抽象类)抽象类)Color getBackground():获取部件的背景色获取部件的背景色 Font getFont():获取部件的显示字体获取部件的显示字体 Graphics getGraphics():获取部件的获取部件的Graphics属性对象属性对象 void repaint(int x,int y,int width
18、,int height):对部件的特定对部件的特定区域进行重新绘图区域进行重新绘图 void setBackground(Color c):设置部件的背景设置部件的背景 void setEnabled(boolean b):是否让部件功能有效,在无是否让部件功能有效,在无效情况下部件变灰效情况下部件变灰 void setFont(Font f):设置部件的显示字体设置部件的显示字体 void setSize(int width,int height):设置部件的大小设置部件的大小 void setVisible(boolean b):设置部件是否可见设置部件是否可见 void setForeg
19、round(Color c):设置部件的前景色设置部件的前景色 void requestFocus():让部件得到焦点让部件得到焦点 void add(PopupMenu popup):给部件加入弹出菜单:给部件加入弹出菜单 常常用用GUI标准组件标准组件文本框文本框(TextField)文本框只能编辑一行数据文本框只能编辑一行数据构造方法有四种构造方法有四种:TextField():构造一个单行文本输入框。:构造一个单行文本输入框。TextField(int):指定长度的单行文本输入框。:指定长度的单行文本输入框。TextField(String):指定初始内容的单行文本输入框。:指定初始内
20、容的单行文本输入框。TextField(String,int):指定长度、指定初始内容。:指定长度、指定初始内容。常常用用GUI标准组件标准组件 tf1=new TextField();tf2=new TextField(,20);tf3=new TextField(Hello!);tf4=new TextField(Hello,30);常用方法常用方法:setEchoChar(*)设置回显字符设置回显字符 getText():获取输入框中的数据:获取输入框中的数据 setText():往输入框写入数据:往输入框写入数据 isEditable():判断输入框是否可编辑。:判断输入框是否可编辑。
21、文本框文本框(TextField)文本框文本框(TextField)-事件事件 ActionEvent事件事件-在文本框按回车键时引发在文本框按回车键时引发 注册:addActionListener();接口:ActionListener 方法:public void actionPerformed(ActionEvent e)TextEvent事件事件-对文本输入部件数据更改操作对文本输入部件数据更改操作 (添加、修改、删除)(添加、修改、删除)注册:注册:addTextListener()()接口:接口:TextListener方法:方法:public void textValueChan
22、ged(TextEvent e)常常用用GUI标准组件标准组件 练习练习:验证密码域只能输入数字字符验证密码域只能输入数字字符public void textValueChanged(TextEvent e)String s=pass.getText();char last=s.charAt(s.length()-1);if(!Character.isDigit(last)hint.setText(只能是数字,重输:只能是数字,重输:);pass.setText();文本域文本域(TextArea)特点特点1:可以编辑多行文字:可以编辑多行文字 构造方法有四种构造方法有四种:TextArea(
23、):构造一个文本域。TextArea(int,int):构造一个指定长度和宽度的文本域。TextArea(String):构造一个显示指定文字的文本域。TextArea(String,int,int):按指定长度、宽度和默认值构造多行文本域。特点特点2:在已有内容的基础上补充新数据:在已有内容的基础上补充新数据append(String s):将字符串添加到文本域的末尾 insert(String s,int index):将字符串插入到文本域的指定位置 常常用用GUI标准组件标准组件 思考练习思考练习 在图形界面中,安排一个文本框和文本域。将在图形界面中,安排一个文本框和文本域。将文本框键入
24、的字符同时显示在文本域中,也既同文本框键入的字符同时显示在文本域中,也既同步显示。步显示。常常用用GUI标准组件标准组件1.选择事件选择事件(ItemEvent)类类 public ItemSelectable getItemSelectable()public Object getItem()public int getStateChange()返回值:ItemEvent.SELECTED:代表选项被选中。代表选项被选中。ItemEvent.DESELECTED:代表选项被放弃不选。:代表选项被放弃不选。常常用用GUI标准组件标准组件2复选按钮复选按钮(Checkbox)举例举例:Check
25、box backg=new Checkbox(背景色背景色);常用方法常用方法 boolean getState():获取复选按钮的选中状态,返回获取复选按钮的选中状态,返回true代表按钮被选中代表按钮被选中 void setState(boolean value):设置复选按钮的状态,:设置复选按钮的状态,vlaue为为true表示选中。表示选中。事件响应事件响应 itemStateChanged(ItemEvent e)方法方法 通过通过 e.getItemSelectable()获得事件源对象引用获得事件源对象引用 调用调用 getState()获取事件获取事件 源对象的状态。源对象的
26、状态。常常用用GUI标准组件标准组件例例7-11 一个简单的多选题练习程序一个简单的多选题练习程序常常用用GUI标准组件标准组件例例7-8 一个简单的多选题练习程序一个简单的多选题练习程序 import java.awt.*;import java.applet.*;import java.awt.event.*;public class FuXuan extends Applet implements ActionListener String question=Java test question1n A.choice1n B.choice2n C.choice3,Java test qu
27、estion2n A.goodn B.badn C.luck;String ch=A,B,C;String answer=AB,BC;Checkbox cb=new Checkbox3;Label hint;TextArea content;int bh=0;Button ok,next,previous;常常用用GUI标准组件标准组件 public void init()setLayout(new BorderLayout();content=new TextArea(10,50);add(Center,content);content.setText(questionbh);Panel p
28、=new Panel();p.setLayout(new GridLayout(2,1);Panel p1=new Panel();for(int i=0;ich.length;i+)cbi=new Checkbox(chi);p1.add(cbi);常常用用GUI标准组件标准组件 p.add(p1);Panel p2=new Panel();ok=new Button(确定确定);p2.add(ok);hint=new Label(对错提示对错提示);p2.add(hint);next=new Button(下一题下一题);p2.add(next);previous=new Button(上
29、一题上一题);p2.add(previous);p.add(p2);add(South,p);next.addActionListener(this);previous.addActionListener(this);ok.addActionListener(this);常常用用GUI标准组件标准组件public void actionPerformed(ActionEvent e)if(e.getSource()=ok)String s=;for(int i=0;ich.length;i+)if(cbi.getState()s=s+cbi.getLabel();if(s.equals(ans
30、werbh)hint.setText(对对);else hint.setText(错错);例例7-8(续)解答判定续)解答判定 else if(e.getSource()=next)if(bh0)bh-;content.setText(questionbh);例例7-8(续)续)/翻动试题翻动试题常常用用GUI标准组件标准组件3.单选按钮单选按钮(CheckBoxGroup)使用复选框组,可以实现单选框的功能。例如:使用复选框组,可以实现单选框的功能。例如:CheckboxGroup style=new CheckboxGroup();Checkbox p=new Checkbox(普通普通,
31、true,style);Checkbox b=new Checkbox(黑体黑体,false,style);Checkbox i=new Checkbox(斜体斜体,false,style);【注意注意】把把CheckboxGroup加入容器时必须将每个加入容器时必须将每个Checkbox对象逐一加入容器,不能使用对象逐一加入容器,不能使用CheckboxGroup对象一次性加入。对象一次性加入。将按钮组合将按钮组合常常用用GUI标准组件标准组件事件编程处理事件编程处理 每个单选按钮要单独注册监听者每个单选按钮要单独注册监听者 在事件处理代码中通过在事件处理代码中通过CheckboxGroup
32、的对象的的对象的getSelectCheckbox()方法可获取当前被选中的选项方法可获取当前被选中的选项按钮对象,要设置选项按钮按钮对象,要设置选项按钮i为选中状态可通过方为选中状态可通过方法法setSelectedCheckbox(i)。选项按钮的其他方法:选项按钮的其他方法:getLabel()方法可获取选项按钮的标识方法可获取选项按钮的标识 getState()可判选项按钮对象是否选中。可判选项按钮对象是否选中。setState()设置某个单选按钮为选中状态。设置某个单选按钮为选中状态。常常用用GUI标准组件标准组件例例7-9 用单选按钮控制画笔的颜色用单选按钮控制画笔的颜色 impo
33、rt java.awt.*;import java.applet.*;import java.awt.event.*;public class ChangeColor extends Applet implements ItemListener String des=红色红色,兰色兰色,绿色绿色,白色白色,灰色灰色;Color c=Color.red,Color.blue,Color.green,Color.white,Color.gray;Color drawColor=Color.black;常常用用GUI标准组件标准组件public void init()CheckboxGroup st
34、yle=new CheckboxGroup();for(int i=0;ides.length;i+)Checkbox one=new Checkbox(desi,false,style);one.addItemListener(this);add(one);常常用用GUI标准组件标准组件/*根据根据drawColor的颜色绘制文字的颜色绘制文字*/public void paint(Graphics g)g.setColor(drawColor);g.setFont(new Font(变色字变色字,Font.BOLD,24);g.drawString(变色字变色字,80,80);常常用用GU
35、I标准组件标准组件根据选择的按钮设置根据选择的按钮设置drawColor的颜色值的颜色值public void itemStateChanged(ItemEvent e)Checkbox temp=(Checkbox)e.getItemSelectable();for(int i=0;ides.length;i+)if(temp.getLabel()=desi)drawColor=ci;repaint();break;常常用用GUI标准组件标准组件4下拉列表下拉列表(Choice)“多选一多选一”控件控件 下拉列表是作为一个整体加入到容器,各个列表下拉列表是作为一个整体加入到容器,各个列表元素
36、不是独立的操作对象。元素不是独立的操作对象。下拉列表也是产生下拉列表也是产生ItemEvent类的选择事件类的选择事件 对下拉列表的选项值的判定处理有两种方法可供对下拉列表的选项值的判定处理有两种方法可供选择:一种是根据选项在列表中的序号,即通过选择:一种是根据选项在列表中的序号,即通过getSelectedIndex()方法;另一种是通过方法;另一种是通过getSelectItem()方法获取列表项对应的字符串方法获取列表项对应的字符串。常常用用GUI标准组件标准组件相关方法:相关方法:select(int index)和和select(String item):强制将某列表:强制将某列表项
37、定为选中状态;项定为选中状态;add(String item)和和insert(String item,int index):添:添加新元素到列表中加新元素到列表中 remove(int index)和和 remove(String item):删除某个:删除某个列表元素列表元素 removeAll():删除所有元素。:删除所有元素。常常用用GUI标准组件标准组件例例7-10 用下拉列表控制用下拉列表控制Applet的背景变化的背景变化 import java.awt.*;import java.applet.*;import java.awt.event.*;public class Cha
38、ngeColor2 extends Applet implements ItemListener String des=红色红色,兰色兰色,绿色绿色,白色白色,灰色灰色;Color c=Color.red,Color.blue,Color.green,Color.white,Color.gray;public void init()Choice color=new Choice();for(int i=0;ides.length;i+)color.add(desi);color.addItemListener(this);add(color);常常用用GUI标准组件标准组件例例7-10(续)续
39、)public void itemStateChanged(ItemEvent e)Choice temp=(Choice)e.getItemSelectable();for(int i=0;ides.length;i+)if(temp.getSelectedIndex()=i)setBackground(ci);break;常常用用GUI标准组件标准组件5.列表(列表(List)列表与下拉列表的区别有两点:列表与下拉列表的区别有两点:一是列表可以在屏幕上看到一定数目的选择项,一是列表可以在屏幕上看到一定数目的选择项,而下拉列表只能看到一项;而下拉列表只能看到一项;另一点用户可能允另一点用户可
40、能允许同时选择列表中的多项,而下拉列表只能选一许同时选择列表中的多项,而下拉列表只能选一项。项。MyList=new List(4,true);给列表添加选项用给列表添加选项用add方法方法 下拉列表的方法均可用于列表对象,另外,由于下拉列表的方法均可用于列表对象,另外,由于列表支持多选,因此,列表中还提供有列表支持多选,因此,列表中还提供有getSelectItems()方法和方法和getSelectedIndexs()方法方法,它它们返回的均是数组,分别代表哪些选中的选项的们返回的均是数组,分别代表哪些选中的选项的字符串和序号。字符串和序号。常常用用GUI标准组件标准组件列表可以产生两类事
41、件:列表可以产生两类事件:ItemEvent类选择事件,当单击某选项时触发。类选择事件,当单击某选项时触发。ActionEvent类动作事件。当双击某选项触发。类动作事件。当双击某选项触发。值得注意的是,双击事件不能覆盖单击事件,当值得注意的是,双击事件不能覆盖单击事件,当用户双击一个选项时,首先产生双击、然后产生用户双击一个选项时,首先产生双击、然后产生单击。单击。例例7-11 假设有一个发文系统,需要假设有一个发文系统,需要将一份文件发给多个单位将一份文件发给多个单位 import java.applet.*;import java.awt.*;import java.awt.event.
42、*;public class TestList extends Applet implements ActionListener,ItemListener List myList;Label result;String unit=总务处总务处,教务处教务处,工会工会,科研处科研处,信息学院信息学院,机械学院机械学院;public void init()myList=new List(5,true);for(int i=0;iunit.length;i+)myList.add(uniti);add(myList);myList.addActionListener(this);myList.add
43、ItemListener(this);/*响应动作事件响应动作事件*/public void actionPerformed(ActionEvent e)if(e.getSource()=myList)showStatus(您双击了选项您双击了选项+e.getActionCommand();/*响应选择事件响应选择事件*/public void itemStateChanged(ItemEvent e)String sList;String str=;List temp=(List)(e.getItemSelectable();sList=temp.getSelectedItems();for
44、(int i=0;isList.length;i+)str=str+sListi+;showStatus(您选择了选项:您选择了选项:+str);1、创建滚动条、创建滚动条 滚动条按方向分垂直和水平两种。例如,以下代滚动条按方向分垂直和水平两种。例如,以下代码创建一个水平滚动条码创建一个水平滚动条:Scrollbar mySlider=new Scrollbar(Scrollbar.HORIZONTAL,0,1,0,255);有关说明:有关说明:(1)第)第1个参数为常量,代表水平滚动条,如果是个参数为常量,代表水平滚动条,如果是垂直滚动条,则为垂直滚动条,则为Scrollbar.VERTIC
45、AL;(2)第)第2个参数代表为初始值;个参数代表为初始值;(3)第)第3个参数代表滚动条的滑块长度;个参数代表滚动条的滑块长度;(4)第)第4、5个参数分别代表滚动条的最小和最大值,个参数分别代表滚动条的最小和最大值,由于滚动条滑块要占一定宽度,所以滚动条的实由于滚动条滑块要占一定宽度,所以滚动条的实际最大值际最大值=最大值最大值-滑块长度。滑块长度。2、滚动条的事件处理、滚动条的事件处理 AdjustmentEvent(调整值变化事件调整值变化事件)是在滚动条滑是在滚动条滑块移动时引发。在滚动条上可通过多种操作来改块移动时引发。在滚动条上可通过多种操作来改变其滑块位置,例如:用户可以拖动滚
46、动条的滑变其滑块位置,例如:用户可以拖动滚动条的滑块,点击块增量区或上、下三角按钮均会导致滑块,点击块增量区或上、下三角按钮均会导致滑块的变化,而且移动的步长不同,按块的变化,而且移动的步长不同,按Page Up和和Page Down键也相当于点击滚动条的块增量区键也相当于点击滚动条的块增量区 使用使用addAdjustmentListener()方法给滚动条注()方法给滚动条注册监听者,监听者要求实现册监听者,监听者要求实现AdjustmentListener接口,该接口中包含如下方法:接口,该接口中包含如下方法:public void adjustmentValueChanged(Adju
47、stmentEvent e)滚动条编程的要点是对滚动条所代表的值的获取与滚动条编程的要点是对滚动条所代表的值的获取与设置,如下方法分别用来获取和设置滚动条的当前设置,如下方法分别用来获取和设置滚动条的当前值:值:public int getValue()public void setValue(int newValue)如下方法获取事件源和引起值变化的调整类型:如下方法获取事件源和引起值变化的调整类型:Adjustable getAdjustable()返回引发状态变化的事件源对象。返回引发状态变化的事件源对象。int getAdjustmentType()返回引发状态变化事件的调整类型返回引
48、发状态变化事件的调整类型调整类型值可通过以下常量进行判断。调整类型值可通过以下常量进行判断。AdjustmentEvent.BLOCK_DECREMENT 点击点击下方引取下移下方引取下移 AdjustmentEvent.BLOCK_INCREMENT 上移上移 AdjustmentEvent.TRACK 拖动滑块拖动滑块 AdjustmentEvent.UNIT_DECREMENT 点击下点击下三角按钮三角按钮 AdjustmentEvent.UNIT_INCREMENT 点了上点了上三角按钮三角按钮 设定和获取滚动条滑块的移动增量值设定和获取滚动条滑块的移动增量值 void setUnit
49、Increment(int)/指定单位增量指定单位增量 void setBlockIncrement(int)/指定块增量指定块增量 int getUnitIncrement()/获取单位增量获取单位增量 int getBlockIncrement()/获取块增量获取块增量 例例7-12 利用滚动条设计一个调色控制板用来利用滚动条设计一个调色控制板用来调整任意部件的颜色调整任意部件的颜色 import java.applet.*;import java.awt.*;import java.awt.event.*;class colorBar extends Scrollbar public c
50、olorBar()super(Scrollbar.HORIZONTAL,0,40,0,295);this.setUnitIncrement(1);this.setBlockIncrement(50);class ColorPanel extends Panel implements AdjustmentListener Scrollbar redSlider=new colorBar();Scrollbar greenSlider=new colorBar();Scrollbar blueSlider=new colorBar();Canvas mycanvas=new Canvas();Co