资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,*,*,*,第10章 小程序,本章主要讲述如下内容:,applet,程序的基本知识;,applet,程序的生命周期和常用方法;,输出中的颜色控制;,组件和容器之间的关系;,采用,Swing,和,AWT,分别设计常用组件:按钮、标签、文本行、文本域、选择框、下拉列表和列表。,1,10.1.1,小程序与应用程序的区别,applet,程序至少要用到两个包:,java.awt,和,java.applet(,或,javax.swing,)。,applet,必须继承类,Applet,或,JApplet,。,继承,Applet,或,JApplet,的类是程序主类,前面加,public。,applet,程序由浏览器在调用网页时执行,并以图形方式输出结果。且浏览器从主类开始执行。,每个,applet,程序必须有一个,HTML,文件,作为其标签。,2,10.1.2,小程序标签的语法格式,HTML,文件的常用格式如下:,VSPACE=pixelsHSPACE=pixels,3,import,java.awt,.*;,import java.applet.*;,public class,sayhello1,extends Applet,/ 程序10-2,String,str,;,public void paint(Graphics g) ,str,=,getParameter(who,);,/,获得参数,who,if(str,=null),str,=;,/,若获取参数失败,g.drawString(Hello,Java !,30,30);,g.drawString(str,30,50);,str,=,getParameter(date,);,if(str,=null),str,=;,g.drawString(str,60,70);,HTML,文件,sayhello1.html,,内容如下:,4,10.2,小程序的生命周期,小程序的生命周期是指一个,applet,程序从被下载起,到被系统回收所经历的过程。,5,10.2,小程序的生命周期(续),public void init( ):,其任务是初始化,并且,这个方法在小程序的生命周期中,仅被调用一次。,例如修改,sayhello1,如下:,6,public class exam extends Applet,String str1,str2;,public void init( ) ,/,比上例好,str1=,getParameter(who,);,str2=,getParameter(date,);,if(str1=null)str1=;,if(str2=null)str2=;,public void paint(Graphics g) ,g.drawString(Hello,Java !,30,30);,g.drawString(str1,30,50);,g.drawString(str2,60,70);,7,10.2,小程序的生命周期(续),2.,public void start( ):,在,init( ),方法执行后,就自动调用,start( ),方法。一般在,start,方法中实现线程的启动工作。,3.,public void stop( ):,该方法,假,结束,applet,程序。,4.,public void destroy( ):,这是一个,真正,结束,applet,程序生命的方法,该方法释放分配给,applet,的资源。,8,10.2,小程序的生命周期(续),5.,public void paint( Graphics g ):,在网页上输出,applet,程序的执行结果。,6.,public void update( Graphics g ):,先用背景色填充,Web,页面,以达到清除画面的目的,然后自动调用,paint( ),方法重新输出。,7.,public void repaint( ):,强制小程序重新输出,本质上通过调用,update( ),方法实现。,P100:repaint(),重载形式:,public,viod,repaint():,立即,update(),方法调用清除画面,public,viod,repaint(long,tm):,在,tm,毫秒内调用,update(),方法调用清除画面,public,viod,repaint(int,x,int,y,int,width,int,height),:清除一个矩形画面,public,viod,repaint(long,m,int,x,int,y,int,width,int,height);,在,tm,毫秒内清除,9,10.3,小程序常用方法,java.awt,包中的,Graphics,类,提供的方法可以输出字符、输出图形和图像、设置字体和颜色。,Graphics,类的,特殊之处:,该类对象由系统自动创建,通过该对象(常用的名称,g),直接调用,Graphics,类的各种方法。,10,10.3.1,常用的输出方法,输出字符的方法:,1.,drawString(String,str,int,x,int,y),/,当前字体和颜色输出字符串,2.,drawChars(char,data ,int,offset,int,n,int,x,int,y),/,从偏移量,offset,开始,输出字符数组,data,中的,n,个字符,3.,drawBytes(byte,data ,int,offset,int,length,int,x,int,y),11,10.3.1,常用的输出方法,/,程序,10-5,import,java.awt,.*;,import,java.applet,.*;,public class,drawChars,extends Applet,private String s=,Hello,Java,;,private char c =,H,e,l,l,o,;,private byte b =65,66,67,68,69,70,71,72; /,字符,A,的,ASCII,码是,65,public void,paint(Graphics,g) ,g.drawString(s,30,30);,g.drawChars(c,1,3,30,50);,g.drawBytes(b,1,5,30,70);,12,10.3.1,常用的输出方法(续),输出图形方法:,1.,public void,drawLine,(,int,x1,int,y1,int,x2,int,y2 ),2.,public void,drawRect,(,int,x,int,y,int,width,int,height ),3.,public void,drawOval,(,int,x,int,y,int,width,int,height ),4.,public void,fillRect,(,int,x,int,y,int,width,int,height ),5.,public void,fillOval,(,int,x,int,y,int,width,int,height ),6.,public void,clearRect,(,int,x,int,y,int,width,int,height ),/,采用当前颜色,,(,x,y,),为左上角,13,10.3.1,常用的输出方法(续),输出图形方法:,7.,public void,drawRoundRect,(,int,x,int,y,int,width,int,height,int,arcWidth,int,arcHeight,),8.,public void,fillRoundRect,(,int,x,int,y,int,width,int,height,int,arcWidth,int,arcHeight,),9.,public void draw3DRect(,int,x,int,y,int,width,int,height,boolean,raised ),10.,public void fill3DRect(,int,x,int,y,int,width,int,height,boolean,raised ),/,三维矩形:,true,凸起、凹陷,arcWidth,:包含圆弧的矩形的宽,14,10.3.2,输出中的颜色控制,直接使用,Color,类中提供的静态颜色变量;,通过三元组的形式,RGB,值(红绿蓝)来描述颜色。,13种颜色常量的,RGB,值如下:,15,Color.black(0,0,0),黑色,Color.blue(0,0,255),蓝色,Color.cyan(0,255,255),青色,Color.darkGray,(64,64,64),深灰色,Color.gray(128,128,128),灰色,Color.green(0,255,0),绿色,Color.lightGray,(192,192,192),浅灰色,Color.magenta(255,0,255),紫红色,Color.orange(255,200,0),橙色,Color.pink(255,175,175),粉红色,Color.red(255,0,0),红色,Color.white(255,255,255),白色,Color.yellow(255,255,0),黄色,16,10.3.2,输出中的颜色控制(续),public,Color(int,r,,int,g,,int,b):,参数为0255之间的整数,分别代表红、绿、蓝颜色的含量。,public void,setColor,( Color c ):,采用,c,设置颜色。,public Color,getColor,( ):,返回当前设置的颜色。,程序,10-6,采用颜色输出图形。,17,/ 程序10-6,import,java.awt,.*;,import java.applet.*;,public class,drawGraphics,extends Applet,public void paint(Graphics g) ,for(int,i=0;i6;i+),/,每次输出一种图形,showGraphics(i, g);,public void,showGraphics(int,n,Graphics,g),g.clearRect(0,0,200,200);,switch(n,),case 0:,/,输出一个黑色直线,g.setColor(Color.black,);,g.drawLine(30,30,160,160);,break;,case 1:,/,输出一个蓝色空心矩形,g.setColor(Color.blue,);,g.drawRect(30,30,160,160);,break;,case 2:,/,输出一个深灰色圆角矩形,g.setColor(Color.darkGray,);,g.drawRoundRect(30,30,160,160,20,120);,break;,case 3:,/,输出一个绿色椭圆,g.setColor(Color.green,);,g.drawOval(30,30,160,160);,break;,case 4:,/,以填充方式输出一个橙色椭圆,g.setColor(Color.orange,);,g.fillOval(30,30,160,160);,break;,case 5:,/,输出一个紫红色凸起的三维矩形,g.setColor(Color.magenta,);,g.draw3DRect(30,30,160,160,true);,break;,try,/,为了便于观察,让程序睡眠2秒,Thread.sleep(2000);,catch(InterruptedException,e),System.exit(0);,18,10.4,常用组件,Java,组件的类型:,AWT,和,Swing。,AWT:,第一代组件(小程序),Swing,:第二代组件,,建立在,AWT,之上,更丰富,(应用程序),对于应用程序建议采用,Swing,组件,对于小程序采用,AWT,组件。,19,10.4.1 组件和容器的关系,组件是构成,GUI,的基本元素:按钮、标签、画布、复选框 等;,容器是一种包含对象。组件必须放到容器对象中。容器可以容纳其他组件和容器。常用容器:框架,、,窗口、面板等。,组件和容器之间的关系如图10.2。,20,a,组件和容器之间的关系,21,10.4.2 按钮,AWT,的,Button,类,的构造函数:,1.,public Button( ),/,生成一个没有标记的按钮,2.,public Button( String label ),Button,类的主要方法有:,1.,public void,setLabel,( String label ),/,设置按钮标记,2.,public String,getLabel,( ),/,获取按钮标记,22,10.4.2 按钮(续),3.,public void,addActionListener,(,ActionListener,l ),将,l,对象指定为按钮的监听者。,4.,public void,removeActionListener,(,ActionListener,l ),将参数,l,对象从监听者中去掉。,5.,protected void,processActionEvent,(,ActionEvent,e ),处理按钮产生的,ActionEvent,类型的事件。,6.,protected void,processEvent,(,AWTEvent,e ),处理按钮产生的所有类型的事件。,23,10.4.2 按钮(续),JButton,是,Swing,提供的一个类,例如:,import java.applet.Applet;,import,java.awt,.*,;,/,程序10-7,import,javax.swing,.*,;,public class,showButton,extends Applet ,Button,b1;,JButton,b2;,public void init( ),b1=new Button(Button1);,b2=new JButton(Button2);,add(b1); add(b2);,24,10.4.3,标签,标签是用来显示一个单行文本的组件;,AWT,用,Label,表示,,Swing,用,Jlabel,表示;,Label,类常用的方法:,1.,public Label( ),/,生成一个空的标签,无文本显示,2.,public Label(String S),/,生成一个带有指定文本的标签,3.,public Label(String S,int,alignment),生成一个带有指定文本和,对齐方式,的标签。,25,10.4.3,标签(续),对齐方式:,左,、右和居中,对应的静态常量,Label.LEFT,、,Label.RIGHT,、,Label.CENTER,;,4.,public String,getText,( ),/,返回标签的文本,5.,public void,setText(String,S),/,采用,S,设置标签文本,6.,public String,getAlignment,( ),/,返回标签的对齐方式,26,10.4.3,标签(续),JLabel,类的对齐方式同上,三个静态常量,JLabel.LEFT,、,JLabel.RIGHT,、,JLabel.CENTER,。,例如程序10-8:,27,public class,showLabel,extends Applet ,/ 程序10-8,private Label L1;,private,JLabel,L2;,public void init( ) ,L1=new Label( );,L1.setText(“AWT,标签”);,L1.setAlignment(Label.LEFT);,L2=new,JLabel(Swing,标签,JLabel.RIGHT,);,setLayout(new,GridLayout(3,3);,add(L1);,add(L2);,28,10.4.4,文本行,文本行是一个单行的文本域,可接受从键盘输入的信息;,TextField,类的常用方法:,1.,public,TextField,( ):,3个字符的空文本行。,2.,public,TextField(int,cols),/,生成一个指定列数的文本框,3.,public,TextField(String,text),/,生成一个带有文本,text,的文本框,4.,public,TextField(String,text,int,cols),/text,为文本框的显示内容,,cols,为文本框的显示宽度,29,10.4.4,文本行(续),5.,public void,addActionListener,(,ActionListener,l ),/,将l对象指定为,文本框的,ActionListener,事件,监听者,6.,public void,removeActionListener,(,ActionListener,l ),/,将,参数,l对象,从文本框,监听者,中去掉,7.,public void,setEchoChar,( char c ):,设置用户输入的响应字符,防止他人偷看。,8.,public char,getEchoChar,( ):,获取响应字符。,30,10.4.4,文本行(续),JTextField,类的构造函数:,1.,public,JTextField,( ),2.,public,JTextField(int,cols),3.,public,JTextField(String,text),4.,public,JTextField(String,text,int,cols),31,10.4.4,文本行(续),JTextField,类的一个子类,JPasswordField,,,提供了掩盖输入文本的方法。 例如,程序,10-9 :,/,程序,10-9,32,/,程序10-9,import,java.awt,.*;,import,java.applet.Applet,;,import,javax.swing,.*;,public class Applet_1 extends Applet ,private,TextField,t1;,private,JPasswordField,pass;,public void init( ) ,t1=new TextField(20);,t1.setEchoChar(*);,/,设置,t1,的显示字符,pass=new JPasswordField(20);,pass.setEchoChar,(#);,/,设置,pass,的显示字符,add(new TextField(20); add(t1);,add(new JTextField(Hello,20); add(pass);,33,10.4.5,文本域,AWT,的,TextArea,类可生成一个多行的文本域,内容超出显示范围时,具有滚动显示的功能。,TextArea,类的,构造函数,:,1.,public,TextArea,( ) /,生成一个空的文本域,2.,public,TextArea,( String text ) )/,生成一个具有指定文本的文本域,3.,public,TextArea,(,int,rows,int,columns ),4.,public,TextArea,( String text,int,rows,int,columns ),5.,public,TextArea,( String text,int,rows,int,columns,int,scrollbars,)/,生成一个具有指定文本、行数和列数以及滚动方式的文本域。,34,10.4.5,文本域(续),滚动方式,采用四个静态常量表示:,SCROLLBARS_NONE、SCROLLBARS_VERTICAL_ONLY、SCROLLBARS_HORIZONTAL_ONLY 、SCROLLBARS_BOTH。,TextArea,类的常用方法:,1.,public void append( String,str,)/,向文本域对象追加文本,2.,public,int,getColumns,( ) /,获取,TextArea,对象的列数,35,10.4.5,文本域(续),3.,public,int,getRows,( ),4.,public,int,getScrollbarVisibility,( ),返回滚动方式,5.,public void insert( String,str,int,pos,)/,在指定位置插入文本,6.,public void,replaceRange,( String,str,int,start,int,end ),/,采用,str,替换由,start,和,ent,制动范围内的文本,7.,public void,setColumns,(,int,columns ),8.,public void,setRows,(,int,rows,)/,设置,TextArea,对象的行数,36,10.4.5,文本域(续),JTextArea,与,TextField,类似;,JTextArea,和,JList,组件一样,,必须,放在,JScrollpane,中。,37,10.4.6,选择框,复选框,JCheckBox(Swing,),的常用构造函数:,1.,public,JCheckBox,( ),创建一个没有标签的,JCheckBox,对象,,初始化状态是未选中。,2.,public,JCheckBox(Icon,icon),创建带图标的,JCheckBox,对象,,初始化状态是未选中。,3.,public,JCheckBox(Icon,icon,boolean,selected,),/,创建带图标的,JCheckBox,对象,并指定其初始化状态,,Selected,为,true,是选中,4.,public,JCheckBox(String,S),创建带标签的,JCheckBox,对象,,初始化状态是未选中,5.,public,JCheckBox(String,S,boolean,selected),/,创建带标签的,JCheckBox,对象,并指定其初始化状态,38,10.4.6,选择框(续),单选框,JRadioButton,的构造函数:,public,JRadioButton,( ),/,创建一个没有标签的,JRadioButton,对象,,初始化状态是未选中,2.,public,JRadioButton(Icon,icon),/,创,建一个带图标的,JRadioButton,对象,,初始化状态是未选中,3.,public,JRadioButton(Icon,icon,boolean,selected),/,创建带图标的,JRadioButton,对象,并指定其初始化状态,,Selected,为,true,是选中,4.,public,JRadioButton(String,S),/,创建带标签的,JRadioButton,对象,,初始化状态是未选中,5.,public,JRadioButton(String,S,boolean,selected),/,创建带标签的,JRadioButton,对象,并指定其初始化状态,39,10.4.6,选择框(续),ButtonGroup,类,(,与,JRadioButton,配合,使用,),:将相互独立的单选框构成一组,常用方法:,1.,public,ButtonGroup,( ),2.,public void add(,AbstractButton,b):,将一个按钮组件添加到,ButtonGroup,组件中。,3.,public,int,getButtoncount,( ),/,返回,ButtonGroup,组件中包含的按钮个数,4.,public void remove(,AbstractButton,b) ),/,将一个按钮组件从,ButtonGroup,组件中移除。,40,程序10-11演示了几种选择框的用法。,import,java.awt,.*;,import java.applet.Applet;,import,javax.swing,.*;,public class,testBoxButton,extends Applet ,JCheckBox,jcb1,jcb2;,/,复选框,JRadioButton,jr1,jr2,jr3;,/,单选框,ButtonGroup,group;,public void init( ) ,jcb1=new,JCheckBox(I,love,Java,true,);,jcb2=new,JCheckBox(I,love,C+,true,);,jr1=new,JRadioButton(Lisp,true,);,jr2=new,JRadioButton(C,false);,jr3=new,JRadioButton(Ada,true,);,group=new,ButtonGroup,( );,group.add(jr2);,group.add(jr3);,/ 不能将,group,加入到,applet。,setLayout(new,GridLayout(5,1);,add(jcb1); add(jcb2);,add(jr1); add(jr2); add(jr3);,41,程序运行结果,:,42,10.4.7,下拉列表,Java,下拉列表两种:,AWT,提供,Choice,类,Swing:,提供的,JComBox,类,AWT,的下拉列表采用,Choice,类实现,常用方法:,1.,public Choice( ),/,创建一个下拉列表对象,不包含任何选项,2.,public void,addItem(String,item),/,下拉列表中添加,item,选项,3.,public void,addItemListener(ItemListener,l),/,将参数,1,加到下拉列表的监听者中。,4.,public,int,countItems,( ),/,返回当前下拉列表中选项的个数,5.,public String,getItem(int,index),/,返回参数,Index,指定的选项,6.,public,int,getSelectedIndex,( ),返回选中项的下标。,7.,public String,getSelectedItem,( ),返回选中的项。,43,10.4.7,下拉列表(续),Swing,的,JComBox,类的常用方法:,1.,public,JComBox,( ),/,创建一个下拉列表对象,不包含任何选项,2.,public,JComBox(Object,object ),创建一个下拉列表,采用对象数组初始化该列表。,3.,其余的方法与,Chioce,提供的类似,略。例如:,44,/ 程序10-12,import,java.awt,.*;,import java.applet.Applet;,import,javax.swing,.*;,public class Applet_1 extends Applet ,Choice choice;,/ AWT,提供的组件,JComboBox,jbox,;,/ Swing,提供的组件,String,str, =,Ace,Deuce,Three,Four,;,/ String,数组,public void init( ) ,setLayout(new,GridLayout(3,2);,choice=new Choice( );,/,生成一个,Choice,对象,choice.addItem(Java,);,/,将参数加入对象,choice.addItem(C,+);,choice.addItem(C,);,choice.addItem(C,#);,add(choice,);,choice.select(2);,/,初始设定下标为2的选项,jbox,=new,JComboBox(str,);,/,采用对象数组生成下拉列表对象,jbox.setMaximumRowCount(3);,/,列表在显示时,一次最多显示,3,个选项,add(jbox,);,45,程序运行结果 :,Choice,对象,jbox,对象,46,10.4.8,列表,列表用于在多个列表项中选择,列表项是从0开始编号;,AWT,提供了,List,对象表示列表,而,Swing,是用,Jlist,表示;,List,类常用方法:,1.,public List( ),:,创建一个空的,List,对象,仅允许选中一个选项,2.,public,List(int,rows) :,创建一个空的,List,对象,,指定显示的项数。,3.,public,List(int,rows,boolean,multipleSelections,),/,创建一个具有,rows,的,List,对象,,如果,multipleSelections,为真,可以从列表中选择多个选项。,47,10.4.8,列表(续),Swing,用,Jlist,表示,其两个常用构造函数:,1.,public,JList,( ),2.,public,JList(Object,object ),注意:,1.,List,在缺省(默认)方式下不支持多选,而,Jlist,支持多选。,2.,JList,必须放在,JScrollPane,中,否则不支持滚动。,48,/ 程序10-13,演示了,JList,对象的应用,import,java.awt,.*;,import,java.applet.Applet,;,public class,testList,extends Applet ,String,str, =,Red,Blue,Green,Yellow,;,List,list,;,public void init( ) ,list=new List( );,for(int,i=0;i,str.length;i,+),list.add(stri,);,list.setMultipleMode(true,);/,设置多选模式,list.select(1);,list.select(3);,add(list,);,49,程序运行结果,如下:,50,思考和练习,P194 12,51,
展开阅读全文