java的图形界面与设计
图形用户界面(graphics user interface),简称gui,使用图形的方式,借助菜单、按钮等标准界面元素和鼠标操作,帮助用户方便地向计算机系统发出指令,启动操作,并将系统运行的结果同样以图形方式显示给用户。图形用户界面画面生动、操作简单,省去了字符界面用户必须记忆各种命令的麻烦,深受广大用户喜爱和欢迎,已经成为目前几乎所有应用软件的既成标准。所以学习设计和开发图形用户界面,是应用软件开发人员必修的一课。
java中构成用户界面的各种元素和成分可以粗略地分成为三类:容器、控制组件和用户自定义成分。
1.容器
容器是用来组织其他界面成分和元素的单元。一般说来一个应用程序的图形用户界面首先对应于一个复杂的容器,如一个窗口。这个容器内部将包含许多界面成分和元素,这写界面元素本身也可以又是一个容器,这个容器将再进一步包含它的界面成分和元素,依次类推就构成一个复杂的图形界面系统。
容器的主要作用和特点有:
(1)容器有一定的范围。一般容器都是矩形的,容器范围边界可以用边框框出来,有些则没有可见的标记。
(2)容器有一定的位置。这个位置可以是屏幕四角的绝对位置,也可以是相对于其他容器边框的相对位置。
(3)容器通常都有一个背景,这个背景覆盖全部容器,可以通明,也可以指定一幅特殊的图案,使界面生动化和个性化.
(4)容器中可以包含其他的许多界面成分和元素。当容器被打开显示时,它上面的所以成分和元素也同时显示出来,当容器被关闭和隐藏时,它所包含的成分和元素也一起被隐藏。
(5)容器可以按一定的规则来物理地安排它所包含的元素,如这些元素的相对位置关系、它们的的前后排列关系等。
(6)容器可能被包含在其他容器之中。
2.控制组件
与容器不同,控制组件是图形用户界面的最小单位之一,它里面不再包含其他的成分.控制组件的作用是完成与用户的一次交互,包括接受用户的一个命令,接受用户的一个文本输入,向用户显示一段文本或一个图形等。从某种程度上来说,控制组件是图形用户界面标准化的结果,目前常用的控制组件有:
(1)复选框(checkbox)
(2)单选按钮(checkboxgroup或radiobutton)
(3)下拉列表(list或choice)
(4)标签(label)
(5)文本编辑区(edit或textfield,textarea)
(6)按钮(button)
3.用户自定义成分
除了标准的图形界面元素,编程人员还可以根据用户需要设计一些用户自定义的图形界面成分,例如绘制一些几何图形,使用标志图案等。用户自定义成分由于不能像标准界面元素一样被系统识别和承认,所以通常只能起到装饰、美化等作用,而不能响应用户的动作,不具有交互功能。
1.复选框(checkbox)
例子: |
上面的例子是怎样用java实现的呢?
它的语法如下:
import java.awt .*;import java.applet .*;import java.awt.event.* ; public class fuxuan extends applet implements itemlistener{ public void init() { checkbox one=new checkbox("猫"); checkbox two= new checkbox("狗",true); checkbox three=new checkbox("兔",false); one.additemlistener(this); add(one); two.additemlistener(this); add(two); three.additemlistener(this); add(three); } public void itemstatechanged(itemevent e) { }} | 分析: 第3行:调入处理包,以处理复选框的事件 |
2.单选按钮(checkboxgroup)
|
上面的例子是怎样用java实现的呢?
它的语法如下:
import java.awt .*;import java.applet .*;import java.awt.event .*; public class danxuan extends applet implements itemlistener{ public void init() { checkboxgroup cbg=new checkboxgroup(); checkbox one=new checkbox("正确",false,cbg); checkbox two=new checkbox("不正确",false,cbg); checkbox three=new checkbox("我也不知道",true,cbg); one.additemlistener(this); two.additemlistener(this); three.additemlistener(this); add(one); add(two); add(three); } public void itemstatechanged(itemevent e) { }}分析:
第9行: 先建立一个新表单f,f的名称为checkbox group
第10行:调用函数 checkboxgroup 建立一个新的单选按钮组cbg
第11行:调用函数checkbox建立第1个选项,名称为"one",默认状态为假,即没有事先选中。
第12行:建立一个事先已经默认为正确的选项,名称为“three”。
第13,14,15行:当用户点击复选框使其状态发生变化时就会引发itemevent类代表的选择事件。这个单选框已经把自身注册给itemevent事件的监听者itemlistener.系统会自动调用这个 itemlistener中的public void itemstatechanged(itemevent e)方法来响应单选框的状态改变。实际的实现了itemlistener接口的监听者。调用 checkboxgroup的getselectbox()方法可以获得用户选择了哪个按钮,这个方法返回用户选中的checkbox对象,再调用该对象的方法getlabel()就知道用户选择了什么样的信息。同样,通过调用 checkboxgroup的setselectcheckbox()方法,可以在程序中指定单选按钮组中的哪个按钮。例如下面的语句说明选择为不知道: cbd.setselectedcheckbox(three);另外也可以直接使用按钮组中的checkbox单选按钮的方法,例如直接调用:one.getstate(); 就可以知道这个按钮被选中了,那么其他按钮一定处于未选中状态。
第16,17,18行:将one、two、three三个标签加入到容器f中去,以使起能够在屏幕上显示出来。
第20行则是事件处理函数了!专门用来处理单选项改变的效果!这儿没有加入代码。所以它不能处理任何事件。
3.下拉列表(choice)和列表(list)
1.下拉列表: |
上面的例子是怎样用java实现的呢?
它的语法如下:
import java.awt .*;import java.applet .*;import java.awt.event .*; public class liebiao1 extends applet implements itemlistener{ public void init() { choice c= new choice(); c.add ("-----初始选项------"); c.add ("第一选项"); c.add ("第二选项"); c.add ("第三选项"); c.add ("第四选项"); c.additemlistener(this); add(c); } public void itemstatechanged(itemevent e) { }}分析: 第8行:调用函数 choice 建立一个新的下拉列表 c 第9行:调用c.add建立第1个选项,名称为"----初始选项----",这是默认状态,即屏幕上什么也没有选时的选项。它的序号是0第10行:建立第2个选项,名称为“第一选项”实际上它已经是第2个选项,这属于一点小小的技巧问题。它的序号是1。这相信大家可以更好地理解。 第15行:当用户点击选择项时,使其状态发生变化,就会引发itemevent类代表的选择事件。itemevent事件的监听者itemlistener会自动调用这个方法来响应下拉列表的状态改变。getselectedindex()方法将获得被选中的选项的序号,getselecteditem()方法将获得被选中选项的标签文本字符串。select(int index)方法和select( string item)方法使程序选中指定序号或文本内容的选项。下拉列表可以产生itemevent代表的选择事件,如果把选项注册给实现借口itemlistener 的监听者:c.additemlistener().则当用户单击下拉列表的某个选项时,系统自动产生一个itemevent类的对象包含这个事件的有关信息。 第16行:将下拉列表 c 加入到容器f中去,以使起能够在屏幕上显示出来。 2.列表:(可以多选) |
上面的例子是怎样用java实现的呢?
它的语法如下:
1.…………//与前面的例子相同
2. list year=new list(4,true);
3. year.add("1998");
4. year.add("1999");
5. year.add("2000");
6. year.add("2001");
7. add(year);
8.…………//与前面的例子相同
分析:第2行:调用函数 list 建立一个新的多选项列表 year.它有4个选项,true表示此表可以多选。当为false时,它就只能单选。 第3行:调用year.add建立第1个选项,名称为"1998",它的序号是0第4行:建立第2个选项,名称为“1999”。它的序号是1。 第8行:将下拉列表 c 加入到容器f中去,以使起能够在屏幕上显示出来。如果想或知用户选择了列表中的哪个选项,可以调用list对象的:getselecteditems()方法,该方法返回一个 string类型的数组,里面的每个元素是一个被用户选中的选择项,所有的元素就包括了所有被用户选择的选项。这个方法返回用户选中的选择项。列表可以有多选和单选。所以list对象还有一个方法geetselectitem()方法,与单选不同。这个方法返回单个的字符串。 除了可以返回用户选中的标签字符串,还可以获得被选中选项的序号。在list里面,getselectindex()方法将返回被选中的选项和序号。getselectindexs()方法将获得被选中选项的序号组成的整型数组。 4.标 签
标签,就是用户只能查看,不能修改的文本显示区域,它能起到信息说明的作用,每个标签用一个label类的对象表示。请看例子:
例子: |
上面的例子是怎样用java实现的呢?
它的语法如下:
……//与前面的例子一样!
1. label prompt1=new label("这是标签 1 !");
2. label prompt2=new label ("这是标签 2 !");
3. add(prompt1);
4. add(prompt2);
……//与前面的例子一样!
分析:第1行:调用函数 label 建立第 1 个标签 prompt1; 第2行:调用函数 label 建立第 2 个标签 prompt2; 第3行:将标签 1 加入到容器中去,以使起能够在屏幕上显示出来。第4行:同样,将标签2加入到容器中去,以使起能够在屏幕上显示出来。 标签不能接受用户的输入,所以不能引发事件,不是事件源。如果希望修改标签上显示的文本,可以使用label对象的方法gettext(新字符串),同样对于一个未知的标签,可以通过调用label对象gettext()方法来获得它的文本内容。 5.文本编辑区(textfield和textarea)
java中用于处理文本的基本组件有两种:
单行文本框 textfield 和 多行文本区域textarea,
他们都是textcompponent的子类。在创建文本组件
时可以同时指出文本组件中的初始文本字符串。
例子: |
上面的例子是怎样用java实现的呢?
它的语法如下:
……//与前面的例子相同
1. textfield text1= new textfiled("textfield",20);
2. text1.addactionlistener(this);
3. textarea text2 = new textarea ("textarea",4,20);
4. text2.addtextlistener(this);
5. add(text1);
6. add(text2);
……
8. public void textvaluechanged(textevent e)
9. {
10. }
……//与前面的例子相同
分析:第1行:调用函数 textfiled 建立第 1 个标签 text1,初始字符串为“textfield”,长度为20个字符的长度; 第2行:为text1加入监视函数,用来响应它的事件改变。第3行:调用函数 textarea 建立第 2 个标签 text2,初始字符串为“teatarea”,共有4行,每行也 为20个字符串的长度。 第4行:为text2加入监视函数,用来响应它的事件改变。 第5行:将标签 1 加入到容器中去,以使起能够在屏幕上显示出来。第6行:同样,将标签2加入到容器中去,以使起能够在屏幕上显示出来。 除了继承textcomponent类的方法,textfield还有一些自己的特殊方法,例如,对于密码输入,要求输入的内容用“*”来显示,可以调用如下的方法: textfield tf = new textfield("输入密码:"); tf.setechochar('*'); 这样就可以了。 textarea 也有自己的特殊方法: append(string s)在当前文本区域中已有的文本后面添加字符串"s"的内容。 insert(string s,int index)方法将字符串s的内容插入到已有文本的指定序号处。6.按 钮
按钮是图形界面中非常重要的一种 基本组件,按钮本身不显示信息,它一般对应一个事先定义好的功能操作,该操作通常用一段程序来表示。
当用户点击按钮 时,系统自动执行与该按钮
相联系的程序, 从而完成预先指定的功能。
请看下面的例子:
例子: 取消: |
要制作上面的按钮,请看下面的语法:
……//与前面的例子相同
1. button b = new button("提 交");
2. b.addactionlistener(this);
3. button c = new button("取 消");
4. c.addactionlistener(this);
5. add(b);
6. add(c);
7. public void actionperformed(actionevent e)
8. {
9. }
……//与前面的例子相同
分析:第1行:调用函数 button 建立第 1 个按钮 b,名称为“提交”;第2行:为 提交按钮b 加入监视函数,用来响应它的事件改变。第3行:调用函数 button 建立第 2 个按钮 c ,名称为“取消”; 第4行:为 取消按钮c 加入监视函数,用来响应它的事件改变。 第5行:将 “提交按钮b” 入到容器中去,以使起能够在屏幕上显示出来。第6行:同样,将“取消按钮c”加入到容器中去,以使起能够在屏幕上显示出来。 按钮可以引发动作时间,当用户点击一个按钮时就引发了一个动作事件,希望响应按钮引发的动作事件的程序必须把按钮注册给实现了actionperformed(actionevent e)方法书写体。在方法体中,可以调用 e.getsource()方法来获取引发动作事件的按钮对象引用,也可以调用e.getactioncommand()方法来过去实现为这格式件设置的命令名。调用按钮的getlabel()方法可以返回按钮的标签;调用按钮的setlabel(string s)方法可以把按钮的标签设置为s;调用setactioncommand()方法可以为按钮设置一个命令名,这个命令名在响应事件时可能用到;调用getactioncommand()方法可以获得这个命令名。要注意的是:所有的组件必须都放置在一顶的容器中才能发挥做用,将基本的组件防入容器的方法是该容器的add()方法。鼠标和键盘事件处理函数
所谓事件,就是指在系统中有某些我们所关心的事情(例如:鼠标移动了,用户按下了某个按键……等)发生了,然后系统便通知我们去处理这些事情。这样的概念在一般采用窗口用户界面环境的操作系统中,是十分常见的。
在java中,所有的事件都定义在类event(java.awt.event)内,读者有兴趣的话,可以参考java的api。
1)鼠标事件。
鼠标时间一般有:
mousedown:当鼠标的按键被用户按下时,就会发生mouse_down时间,这个时候系统便调用方法mousedown对该事件进行处理。方法mousedown的写法为:
public boolean mousedown(event e,int x,int y)
{
……
}
由上面可知,方法mousedown有三个参数:e,x,y。e就是事件本身,我们把“事件”看成一个对象实体,只不过它的类是event而已,同时,事件在使用上和一般的对象实体没有差别。而x,y则是这个时间发生时的鼠标的坐标值。要注意的是它的方法返回值是boolean型的值,这点要注意!另外,由于有些机器的鼠标只有一个按键,考
闽公网安备 35060202000074号