第6章图形用户界面设计基础_Java程序设计_第1页
第6章图形用户界面设计基础_Java程序设计_第2页
第6章图形用户界面设计基础_Java程序设计_第3页
第6章图形用户界面设计基础_Java程序设计_第4页
第6章图形用户界面设计基础_Java程序设计_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

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

文档简介

1、第6章 图形用户界面设计基础 通过学习4个案例,初步掌握java语言中的图形用户界面的概念,以及创建容器、组件、指定布局和相应事件的方法,以及显示图片和播放音乐的基本方法。通过11个实例的制作,进一步掌握java设计过程的基本方法和基本技巧。6.1【案例17】创建窗体l 案例效果 编写一个程序beijing,创建一个jfram窗口,并在其中显示“北京欢迎你!”和“welcome to beijing!”,如图6-1-1所示。通过该案例的学习,可以初步掌握如何在java语言中实现图形用户界面,以及布局管理器的使用等内容。 l 设计过程1、 在记事本中输入如下程序内容 import java.aw

2、t.*;import javax.swing.*;public class beijingpublic static void main(string args)jframe frame=new jframe(2008年奥运会);frame.getcontentpane().setlayout(new gridlayout(2,1);frame.setdefaultcloseoperation(jframe.exit_on_close);frame.setbounds(100,100,250,150);jbutton msg1=new jbutton(北京欢迎您!);jbutton msg2=

3、new jbutton(welcome to beijing!);frame.getcontentpane().add(msg1);frame.getcontentpane().add(msg2);frame.setvisible(true);l 相关知识1图形用户界面和标准组件(1)图形用户界面简介:图形用户界面(graphics user interface,gui)。它使用图形的方式,借助菜单、文本框、按钮等标准界面组件和鼠标及键盘的操作,帮助用户方便地向计算机系统发出指令,并将系统运行的结果同样以图形方式显示给用户。在图形用户界面(gui)出现之前,用户需要输入命令,然后计算机再进行计

4、算并输出结果。这种人机交流方式需要用户记忆大量的命令,并且操作烦琐、复杂、容易出错。对于计算机的初学者和一般用户来说,要掌握一种系统或者应用软件更是困难重重。例如,dos操作系统虽然具有与windows同样强大的文件管理功能,但是其普及程度远远不及后者,在很大程度上是因为dos不具有图形用户界面。由此可见,一个友好的图形用户界面对于一个软件的重要性。图形用户界面是指包括文本框、标签、按钮、单选按钮、复选框、图片、菜单、对话框等组件的一个人机交互的界面。在该界面中,用户不需要记忆任何命令,通过单击、双击、拖动鼠标和简单的文字输入就可以轻松地操作计算机完成所有的任务。在java语言中,可以自行设计

5、程序的图形用户界面,使得程序运行效果更加直观、生动活泼。设计和实现图形用户界面的工作主要有以下3个方面。 创建组件(component):创建组成图形用户界面的各种元素。例如,文本框、标签、按钮、单选按钮、复选框、图片、菜单、对话框等。指定布局(layout):设置各个组件在图形用户界面中的相应位置。响应事件(event):定义当用户进行某些操作时,程序的执行情况,从而实现图形用户界面的人机交互功能。例如,当单击按钮、拖动鼠标或者在文本框中输入文字时,程序的反应。程序的反应结果一般也是通过图形用户界面显示出来。java1.0中出现了用来生成图形用户界面的包是java.awt,简称抽象窗口工具集

6、,即awt(abstract window toolkit)。它的设计目标是希望构建一个通用的gui,使得利用它编写的程序能够运行在所有的平台上。(2)gui标准组件:java中构成图形用户界面的各种元素和成分可以分为两大类:容器和组件。容器(container):容器是用来摆放图形用户界面中各种组件的一个矩形范围。一般说来,一个应用程序的图形用户界面必须有一个顶层容器,比如一个窗口。在容器中,可以放置各种组件或者其他容器,在新放置的容器内又可以放置各种组件或者其他容器,依此类推就构成一个复杂的图形界面系统。运行程序时,容器的显示位置和大小也就是该程序图形用户界面的显示位置和大小。用户可以自行

7、设置位置和大小的绝对值,也可以依据其所含组件和其他容器的位置及大小来设置相对位置。容器通常都有一个背景,这个背景覆盖填充整个容器,可以是透明的,也可以使用指定的图案增加图形用户界面的生动性和个性化。组件(compnent):组件是图形用户界面的基本组成单位,它不能包含任何其他的组件或者容器。组件的主要作用是接受用户的指令,显示输出结果,从而完成人机交流。组件的种类很多,例如,按钮、复选框、下拉菜单等。每一种组件都有其特定的属性,以及相对应的事件响应方式。在容器中的组件可以按一定的规则来放置,确定它们的相对位置关系和前后排列关系等。除了容器和组件这两大图形用户界面组成部分外,还有一些标志图案或者

8、几何图形,这些主要是用来突出输出结果和美化组件的。它们不被系统识别,所以不能响应用户的操作,不具有交互功能。2awt和swing在java语言中,图形用户界面是通过java.awt包或者javax.swing包中的类来实现的。java.awt包一般简称为awt,其含义是抽象窗口工具箱(abstract windows toolkit);javax.swing包一般简称为swing,它是java基础类库(java fundation class,jfc)中的一员。(1)awt提供了多种标准的gui组件,比如标签、文本框、按钮等,以及窗口、面板等容器。使用awt的布局管理器,可以安排各个组件在容器

9、中的位置。此外,还有前面介绍的绘制几何图形、设置文字字体、颜色等功能。在awt中,专门有一组类用于响应并处理外部事件。java applet程序就是属于awt中的一种图形用户界面实现方法。实际上,awt提供给编程人员的只是抽象的窗体界面系统,而在其内部会针对每种操作系统,分别使用不同的方式来实现图形用户界面。使用这种方式虽然加快了gui的实现速度,但是因为每种操作系统的组件大小、文字字体和界面布局都不同,所以会造成同一个程序在不同系统中的图形用户界面效果不同。例如,在mac机上设计的一个友好的程序图形用户界面,其效果如图6-1-2(a)所示,将该程序在pc机上运行得到的图形用户界面可能不尽如人

10、意,其效果如图6-1-2(b)所示。为了解决awt这个严重的缺陷,sun公司在java 2(java 1.4)以后的版本中增加了javax.swing包。(2)swing不仅包含了awt中几乎所有的容器和组件,而且增加了很多新的容器和组件。因为awt中的类已经使用了各个容器和组件的英文名称,所以swing中的类需要在原有名称前加一个字母j,以示区别。例如,与awt中button类具有同样功能的swing中的类称为jbutton类。swing中的所有组件都是“轻量级”的,很小巧的;而顶层容器则是“重量级”的,支持“可插入外观和效果”(look and feel)。也就是说,用户界面的外观可以在不

11、同的平台和不同的操作系统上被动态地改变以符合用户的期望。例如,图6-1-3展示了4种不同的用户界面外观。图6-1-3 swing图形界面效果具有图形用户界面的swing应用程序都具有至少一个顶层容器。swing中共有4个顶层容器:jframe、jdialog、japplet和jwindow。3jframejframe是最简单最常用的swing顶层容器,它含有一个内容框架(content pane)用来容纳所有的组件。对于菜单组件来说,既可以放置到内容框架内,也可以直接添加到jframe上。这三者的层次关系如图6-1-4所示,其图形用户界面示意图如图6-1-5所示。jframe的创建、设置和显示

12、方法如下。图6-1-4 容器和组件的关系 图6-1-5 示意图(1)创建jframe:创建jframe对象的常用格式有以下两种。jframe 对象名=new jframe();jframe 对象名=new jframe(string s);如果使用第二种创建形式,则在创建jframe的同时,也设置了其窗口标题的内容。例如,下面的语句创建了一个jframe对象f,且其窗口的标题为“欢迎学习java语言”。jframe f=new jframe(欢迎学习java语言);(2)添加组件:因为大多数组件不可以直接添加到jframe中,所以使用jframe的对象调用其getcontentpane()方法

13、,返回一个frame的内容框架(content pane)对象,然后再通过调用add()方法将组件对象添加到内容框架中,格式如下。 jframe对象名.getcontentpane().add(组件对象名);(3)jframe类中的方法pack()方法:将jframe的窗口设置为根据其中所含的容器和组件的大小来决定,以能够容纳每个组件的最佳大小为准。setsize(w,h)方法:准确设置jframe窗口的大小,其中w表示窗口的宽度,h表示窗口的高度。setbounds(x,y,w,h)方法:不仅可以准确设置jframe窗口的大小,而且还可以准确设置jframe窗口在屏幕中的位置,其中x表示窗口

14、左上角的x轴坐标值,y表示窗口左上角的y轴坐标值,w表示窗口的宽度,h表示窗口的高度。setbackground(颜色参数)方法:改变jframe容器的背景颜色。例如,下面的语句将背景颜色设置为蓝色。f.setbackground(color.blue);settitle(string s)方法:设置窗口的标题。setdefaultcloseoperation(参数)方法:用来控制当jframe窗口被关闭后,swing应用程序的下一步操作。一般只使用jframe.exit_on_close作为参数,表示窗口被关闭后,自动结束程序运行。(4)显示jframe窗口:完成所有jframe的创建和设置

15、后,需要执行显示jframe窗口的语句,才可以在屏幕上看到程序运行后图形用户界面的效果。显示jframe窗口的格式有两种,这两种格式的效果是完全一样的。jframe对象名.setvisible(true);jframe对象名.show();以上是创建和设置jframe最常用的语句,下面的程序可以创建一个最简单的不含任何组件的jframe窗口。import javax.swing.*; /导入swing包,以便使用其中的类public class exp public static void main(string args) jframe f=new jframe(); /创建容器jframe

16、的对象f f.setdefaultcloseoperation(jframe.exit_on_close); /窗口关闭后结束程序 f.setbounds(100,100,300,200); /设置其在屏幕中的显示位置及大小 f.settitle(欢迎学习java语言); /设置窗口的标题 f.setvisible(true); /显示对象f 将上面的程序保存在“我的java程序”文件夹中,然后按照运行java application的方法输入命令运行程序,结果如图6-1-6所示。图6-1-6 jframe窗口4jpaneljpanel是swing中的一个第二层容器,其中可以添加各种组件,但是

17、不能绘制图形,只能改变其背景颜色。(1)创建jpanel:创建jpanel的常用格式有以下两种。格式1:jpanel 对象名=new jpanel();格式2:jpanel 对象名=new jpanel(layoutmanager);如果使用第二种创建形式,则在创建jpanel的同时,也设置了其布局方式。因为不是所有的布局管理器都可以作为jpanel构造方法的参数,所以最好使用setlayout()方法来改变布局方式。下一节中将详细介绍布局管理器。(2)添加组件:使用add()方法可以将组件添加到jpanel中,其格式如下。格式:jpanel对象名.add(参数);其中,使用不同的布局管理器,

18、参数的要求不同。5布局管理器在java语言的图形用户界面设计中,容器和组件的布局管理是非常重要的一个环节。将一个组件加入容器中时,布局管理器决定了所加入的组件的大小和位置。而且布局管理器能自动设定容器中组件的大小和位置,当容器改变大小时,布局管理器能自动地改变其中组件的大小和位置。如果要使用布局管理器,则必须使用“import java.awt.*;”语句将其导入程序中。下面将介绍最常用的3种布局管理器。(1)flowlayout:flowlayout是容器panel和applet默认使用的布局管理器,如果不专门为panel或者applet指定布局管理器,它们就使用flowlayout。flo

19、wlayout放置组件的方式:组件按照加载的先后顺序从左向右排列。一行排满之后就转到下一行继续从左至右排列。在组件不多时,使用这种策略非常方便,但是当容器内的组件增加时,就显得排列地参差不齐。flowlayout类的构造方法:flowlayout类的构造方法有以下3种。public flowlayout()public flowlayout(int align)public flowlayout(int align,int hgap,int vgap)其中,参数align代表每一行组件的对齐方式,其值可以是flowlayout.center、flowlayout.trailing和flowla

20、yout.leading。它们分别表示居中对齐、右对齐和左对齐。当没有特别设置该参数时,flowlayout类默认使用居中对齐方方式。参数hgap和vgap中的数值分别表示组件之间的水平间距和垂直间距。如果不特别设置这一对参数,则flowlay类默认的间距值为5。如果一个容器需要使用flowlayout布局方式,则可以通过调用setlayout()方法来实现,其格式如下。格式:对象名.setlayout(new flowlayout();其中,setlayout()方法是所有容器的父类container类的方法,所以任何一种容器都可以调用。因为很少使用flowlayout类中的变量和方法,所以

21、一般只使用关键字new调用其构造方法,而不用创建具体的对象。注意:不能使用jframe类的对象直接调用setlayout()方法,而是要先通过getcontentpane()方法,获得jframe的内容框架,然后通过内容框架再调用setlayout(),设置布局方式。例如:jframe frame=new jframe();frame.getcontentpane().setlayout(new flowlayout(flowlayout.leading);(2)borderlayout:borderlayout是容器jframe类默认使用的布局管理器,如果不专门为jframe类指定布局管理器

22、,则使用borderlayout。borderlayout放置组件的方式:把容器内的空间划分成上、下、左、右和中央五个显示区域来放置组件,分别使用参数page_start、page_end、line_start、line_end和center来表示。如果某个区域没有组件,则区域中的其他组件可以占据它的空间。例如,如果上部没有分配组件,则左右两个部分的组件将向上扩展到容器的最上方。如果左右两个部分没有分配组件,则位于中央的组件将横向扩展到容器的左右边界。borderlayout类的构造方法:borderlayout类的构造方法有以下两种。public borderlayout()public b

23、orderlayout(int hgap,int vgap)其中,参数hgap和vgap中的数值分别表示组件之间的水平间距和垂直间距。如果不特别设置这一对参数,则组件之间没有间距。如果一个容器需要使用borderlayout布局方式,则可以通过调用setlayout()方法来设置,然后调用add()方法在其中设置组件的具体位置。例如,下面的语句在jpanel类对象p中添加一个jbutton类对象btn。jpanel p=new jpanel();jbutton btn=new jbutton(确 定);p.setlayout(new borderlayout(40,20);p.add(btn,

24、borderlayout.page_start);(3)gridlayout:gridlayout布局方式是swing中设置比较灵活的一种布局管理器。gridlayout放置组件的方式:组件按照加载的先后顺序从左向右、从上到下按照设定的行、列数放置,使各组件呈网格状分布。容器中各组件的大小完全相同。 gridlayout类的构造方法:gridlayout类的构造方法有以下3种。public gridlayout()public gridlayout(int rows,int columns)public gridlayout(int rows,int columns,hgap,vgap)其中,

25、参数rows表示网格的行数,columns表示网格的列数。如果不特别设置这一对参数,则默认行数和列数值均为1。参数hgap和vgap中的数值分别表示组件之间的水平间距和垂直间距。如果不特别设置这一对参数,则组件之间没有间距。如果一个容器需要使用gridlayout布局方式,则可以通过调用setlayout()方法来实现,其格式如下。格式:对象名.setlayout(new gridlayout(); 例如,下面的语句设置jpanel类对象p的布局为gridlayout,且其中的组件按4行5列的布局方式显示。jpanel p=new jpanel();p.setlayout(new gridla

26、yout(4,5);6自定义布局实际上,还可以不使用任何一种布局管理器,自行设置每一个组件的位置和大小,其格式如下。格式1:容器对象名.setlayout(null);格式2:组件对象名.setbounds(x,y,w,h);其中第1条语句用来设置布局管理器的值为null,表示不使用任何一种布局管理器。第2条语句是调用setbounds()方法自行设置该组件的位置和大小,其中参数x和y分别为组件左上角的x轴和y轴坐标,参数w和h分别为组件的宽度值和高度值。6.2【案例18】记录员工个人信息l 案例效果 编写一个程序yuangong,运用各种组件创建一个具有图形用户界面的员工信息记录表,如图所示

27、。用户在其中输入和选择个人信息内容,然后单击“确定“按钮,如图:通过该案例的学习,可以初步掌握如何使用swing组件创建图形用户界面中的组件,以及如何通过borderfactory类来美化各种组件。 l 设计过程2、 在记事本中输入如下程序内容 import java.awt.*;import java.awt.event.*;import javax.swing.*;public class yuangong implements actionlistener jtextfield name; jtextfield age; jradiobutton rb1,rb2; jcheckbox c

28、b1,cb2,cb3,cb4; jcombobox cb; jbutton btn; jlabel lblname,lblage,lbldep,msg; buttongroup group = new buttongroup(); string depart = 公共关系,财务部,销售部,企划部,研发部,人力资源部; public static void main(string args) jframe f= new jframe(员工个人信息记录表); yuangong yuan= new yuangong(); jpanel pane = yuan.init(); f.getcontent

29、pane().add(pane); f.setdefaultcloseoperation(jframe.exit_on_close); f.setsize(400,200); f.setvisible(true); public jpanel init() jpanel p = new jpanel(); jpanel p1 = new jpanel(new gridlayout(2,1); jpanel p2 = new jpanel(new gridlayout(4,1); p1.setborder(borderfactory.createtitledborder(性别); p2.setb

30、order(borderfactory.createtitledborder(特长); lblname= new jlabel(姓名); name = new jtextfield(6); lblage=new jlabel(年龄:); age=new jtextfield(4); lbldep = new jlabel(所在部门); msg=new jlabel(请写员工个人信息,然后按“确定”按钮); btn=new jbutton(确定); btn.addactionlistener(this); rb1=new jradiobutton(男性); rb2=new jradiobutto

31、n(女性); p1.add(rb1); p1.add(rb2); group.add(rb1); group.add(rb2); cb1=new jcheckbox(美术,false); cb2=new jcheckbox(体育,false); cb3=new jcheckbox(文学,false); cb4=new jcheckbox(音乐,false); p2.add(cb1); p2.add(cb2); p2.add(cb3); p2.add(cb4); jcombobox cb=new jcombobox(depart);/创建下拉列表框 p.add(lblname);p.add(na

32、me); p.add(lblage);p.add(age);p.add(lbldep); p.add(cb); p.add(p1);p.add(p2); p.add(btn);p.add(msg); return p; public void actionperformed(actionevent e) msg.settext(员工的个人信息已经被 系统记录,谢谢你的合作); l 相关知识1swing组件大部分swing组件都具有与前面介绍的awt组件(例如按钮、文本框和标签等)类似的功能,但是swing组件功能更强大、使用更灵活,而且还具有许多新的组件,例如,选项板、滚动窗口、树、表格等。下

33、面先介绍一些最基本的swing组件。(1)jtextfield(文本框)类:jtextfield的用法与awt中的组件textfield用法基本一样,都是用来接收和编辑用户输入到文本框中的文本。创建jtextfield类对象的格式有以下4种。格式1:jtextfield 对象名=new jtextfield();格式2: jtextfield 对象名=new jtextfield(string s); 格式3: jtextfield 对象名=new jtextfield(int i);格式4: jtextfield 对象名=new jtextfield(string s,int i);其中,参

34、数s表示在文本框中显示的内容,i表示文本框的宽度。(2)jbutton(按钮)类:它的用法与awt中的组件button用法相似,但是jbutton对象除了可以像button对象一样显示文字标签之外,还可以显示图标。创建jbutton类对象的格式有以下4种。格式1:jbutton 对象名=new jbutton();格式2:jbutton 对象名=new jbutton(string s);格式3:jbutton 对象名=new jbutton(imageicon icon);格式4:jbutton 对象名=new jbutton(string s,imageicon icon);其中,参数ic

35、on代表加载的图片文件对象,参数s是按钮的标签内容。如果要给按钮添加图片,则要先创建图片的对象,其方法如下。imageicon 对象名=new imageicon(图片文件名);其中,图片文件名必须要用双引号括起来,而且如果图片文件与应用程序保存在不同的文件夹中,则需要给出完整的路径,否则只给出文件名即可。例如,下面的语句可以创建一个含有图片和文字的按钮。imageicon icon=new imageicon(picture.gif);jbutton btn=new jbutton(确 定,icon);(3)jlabel(标签)类:它的用法与awt中的组件label用法相似,都是用来显示一段

36、文本,但是jlabel可以显示图标。创建jlabel的格式有以下6种:格式1: jlabel 对象名=new jlabel();格式2:jlabel 对象名=new jlabel(imageicon icon);格式3:jlabel 对象名=new jlabel(imageicon icon,jlabel.center);格式4:jlabel 对象名=new jlabel(string s,imageiconicon,jlabel.center);格式5:jlabel 对象名=new jlabel(string s);格式6:jlabel 对象名=new jlabel(string s,jla

37、bel.center);其中,参数icon代表加载的图片文件对象,参数jlabel.center代表中央对齐方式,其他对齐方式还有jlabel.bottom、jlabel.left、jlabel.right、jlabel.top,分别表示底端对齐、左对齐、右对齐和顶端对齐,参数s是标签的显示内容。(4)jpasswordfield(密码框)类:它是jtextfield类的子类,它具有jtextfield类的所有功能。当用户在密码框中输入字符(也就是密码)时,jpasswordfield会自行用设置的字符代替输入的字符,达到遮掩密码的作用jpasswordfield类中默认的遮掩密码的字符是星号

38、“*”,如果想使用其他字符,可以通过其对象调用setechochar(char c)方法。在java 2以后的版本中,jpasswordfield类中的gettext()方法被getpassword()方法取代。getpassword()方法的作用是将用户输入的原始字符以字符型数组数据的形式返回。2borderfactory类borderfactory类是swing中非常有用的一个类,它不仅可以绘制和美化容器或者组件的边框,还可以提供标题和四周的空白空间。每一个容器或者组件对象都可以具有一个或者多个border类提供的边框效果。下面介绍borderfactory类中常用的几个设置边框的类方法。

39、这些方法都可以直接通过borderfactory类调用,不需要创建对象,其格式如下。格式:对象名.setborder(borderfactory.方法名(参数);(1)createlineborder()方法:它可以给容器或组件添加具有颜色的边框,其格式有以下两种。格式1:createlineborder(color color)格式2:createlineborder(color color,int width其中,参数color代表颜色,参数width代表边框的宽度。(2)createetchedborder()方法:它可以给容器或组件添加具有蚀刻效果的边框,其格式以下有两种。格式1:cr

40、eateetchedborder(etchedborder.raised) 格式2:createetchedborder(etchedborder.lowered)其中,参数etchedborder.raised表示凸起效果,参数etchedborder.lowered表示凹陷效果。因为raised和lowered是etchedborder类中的类变量,所以必须使用“import javax.swing.border.etchedborder;”语句导入etchedborder类。(3)createbevelborder()方法:它方法通过分别加亮和变暗容器或组件的部分边框,使其具有凸起或者凹

41、陷的效果,其格式有以下两种。格式1:createbevelborder(bevelborder.raised)格式2:createbevelborder(bevelborder.lowered)其中,参数bevelborder.raised表示凸起效果,参数bevelborder.lowered表示凹陷效果。因为raised和lowered是bevelborder类中的类变量,所以必须使用“import javax.swing.border.bevelborder;”语句导入bevelborder类。(4)createemptyborder()方法:它可以给容器或组件添加没有宽度或者具有特定宽

42、度的空白边框,其格式有以下两种。格式1:createemptyborder()格式2:createemptyborder(int top,int left,int bottom,int right)其中,参数top、left、bottom和right分别代表边框上、左、下和右部分的宽度。(5)creatematteborder()方法可以给容器或组件添加四周宽度不同、具有颜色或者图片的边框,其格式有以下两种。格式1:creatematteborder(int top,int left,int bottom,int right,color color)格式2:creatematteborder(

43、int top,int left,int bottom,int right,icon icon)其中,参数top、left、bottom和right分别代表边框上、左、下和右部分的宽度,参数color代表边框颜色,参数icon代表添加的图片对象。(6)createtitledborder()方法:它可以给容器或组件添加带有标题的边框,其格式有以下3种。格式1:createtitledborder(string title)格式2:createtitledborder(border border,string title)格式3:createtitledborder(border border,

44、string title,int posx,int posy)3.jradiobutton类和jcheckbox类在swing中具有一些选择功能的组件,例如,单选按钮,复选框和下拉式列表框等,这些组件一般和if语句联合使用。(1)jradiobutton(单选按钮)类:必须使用buttongroup将所需的jradiobutton类对象构成一组,使得同一时间只有一个对象被选中。buttongroup类只是一个逻辑上的容器,它并不在界面中表现出来。格式有以下六中:格式1:jradiobutton 对象名=new jradiobutton();格式2:jradiobutton 对象名=new jr

45、adiobutton(imageicon icon);格式3:jradiobutton 对象名=new jradiobutton(imageicon icon,boolean selected);格式4:jradiobutton 对象名=new jradiobutton(string s,);格式5:jradiobutton 对象名=new jradiobutton(string s,imageicon icon);格式6:jradiobutton 对象名=new jradiobutton(string s,imageicon icon,boolean selected););格式7:jrad

46、iobutton 对象名=new jradiobutton(string s,imageicon icon,boolean selected););其中,icon表示图标文件,s表示单选按钮右边的说明文字,selected表示单选按钮状态,true为选中,false表示未选中。(2)jcheckbox(单选按钮)类:jcheckbox类,同一时间有一个或多个对象被选中。格式有以下六中:格式1:jcheckbox 对象名=new jcheckbox();格式2:jcheckbox 对象名=new jcheckbox(imageicon icon);格式3:jcheckbox 对象名=new jc

47、heckbox(imageicon icon,boolean selected);格式4:jcheckbox 对象名=new jcheckbox(string s,);格式5:jcheckbox 对象名=new jcheckbox(string s,imageicon icon);格式6:jcheckbox 对象名=new jcheckbox(string s,imageicon icon,boolean selected););格式7:jcheckbox 对象名=new jcheckbox(string s,imageicon icon,boolean selected);其中,icon表示

48、图标文件,s表示单选按钮右边的说明文字,selected表示复选按钮状态,true为选中,false表示未选中。4.actionevent类和itemevent类 当用户单击某个jradiobutton类对象时,可以产生一个action事件和一个或两个item事件,也就是说jradiobutton类可以同时响应actionevent和itemevent。大多数情况下,只需要处理被用户单击的对象,所以使用actionevent来处理jradiobutton类对象的事件。使用itemevent来处理jcheckbox类对象的事件.(1)actionevent类:用户改变一个组件的状态时,会产生一个

49、actionevent事件。处理actionevent类事件的步骤:在程序的最前面使用“import java.awt.event.*”语句导入java.awt.event包中的所有类。给程序的主类加上actionlistener接口。将需要监听的组件注册,其格式为:对象名.addactionlistener(this);在actionperformed()方法中编写具体处理该事件的需要做出的响应。格式为:public void actionperformed(actionevent e) 语句体当有多个组件需要确定哪个对象产生的事件时,可以使用getsource()方法获得用户单击对象。该方

50、法返回值为object,通过if语句和e.getsource依次做比较。6.3【案例19】会移动的笑脸l 案例效果 编写一个程序face,用户通过键盘上的方向键来控制界面中具有笑脸图案的按钮的移动,程序运行效果如图6-3-1所示。通过该案例的学习,可以初步掌握如何在java语言的事件,包括各种事件的类型,及其应用方法。 l 设计过程1、 在记事本中输入如下程序内容 import javax.swing.*;import java.awt.*;import java.awt.event.*;public class face implements keylistener int x=100; i

51、nt y=100; int width=50; int height=50; final static int move =5; jbutton btn; public static void main(string args) jframe frame=new jframe(会移动的笑脸); frame.setdefaultcloseoperation(jframe.exit_on_close); face fac = new face(); jpanel pane= fac.init(); frame.getcontentpane().add(pane); frame.setsize(50

52、0,500); frame.setvisible(true); public jpanel init() jpanel p=new jpanel(); p.setlayout(null); imageicon icon=new imageicon(face.gif); btn=new jbutton(icon); btn.setbounds(x,y,width,height); p.add(btn); btn.addkeylistener(this); return p; public void keypressed(keyevent e) if (e.getkeycode()=keyeven

53、t.vk_up) y=y-move; if (e.getkeycode()=keyevent.vk_down) y=y+move; if (e.getkeycode()=keyevent.vk_left) x=x-move; if (e.getkeycode()=keyevent.vk_right) x=x+move; btn.setbounds(x,y,width,height); public void keyreleased(keyevent e) public void keytyped(keyevent e) l 相关知识1.java语言的事件:在图形用户界面程序运行时,当用户按下鼠

54、标或者键盘时,java会产生一个事件来响应用户或者系统的动作。(1)事件类的关系:java所有的事件都定义在java.awt.event包中,用相应的类来表达不同的事件,所以要在程序中使用这些类,必须先导入java.awt.event.(2)事件处理机制:在java中,采用委托事件处理模型。事件处理模型将事件源(产生事件的组件)和对事件作出的具体处理(利用一种称为监听者listener的实体来对事件进行具体的处理)分开。不同的组件都会有相应的事件、事件处理器(事件监听者)及处理方法。 一般说来,要应用某个事件类需要以下4个步骤:在程序的最前面使用“import java.awt.event.*”语句导入java.awt.event包中的所有类。给程序的主类加上 implements xxxlistener接口。其中xxx代表事件类型。将需要监听的组件注册,其格式为: 对象名.addxxxlistener(this);重新编写抽象接口中的具体内容。2.键盘事件当用户按下和松开键盘的按键时,所产生的事件称为键盘事件(keyevent类)。键盘事件的监听者接口是keylistener.(1)keylistener接口中的方法:public void keypressed(keyevent e)方法:

温馨提示

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

评论

0/150

提交评论