Java程序设计课件(高晓黎)第7章AWT支持下的GUI编程

上传人:da****ge 文档编号:243098265 上传时间:2024-09-15 格式:PPT 页数:107 大小:1.49MB
返回 下载 相关 举报
Java程序设计课件(高晓黎)第7章AWT支持下的GUI编程_第1页
第1页 / 共107页
Java程序设计课件(高晓黎)第7章AWT支持下的GUI编程_第2页
第2页 / 共107页
Java程序设计课件(高晓黎)第7章AWT支持下的GUI编程_第3页
第3页 / 共107页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,立体化教材计算机系列,Java,程序设计,107,JAVA,JAVA,JAVA程序设计,第七章,AWT,支持下的,GUI,编程,目 录,重点与难点点拨,GUI,与,AWT,AWT,容器的布局策略,AWT,的非容器组件,AWT,的菜单系统,经典练习题,AWT,的容器组件,本章知识重点,3,1,3,2,AWT,的非容器组件,3,3,AWT,的布局管理,3,4,AWT,的菜单系统,AWT,的容器组件,本章知识难点,3,3,各非容器组件主要方法及其参数,3,4,3,1,3,2,创建组成界面的成份和元素,各容器组件主要方法及其参数,布局的设置与管理,GUI,与,AWT,GUI,与,JFC,AWT,与,Swing,:,AWT JDK 1.0,与,JDK 1.1,版本下提供的,GUI,开发工具包,包含,60,多个组件类与接口,用以创建基于窗口或,Applet,的,GUI,应用。,Swing Java 2,发布的功能更加完善的,GUI,组件类库,能够替代,AWT,,包含,250,多个更为丰富多样的类与接口,支持复杂,GUI,系统的开发。,GUI,与,AWT,AWT,的组件类,GUI,组件,(Component),又可译作,GUI,构件,是组成,GUI,应用程序的图形用户界面元素,(,如菜单、文本框、标签、命令按钮等,),。每在,GUI,组件都与一个特定的与操作系统平台无关的组件类相对应。这些组件相互配合,可以快速搭建起,GUI,程序,。,GUI,组件按照功能可分为容器组件与基本组件。,Java,将,GUI,组件类分类分层,组织到一个名为,java.awt,的包中。用”,import,java.awt,.*;”,语句导入该包中含有的所有类与接口。,GUI,与,AWT,4. AWT,基本组件类之间的继承关系,AWT,的容器组件,组件不能直接在程序运行界面中显示,必须放置在容器,(Container),组件内才能呈现出来。,Container,继承自,Component,类,因而容器自身首先也是一种组件,具有其他组件的共同特性;其次容器是一种特殊的组件,其特殊性在于容器的功能是用来容纳一般的组件对象与容器组件对象的,即容器除提供给其他组件作为安置场所外,其自身还可相互嵌套。,Container,类直接派生出,Window,类、,Panel,类、,ScrollPane,类等,几种容器子类。,Window,类作为顶层窗口类,不依赖于其他容器而独立存在。,Window,类直接派生两个子类:,Frame,类与,Dialog,类。,AWT,的容器组件,容器作为特殊的组件,具有以下特征:,容器有一定的空间范围与尺寸,容器一般是矩形的,有些组件可以显示出边界外框。,容器有一定的位置坐标,该位置既可以显示器的绝对位置表达,也可以相对于其他容器边界的相对位置表达。,容器一般可以设定自己的背景颜色,还可对背景色设置透明度,并可将一幅图案加载到容器上作为特定背景。,加载到容器内的,GUI,界面元素随着容器的打开与显示而同步显示;当容器隐藏或关闭时,这些界面元素也跟随着被隐藏或关闭。,容器组件可以相互嵌套,即可将一个或多具容器对象放置到其他容器对象中,从而构建更为丰富的界面层次结构。,(6)Window,,,Frame,及,Dialog,是唯一有资格作为顶级容器窗口的三类组件。所谓顶级容器,就是能够直接加载到桌面,由桌面管理系统来管理,而不需要放置在任何其他容器对象内,并且能够作为其他容器属主的容器组件。,窗口容器组件,Window,Window,类为,Frame,类与,Dialog,类的基类,由它生成的,Window,对象称为窗口。,Window,对象不拥有边框与菜单栏,在创建,Window,对象时,必须指明它的属主,(owner),对象;能用作窗口属主的组件只能为顶级容器,window,、,frame,及,dialog,。用户编程时很少直接使用,Window,类对象作为程序的界面窗口,通常会使用该类的,Frame,子类生成应用窗口。,Window,类提供了若干重要方法,可被自身对象调用或被,Frame,或,Dialog,子类所继承。系统为它指定的默认布局管理器为,BorderLayout,。,框架容器组件,Frame,框架组件,Frame,是,AWT,应用程序最常使用的基本容器窗口之一,,Frame,对象可以带有边框、标题栏、菜单栏与窗口缩放功能按钮,(,包括窗口最大化、最小化及关闭三个按钮,),。,Frame,类提供了大量的方法来完成窗口对象的生成与设置。表,7.3,列出了,Frame,类的部分常用方法,(,由,Window,类继承来的方法一般不再重复列出,),。,框架容器组件,Frame,【,例,】,创建一个标题为,Frame Usage Demo-1,,背景色为蓝色,大小为,300200,的框架窗口。,运行效果如下,:,框架容器组件,Frame,import,java.awt,.*; /,导入,AWT,包的所有组件类,public class Exa_7_1 /,定义用户类,public static void,main(String,args,) ,Frame,myFrame,=new Frame(); /,调用无参构造方法创建窗口对象,myFrame.setTitle(Frame,Usage Demo-1);,/,调用,setTitle,(),方法设置窗口标题,myFrame.setSize(300,200); /,调用,setSize,(),方法设置窗口尺寸,myFrame.setBackground(Color.BLUE,); /,设置窗口背景色,myFrame.setVisible(true,); /,setVisible,(),方法设置窗口为可见,框架容器组件,Frame,创建窗口对象,(,以,Frame,类为例,),通常需要以下步骤:,一般用,“,import java.awt.*;,”,导入,AWT,开发工具包所有类;,3,1,3,2,定义用户类,可用,extends,子句指定用户类的父类为,Frame,;,3,3,使用窗口类的构造方法,(Frame,类有两个,),生成窗口实例对象,,或者用继承自父类的构造方法生成用户类的对象;,3,4,通过对象调用相应方法来设置窗口对象的标题,3,5,通过对象调用相应方法来设置窗口对象的尺寸大小、屏幕位置,前、背景色、布局管理方案等特性;,通过对象调用相应方法或设置属性,改变窗口对象默认的不可,见状态,使它能够在平台桌面上显示出来;,3,6,启动事件处理机制,为窗口对象设置关闭应用程序的功能。,3,7,对话框容器组件,Dialog,Window,类另一个重要的子类,Dialog,,常用来显示一个弹出式的信息窗口;该窗口具有标题与边框,一般没有菜单条与工具栏,窗口位置能够移动,却不支持尺寸的缩放。,Dialog,作为容器组件,能够为其他,GUI,组件提供安置空,间;它的默认布局管理器为,BorderLayout,;将组件添加,到,Dialog,对象,要使用,add(),方法;,Dialog,对象从,Window,类中继承了许多方法。这些特性,使得,Dialog,与,Frame,极,为类似。,对话框容器组件,Dialog,Frame,组件能够独立地作为应用程序的顶级窗口,为应用提供主界面;而,Dialog,组件则往往在主窗口已经存在的基础上,弹出一个临时窗口,充当着人机交互操作的辅助窗口,用来显示附加的信息,或接受用户输入的信息。,Dialog,对象不能独立存在,必须有一个上一级的容器窗口,来充当激活,Dialog,窗口的,owner(,译为拥有者或属主,),。有资格充当,Dialog,对象,owner,的组件只有三类,即:,Window,,,Frame,及,Dialog,类。,对话框容器组件,Dialog,Dialog,具有非模态,(modeless),与模态,(modal),两种类型。默认情况下为非模态模式。非模态对话框在处于活动状态时,它不阻塞其他窗口,(,包括,owner,窗口,),的活动,它和其他窗口可以交替进行各自的操作,即非模态对话框以相容的策略与其他窗口“和平共处,相互配合”。模态对话框则以互斥的策略独占系统资源,限制其他窗口的活动;在自身显示时,禁止用户操作其他窗口,直至自己关闭,其他窗口才有机会被从阻塞状态中恢复活动窗口的特征。,对话框容器组件,Dialog,【,例,】,创建一个模态对话框,.,程序的运行结果见图,对话框容器组件,Dialog,import,java.awt,.*;,class Exa3,public static void,main(String,args,),Frame,ownerWin,=new,Frame(Owner,Window of Dialog);,ownerWin.setBounds(100,100,300,200);,Dialog,dlgModal,=new,Dialog(ownerWin,Modal,Dialog Usage,Demo,true,);,dlgModal.setBounds(125,150,250,100);,dlgModal.add(new,Label(,这是一个模态对话框对象,);,ownerWin.setVisible(true,);,dlgModal.setVisible(true,);,对话框容器组件,Dialog,【,例,】,创建一个非模态对话框,.,程序的运行结果见图,对话框容器组件,Dialog,import,java.awt,.*;,class Exa_7_4 extends Frame,public Exa_7_4(String title),super(title,);,this.setSize(300,200);,this.setLayout(null,);,TextField,txtMain,=new,TextField,(,在此操作属主窗口,);,txtMain.setBounds(50,100,200,20);,this.add(txtMain,);,对话框容器组件,Dialog,public static void,main(String,args,),Exa_7_4,myWin,=new Exa_7_4(Owner Window of Dialog);,Dialog,dlgDefault,=new,Dialog(myWin,Modeless,Dialog Usage Demo);,dlgDefault.setSize(250,150);,dlgDefault.add(new,Label(,这是一个非模态对话框对象,);,/make window visible,myWin.setVisible(true,);,dlgDefault.setVisible(true,);,面板容器组件,Panel,Panel,主要用来为基本的,GUI,组件提供容器空间,并为这些容器提供一个分类、分组的手段。,Panel,类无法独立担当应用程序界面的顶端窗口,它必须放置在,Window,、,Frame,和,Dialog,这三种可以作为顶级窗口的容器组件内,才能被显示出来。,Panel,对象确定了一个矩形区域,该区域能够容纳其它的,GUI,组件,(,甚至也包括自身的类对象,),,并以特定的背景与边框,显示到顶级窗口对象中。,面板容器组件,Panel,Panel,类具有一个重要的,Applet,子类,该类主要支持,Web,浏览器窗口应用程序的构建。系统为,Panel,对象指定的默认布局管理器为,FlowLayout,。,向,Panel,对象中加入各类,GUI,组件要使用,add(),方法。,生成,Panel,对象要采用以下两种构造方法之一:,Panel,(),:无参的构造方法,创建一个采用,FlowLayout,默认布局管理器的面板对象;,Layout Manager,Panel,(,Layout,Manager,layout),:创建一个采用参数指定布局管理器的面板对象。,面板容器组件,Panel,【,例,7.5】,创建一个黄色面板和一个青色面板,将它们并排添加到标题为,Panel Usage Demo,,大小为,270200,的框架窗口内。 程序的运行结果见图,面板容器组件,Panel,import,java.awt,.*;,class Exa_7_5,public static void,main(String,args,),/create window,Frame,myWin,=new,Frame(Panel,Usage Demo);,myWin.setSize(270,200);,myWin.setLayout(null,);,/setting attributes of the first panel,Panel,pnlYellow,=new Panel();,pnlYellow.setBounds(20,50,100,120);,pnlYellow.setBackground(Color.YELLOW,);,面板容器组件,Panel,/setting attributes of the second panel,Panel,pnlCyan,=new Panel();,pnlCyan.setBounds(150,50,100,120);,pnlCyan.setBackground(Color.CYAN,);,/add panels to window,myWin.add(pnlYellow,);,myWin.add(pnlCyan,);,/make window visible,myWin.setVisible(true,);,应用窗体的屏幕居中,Java,的,GUI,屏幕坐标原点,(0,0),对应位置为屏幕的左上角,缺省的坐标单位为屏幕像素,.,GUI,应用程序的窗体起始位置默认为屏幕原点,(0,0),,,X,坐标由左至右增加,,Y,坐标由上至下增加。使用,setLocation(x,y,),或,setBounds(x, y, width, height),方法可以将应用窗体的左上角位置设置到指定的屏幕位置,(,x,y,),。,实际应用中,常需将主窗体置于整个屏幕中央。为此,首先需要获取实际屏幕的四个重要参数:屏幕原点的横坐标,screenOriginX,,屏幕原点的纵坐标,screenOriginY,,屏幕宽度,screenWidth,与屏幕高度,screenHeight,,然后还要获取主窗体的宽度,frameWidth,与高度,frameHeight,,利用这六个参数,不难由下面公式计算出主窗体居中于屏幕时它的左上角坐标,(,centerX,CenterY,),:,应用窗体的屏幕居中,centerX,=screenOriginX+(screenWidth-frameWidth)/2,centerY,=screenOriginY+(screenHeight-frameHeight)/2,窗体的宽度与高度可直接由,Frame,类的,getWidth,(),方法与,getHeight,(),方法获取;屏幕宽度与高度的获取,则需要借助于,AWT,包中定义的另两个类,Dimension,与,Toolkit,来完成。,Dimension(,尺度,),类封装了与特定组件相关的,width,与,height,属性,主要定义具有大小尺寸特征的对象。,Toolkit(,工具箱,),类作为抽象类,提供了与组件的本地化实现相关的方法描述。例如静态方法,getDefaultToolkit,(),,用来获取与平台相关的当前系统特征的默认实现,而抽象方法,getScreenSize,(),则用来获取屏幕的尺寸大小,其返回类型被定义为,Dimension,对象。,应用窗体的屏幕居中,下面的代码将完成获取与当前系统相关联的屏幕尺,寸的操作:,/,借助,Toolkit,类的方法获取当前系统的屏幕尺度对象,Dimension,screenSize,=,java.awt.Toolkit.getDefaultToolkit().getScreenSize,();,screenWidth,=,screenSize.width,; /,取出屏幕尺度对象的宽度分量,screenHeight,=,screenSize.height,; /,取出屏幕尺度对象的高度分量,AWT,的非容器组件,非容器组件具有一定的形状、位置与尺寸大小,有自己的属性与方法,用,new,调用所属类的构造方法来创建自身对象;,非容器组件无法独立存在于应用程序中,它们必须放置在容器组件中,并随着容器窗口一起显示。,非容器组件的位置、大小与排列状况一般要由所在的容器的布局管理器来决定,但也可以停用容器的布局管理器,从而取消布局管理器对组件排放状态的影响,然后调用相应的方法,按用户需要来设置组件的大小、位置和安放部署,这些方法主要有,setLocation,(),、,setSize,(),及,setBounds,(),。,非容器组件还有许多其他的通用方法,如设置组件前景色的,setForeground,(),方法和设置组件前景色的,setBackground,(),方法等。这些方法大多是从组件的公共抽象父类,Compenent,继承而来的。,关闭容器的布局管理器,只需调用容器组件的,setLayout(null,),方法。,标签组件,Label,Label,标签用来显示单行文本字符串信息,文本是静态的,可以在程序中通过调用,setText,(),方法来改变显示的文本。,标签对象可使用,setSize,(),方法设置大小,,setForeground,(),方法设置前景色,,setBackground,(),方法设置背景色。设置后用方法,add(),放置到容器中。,3,3,3,1,3,2,构造方法有三种重载形式:,public Label(),,无参构造方法创建一个空白内容的标签,,public Label(String content),,创建一个以,content,参数为初始,显示内容的标签;,public Label(String content,int alignment),,创建以,content,为内容,的标签,,alignment,为整形常量,控制文本在对齐方式。,Alignment,一般取值:左对齐常量,Label.LEFT,,右对齐常量,Label.RIGHT,,居中对齐常量,Label.CENTER,。,Label,组件的默认对齐方式为左对齐。,标签组件,Label,【,例,7.7】,创建大小相同、背景色不同、显示内容与文本的对齐方式各不相同的三个标签,并将它们左端对齐,竖向排列在一个,300200,大小的窗口内。,标签组件,Label,import,java.awt,.*;,class Exa_7_7 extends Frame,/,定义用户类的构造方法,该方法用以创造带有标题的窗口,public Exa_7_7(String title),super(title,); /,调用父类,(,即,Frame,类,),的构造方法,Frame(String,title),标签组件,Label,public static void,main(String,args,) ,Exa_7_7 app=new Exa_7_7(Label Usage Demo); /,生成应用窗口对象,app,app.setSize(300,200); /,设置应用窗口的尺寸,app.setLayout(null,); /,强制关闭应用窗口的布局管理器,/,创建第一个标签对象,lbl_1,并设置其属性,Label lbl_1=new Label(); /,调用构造方法创建空白标签,lbl_1.setText(I am the first label);,/,指定标签,1,显示的内容文本,lbl_1.setBounds(50,50,200,30);/,设置标签,1,的位置与大小,lbl_1.setBackground(Color.CYAN);/,设置标签,1,的背影色为青色,标签组件,Label,/,创建第二个标签对象,lbl_2,并设置其属性,Label lbl_2=new,Label(I,am the second label);,lbl_2.setBounds(50,100,200,30);,lbl_2.setForeground(Color.RED); /,设置标签,2,的文本颜色为红色,lbl_2.setAlignment(Label.CENTER); /,设置标签,2,的文本为居中对齐,标签组件,Label,/,创建第三个标签对象,lbl_3,并设置其属性,Label lbl_3=new,Label(I,am the third,label,Label.RIGHT,); /,标签,3,为右对齐,lbl_3.setBounds(50,150,200,30);,lbl_3.setBackground(Color.YELLOW);/,设置标签,3,为黄色背影,/,调用容器的,add(),方法将三个标签对象添加到应用窗口中,app.add(lbl_1);,app.add(lbl_2);,app.add(lbl_3);,/,显示当前状态的应用窗口,app.setVisible(true,);,按钮组件,Button,按钮是图形用户界面中非常重要的一种基本组件,按钮本身不显示信息,它一般对应一个事先定义好的功能操作,并对应一段程序。当用户点击按钮时,系统自动执行与该按钮相联系的程序,从而完成预先指定的功能。,创建,:,下面的语句用来创建按钮,传递给构造函数的字符串参数指明了按钮上的标签:,Button enter = new Button ( ,操作,),常用方法,:,调用按钮的,getLabel( ),方法可以返回按钮标签字符串;调用按钮的,setLabel(String s),方法可以把按钮的标签设置为字符串,s,产生事件,:,当用户单击一个按钮时就引发了一个动作事件,3,3,3,1,3,2,按钮组件,Button,【,例,7.8】,创建四个大小相同的,6030,尺寸的按钮,依照其标题的意义分别安置到上、下、左、右四个方位,使它们呈十字形,并对称地排放到,280270,的窗口中心。,按钮组件,Button,import,java.awt,.*;,class Exa_7_8,public static void,main(String,args,),/,生成,Frame,窗口对象并设置其尺寸大小,Frame handle=new,Frame(Button,Usage Demo);,handle.setSize(280,270);,handle.setLayout(null,); /,关闭窗口对象的布局管理器,/,生成带有标题的上、下、左、右四个按钮对象并设置其位置与尺寸,Button btn4Up=new,Button(UP,);,btn4Up.setBounds(110,60,60,30);,Button btn4Down=new,Button(DOWN,);,按钮组件,Button,btn4Down.setBounds(110,180,60,30);,Button btn4Left=new,Button(LEFT,);,btn4Left.setBounds(50,120,60,30);,Button btn4Right=new,Button(RIGHT,);,btn4Right.setBounds(170,120,60,30);,/,将四个按钮对象添加到窗口容器中,handle.add(btn4Up);,handle.add(btn4Down);,handle.add(btn4Left);,handle.add(btn4Right);,handle.setVisible(true,);,文本组件,(,TextComponent,),文本框与文本域,(,TextField,与,TextArea,),Java,中用于文本处理的基本组件有两种:单行文本框,TextField,和多行文本区域,TextArea,,它们都是,TextComponent,的子类。,创建,在创建文本组件的同时可以指出文本组件中的初始文本字符串,如下面的语句创建了一个,10,行,45,列的多行文本区域:,TextArea,textArea1 = new TextArea(10,45);,而创建能容纳,8,个字符,初始字符串为“姓名”的单行文本框可以使用如下的语句:,TextField,name = new,TextField,(,姓名,8);,文本组件,(,TextComponent,),常用方法,TextField,和,TextArea,都是常用方法。,对于用户输入的信息,可以调用,TextComponent,的,getText,( ),方法来获得。若希望在程序中对文本区域显示的内容赋值,可调用,TextComponent,的,setText,( ),方法。,textArea1.setText(,你好,欢迎!,);,TextComponent,中还有一些用来指定或获得文本区域中“选定状态”文本的方法,选定状态的文本一般用高亮或反白显示,,select(int,start,int,end),方法将根据指定的起止位置选定一段文本;,selectAll,( ),方法将选定文本区域中的所有文本;,setSelectionStart,( ),方法和,setSelectionEnd,( ),方法分别指定选定文本的起、止位置;如果文本区域中已经有选定文本,,getSelectionStart,( ),方法和,getSelectionEnd,( ),方法将获得选定文本的起、止位置;如果希望获得选定文本的具体内容,可以调用,getSelectedText,( ),方法。,文本组件,(,TextComponent,),除了继承,TextComponent,类的方法,,TextField,还定义了一些自己的特殊方法,例如某些场合下,(,如输入密码时,),希望文本区域中的内容不如实回显在屏幕上,可以调用如下的方法:,TextField,tf,= new,TextField,(,输入密码,);,tf.setEchoChar,(*);,TextField,还定义了,echoCharIsSet( ),方法确认当前文本框是否处于不回显状态;,getEchoChar( ),方法获得当前文本框不回显的屏蔽字符。,除了继承,TextComponent,类的方法,,TextArea,也定义了两个特殊的方法,append(String s),和,insert(String s, int index),。,append(String s),方法在当前文本区域已有文本的后面添加字符串参数,s,指定的文本内容;,insert(String s, int index),方法将字符串,s,插入到已有文本的指定序号处。,文本组件,(,TextComponent,),事件响应,TextField,和,TextArea,的事件响应首先由它们的父类,TextComponent,决定,,TextComponent,可以引发一种事件:当用户修改文本区域中的文本,如做文本的添加、删除、修改等操作时,将引发,TextEvent,对象代表的文本改变事件。,在此基础上,TextField,还比,TextArea,多产生一种事件,当用户在文本框中按回车键时,将引发代表动作事件的,ActionEvent,事件,,TextArea,却不能产生,ActionEvent,事件,也没有,addActionListener,( ),这个方法。,文本域组件,TextField,【,例,】,实现如图所示的身份验证界面。其中窗口大小为,300200,,标签尺寸为,7020,,文本域尺寸为,10020,,按钮尺寸为,10030.,文本域组件,TextField,import,java.awt,.*;,class Exa_7_9 extends Frame,/,类的构造方法,public Exa_7_9(String title),super(title,); /,调用父类的构造方法显示程序标题,this.setSize(300,200); /,设置窗口对象尺寸,this.setLayout(null,); /,取消窗口对象的布局管理器,/,入口窗口对象并设置其尺寸大小,文本域组件,TextField,public static void,main(String,args,), Exa_7_9 app=new Exa_7_9(TextField Usage Demo);,/,用户姓名栏目对应的标签与文本域组件设置,Label,lblName,=new,Label(UserName,:);,lblName.setBounds(60,50,70,20);,TextField,txtName,=new,TextField,();,txtName.setBounds(135,50,100,20);,/,用户口令栏目对应的标签与文本域组件设置,Label,lblPass,=new,Label(Password,:);,lblPass.setBounds(60,90,70,20);,TextField,txtPass,=new,TextField,();,文本域组件,TextField,txtPass.setEchoChar,(*); /,设置输入文本域的回显字符,txtPass.setBounds(135,90,100,20); /,设置命令按钮,Button,btnVerify,=new,Button(ID,Validate);,btnVerify.setBounds(100,140,100,35);,/,将各类组件添加到窗口容器内,app.add(lblName,);,app.add(txtName,);,app.add(lblPass,);,app.add(txtPass,);,app.add(btnVerify,);,/,设置窗口的位置并设置将它显示出来,app.setLocation(200,100);,app.setVisible(true,);,文本区组件,TextArea,【,例,】,在,300200,的窗口中心位置安置一个大小为,260140,的文本域组件,组件的初始化内容为泰戈尔的一首诗,并选取中间的三行诗句。,文本区组件,TextArea,import,java.awt,.*;,class Exa_7_10 extends Frame,public Exa_7_10(),super(TextArea,Usage Demo);,this.setBounds(100,100,300,200);,this.setLayout(null,);,public static void,main(String,args,), Exa_7_10 app=new Exa_7_10();,/setting,TextArea,content,TextArea,txtPoem,=new,TextArea(Stray,birds of summern);,txtPoem.append(Come,to my window,nTo,sing and fly wayn);,txtPoem.append(And,yellow leaves of autumn,nWhich,have no songsn);,txtPoem.append(Flutter,and fall there with a sign,nO,troupe of little vagrantsn);,txtPoem.append(of,the world,nLeave,your footprints in my wordsn);,txtPoem.setForeground(Color.RED,);,txtPoem.setBounds(20,40,260,140);,txtPoem.select(61,143);,app.add(txtPoem,);,app.setVisible(true,);,复选框组件,Checkbox,与,单选按钮组,复选按钮,(Checkbox),(1),创建,复选按钮又称为检测盒,用,Checkbox,类的对象表示。创建复选按钮对象时可以同时指明其文本说明标签,这个文本标签简要地说明了检测盒的意义和作用。,Checkbox,backg,= new Checkbox(,背景色,);,(2),常用方法,每个复选按钮都只有两种状态:被用户选中的,check,状态,未被用户选中的,uncheck,状态,任何时刻复选按钮都只能处于这两种状态之一。查看用户是否点击选择了复选按钮,可以调用,Checkbox,的方法,getState,( ),,这个方法的返回值为布尔量。若复选按钮被选中,则返回,true,,否则返回,false,。调用,Checkbox,的另一个方法,setState,( ),可以用程序设置是否选中复选按钮。例如下面的语句将使,Checkbox,处于选中的状态。,backg.setState,( true );,复选框组件,Checkbox,与,单选按钮组,单选按钮组,(,CheckboxGroup,),(1),创建,Checkbox,只能提供“二选一”的机制。要想实现“多选一”,可以选择单选按钮组。单选按钮组是一组,Checkbox,的集合,用,CheckboxGroup,类的对象表示。每个,Checkbox,对应一种可能的取值情况,例如,下面语句创建的单选按钮组。,style = new,CheckboxGroup,( );,p = new Checkbox(,普通,true,style,);,b = new Checkbox(,黑体,false,style,);,i = new Checkbox(,斜体,false,style,);,把,CheckboxGroup,加入容器时需要把其中的每个单选按钮逐个加入到容器中,而不能使用,CheckboxGroup,对象一次性地加入。例如,加入上面的单选按钮需引用如下的语句:,add(p,);,add(b,);,add(i,);,复选框组件,Checkbox,与,单选按钮组,(2),常用方法,单选按钮的选择是互斥的,即当用户选中了组中的一个按钮后,其他按钮将自动处于未选中状态。调用,CheckboxGroup,的,getSelectedCheckbox,( ),方法可以获知用户选择了哪个按钮,这个方法返回用户选中的,Checkbox,对象,再调用该对象的方法,getLabel,( ),就可以知道用户选择了什么信息。同样,通过调用,CheckboxGroup,的,setSelectedCheckbox,( ),方法,可以在程序中指定单选按钮组中的那个按钮。例如,下面的语句说明字体的风格为斜体。,sex.setSelectedCheckbox,( i );,复选框组件,Checkbox,与,单选按钮组,也可以直接使用按钮组中的,Checkbox,单选按钮的方法。例如直接调用,i.getState,( );,就可以知道这个按钮是否被选中。如果这个按钮被选中了,那么其他按钮一定处于未选中状态。单选按钮组中可以包括两个或更多的单选按钮。,(3),事件响应,CheckboxGroup,类不是,java.awt,.*,包中的类,它是,Object,的直接子类,所以按钮组不能响应事件,但是按钮组中的每个按钮可以响应,ItemEvent,类的事件。由于单选按钮组中的每个单选按钮都是,Checkbox,对象,它们可以响应,ItemEvent,类的事件,复选框组件,Checkbox,与,单选按钮组,【,例,】,在,220200,的窗口中构造个人信息选择的界面,界面中有两组基本信息,一组用单选按钮来选择个人的性别特征,另一组用复选框来选择个人喜爱的水果类型。,复选框组件,Checkbox,与,单选按钮组,import,java.awt,.*;,class Exa_7_11 extends Frame,public Exa_7_11(String title),super(title,);,this.setSize(220,200);,this.setLayout(null,);,/,主方法,main(),public static void,main(String,args,),Exa_7_11 app=new Exa_7_11(Checkbox,/setting User Name field,Checkbox,chk,=new,Checkbox(Male),new,Checkbox(Female,),new,Checkbox(Apple),new,Checkbox(Orange,),new,Checkbox(Mango,);,Label,lblPrompt,=new,Label(The,Information of Myself:);,lblPrompt.setBounds(35,40,150,20);,app.add(lblPrompt,);,CheckboxGroup,sexGroup,=new,CheckboxGroup,();,Label,lblSex,=new,Label(My,Sex:);,lblSex.setBounds(20,70,50,20);,app.add(lblSex,);,for (,int,k=0;k2;k+),chkk.setBounds(20,100+50*k,50,20);,chkk.setCheckboxGroup(sexGroup,);,复选框组件,Checkbox,与,单选按钮组,Label,lblFruit,=new,Label(My,Loving Fruit:);,lblFruit.setBounds(110,70,90,20);,app.add(lblFruit,);,for (,int,k=2;k5;k+),chkk.setBounds(125,100+25*(k-2),80,20);,for (,int,k=0;k5;k+),app.add(chkk,);,/make window visible,app.setLocation(200,100);,app.setVisible(true,);,复选框组件,Checkbox,与,单选按钮组,选择框组件,Choice,(1),创建,下拉列表也是“多选一”的输入界面。与单选按钮组利用单选按钮把所有选项列出的方法不同,下拉列表的所有选项被折叠收藏起来,只显示最前面的或被用户选中的一个。如果希望看到其他的选项,只需单击下拉列表右边的下三角按钮就可以“下拉”出一个罗列了所有选项的长方形区域。,创建下拉列表包括创建和添加选项两个步骤。,Choice size = new Choice( ); /,创建下拉列表,size.add(10); /,为下拉列表加入选项,size.add(14);,size.add(18);,选择框组件,Choice,(2),常用方法,下拉列表的常用方法包括获得选中选项的方法、设置选中选项的方法、添加和去除下拉列表选项的方法。,getSelectedIndex,( ),方法将返回被选中的选项的序号,(,下拉列表中第一个选项的序号为,0,,第二个选项的序号为,1,,依此类推,),。,getSelectedItem,( ),方法将返回被选中选项的标签文本字符串。,select(int,index),方法和,select(String,item),方法使程序选中指定序号或文本内容的选项。,add(String,item),方法和,insert(String,item,int,index),方法分别将新选项,item,加在当前下拉列表的最后或指定的序号处。,remove(int,index),方法和,remove(String,item),方法把指定序号或指定标签文本的选项从下拉列表中删除。,removeAll,( ),方法将把下拉列表中的所有选项删除。,选择框组件,Choice,【,例,】,在,250200,的窗口中建立一个列有世界文学名著书目的选择框,用户可以从中选择个人最喜爱的一本著作。,选择框组件,Choice,import,java.awt,.*;,class Exa_7_12 ,public static void,main(String,args,) ,Frame,myWin,=new,Frame(Choice,Usage Demo);,myWin.setSize(250,200);,myWin.setLayout(null,);,Label,lblDepiction,=new,Label(The,book of which I am fondest:);,lblDepiction.setBounds(30,40,200,20);,Choice,chcBook,=new Choice();,chcBook.setLocation(25,65);,chcBook.add(Gone,with the Wind);,chcBook.add(The,Old Man and the Sea);,chcBook.add(David,Copperfield);,chcBook.add(The,Adventures of Tom Sawyer);,chcBook.add(Jane,Eyre);,chcBook.add(Pride,and Prejudice);,myWin.add(lblDepiction,);,myWin.add(chcBook,);,myWin.setVisible(true,);, ,选择框组件,Choice,列表框组件,List,创建,列表也是列出一系列的选择项供用户选择,但是列表可以实现“多选多”,即允许复选。在创建列表时,同样应该将它的各项选择项,(,称为列表项,Item),加入到列表中去,如下面的语句:,MyList,= new List(4,true);,MyList.add,(,北京,);,MyList.add,(,上海,);,将创建一个包括两个地址选项的列表,,List,对象的构造函数的第一个参数表明列表的高度,可以一次同时显示几个选项,第二个参数表明列表是否允许复选,即同时选中多个选项。,列表框组件,List,常用方法,如果想获知用户选择了列表中的哪个选项,可以调用,List,对象的,getSelectedItem,( ),方法,这个方法返回用户选中的选择项文本。与单选按钮不同的是,列表中可以有复选和多选,所以,List,对象还有一个方法,getSelectedItems,( ),方法,该方法返回一个,String,类型的数组,里面的每个元素是一个被用户选中的选择项,所有的元素包括了所有被用户选中的选项。,除了可以直接返回被选中的选项的标签字符串,还可以获得被选中选项的序号。在,List,里面,第一个加入,List,的选项的序号是,0,,第二个是,1,,依此类推。,getSelectedIndex,( ),方法将返回被选中的选项的序号,,getSelectedIndexs,( ),方法将返回由所有被选中的选项的序号组成的整型数组。,列表框组件,List,事件响应,列表可以产生两种事件:当用户单击列表中的某一个选项并选中它时,将产生,ItemEvent,类的选择事件;当用户双击列表中的某个选项时,将产生,ActionEvent,类的动作事件,列表框组件,List,【,例,】,在当前窗口中放置一个显示内容为中国四大文学名著的列表框,用户可以从列表中选中一个或多个表项。,列表框组件,List,import,java.awt,.*;,class Exa_7_13,public static void,main(String,args,) ,Frame,myWin,=new,Frame(List,Usage Demo);,myWin.setSize(200,150);,myWin.setLayout(null,);,Label,lblDepiction,=new Label(,中国古典四大文学名著,:);,lblDepiction.setBounds(30,30,150,30);,/,创建,List,类的实例对象并增加中国古典四大名著的表项,List,lstWork,=new List(4,true);,lstWork.add,(,三国演义,);,lstWork.add,(,西游记,);,lstWork.add,(,水浒传,);,lstWork.add,(,红楼梦,);,lstWork.setForeground(Color.RED,);,lstWork.setBackground(Color.CYAN,);,lstWork.setBounds(55,60,80,70);,myWin.add(lblDepiction,);,myWin.add(lstWork,);,myWin.setVisible(true,);,列表框组件,List,滚动条组件,ScrollBar,滚动条特征变量的说明:,orientation,滚动条的方向类型,默认值为,Scro
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!