[计算机软件及应用]Java回顾---例子驱动1_第1页
[计算机软件及应用]Java回顾---例子驱动1_第2页
[计算机软件及应用]Java回顾---例子驱动1_第3页
[计算机软件及应用]Java回顾---例子驱动1_第4页
[计算机软件及应用]Java回顾---例子驱动1_第5页
已阅读5页,还剩79页未读 继续免费阅读

下载本文档

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

文档简介

1、单击此处编辑母版标题样式单击此处编辑母版文本样式第二级第三级第四级第五级*第一部分 Java回顾(一)-例子驱动第一节 Java语言根底1Java采用国际化的Unicode字符集。 Unicode字符集:每个字符占二个字节共65535个字符。其中,前面256个字符表示ASCII码,使Java对ASCII码具有兼容性;后面21000个字符用来表示汉字等非拉丁字符。 2标识符的命名 标识符可以由字母、数字、下划线“_和美元符号“$组成,但必须以字母、下划线或美元符号开头。 注意:JAVA中的字母包括了世界上任何语言中的“字母表 3 break和continue语句break语句通常有不带标号和带标

2、号两种形式:break;break Lab; /使程序流程直接退出标号Lab所指明的外循环。 Continue使循环短路。有两种形式:continue;continue lab;当程序中有嵌套的多层循环时,为从内循环直接跳到外循环,可使用带标号的continue lab语句。【例c1_1.java】 continue语句例如程序。public class c1_1public static void main(String args) int j; p1: for(int i=1;i=10;i+) j=1; while(j=11-i) System.out.print( ); j+; for(

3、j=1;j=i;j+) if(i=3) continue; /当i等于3时,不执行后面的两条语句 if(j=9) continue p1; /当j等于9时,跳到外循环入口处 System.out.print(+i+ ); System.out.println( ); 第二节 类、对象和接口1类是对象的抽象和归纳,对象是类的实例。2创立对象-包括声明对象和建立对象。 声明对象就是确定对象的名称,并指明该对象所属的类,此时对象还不是类的实例:类名 对象名表; 建立对象就是用new为对象分配存储空间,使该对象成为类的实例: 对象名=new 构造方法( ); 也可合二为一:类名 对象名=new 构造方

4、法( ) 3 JAVA中除了根本类型整型、浮点型、字符型外,均为引用型数组、对象。例:对象的引用与实体class 圆 double 半径; 圆(double r) 半径=r; double 计算面积() return 3.14*半径*半径; void 修改半径(double 新半径) 半径=新半径; double 获取半径() return 半径;class 圆锥 圆 底圆;/引用 double 高; 圆锥(圆 circle,double h) this.底圆=circle; this.高=h; double 计算体积() double volume; volume=底圆.计算面积()*高/3

5、.0; return volume; void 修改底圆半径(double r) 底圆.修改半径(r); double 获取底圆半径() return 底圆.获取半径();class Example2_1 public static void main(String args) 圆 circle=new 圆(10); 圆锥 circular=new 圆锥(circle,20); System.out.println(圆锥底圆半径:+circular.获取底圆半径(); System.out.println(圆锥的体积:+circular.计算体积(); circular.修改底圆半径(100)

6、; System.out.println(圆锥底圆半径:+circular.获取底圆半径(); System.out.println(圆锥的体积:+circular.计算体积(); 第三节 类库、包及访问控制 Java语言由语法规那么和类库两局部组成。 Java类库(JFC)是系统定义的类的集合,它可以帮助开发者方便、快捷地开发Java程序。当编写Java程序时,直接利用现成的类库,不仅可以提高编程效率,也可以保证软件的质量。 在Java系统中,根据实现的功能不同,将系统定义好的类划分成不同的集合。每个集合称为一个包,所有包合称为类库。Java类库的每个包中都有假设干个具有特定功能和相互关系的

7、类和接口。例如,java.lang包中包含了运行Java程序必不可少的系统类,它们包括根本数据类型、根本数学方法、字符串处理等类;java.awt包中包括了用来构建图形用户界面(GUI)的类库。 类的一般定义形式: 类修饰符 class 类名 extends 父类名 implements 接口列表 修饰符 数据成员类型 数据成员名表; 修饰符 返回值的类型 成员方法名(形式参数表)throws 异常表 在定义一个类而不给出extends关键字及父类名时,默认这个类是系统类object的子类。 (1) 修饰符可以是public、private、protected等访问权限修饰符,也可以是stat

8、ic、final等非访问权限修饰符。 (2) 访问权限修饰符是一组用于指明类、成员何时可以被其他类访问的控制符。非访问权限修饰符指明使用方式。 (3) throws 指出当该方法遇到异常情况时如何处理。 (4) implements 接口列表: Java本来只支持单继承,为了给多重继承的软件开发提供方便,它提供了这一接口机制。 (5) 在Java程序中,成员的声明只能在类中进行 (6) 缺省访问控制符说明具有“友好访问特性【例如程序c3_1.java】 static及final成员import java.awt.*;import javax.swing.*;class ca static in

9、t n=20; final int nn; /声明nn,但没有赋初值 final int k=40;/声明k并赋初值40 ca( ) nn= +n; /在构造方法中给nn赋值 / static int sum()return k+n;错,引用了非static成员 public class c3_1 extends JApplet public void paint(Graphics g) ca m1=new ca( ); ca m2=new ca( ); / m1.nn=90; /错误,因为nn是标识符常量 g.drawString(m2.nn=+m2.nn,20,30); g.drawStr

10、ing(m2.k=+m2.k,20,50); g.drawString(m1.nn=+m1.nn,20,70); g.drawString(m1.k=+m1.k,20,90); g.drawString(m2.n+ca.n=+m2.n+ca.n,20,110); 图3.8 程序c3_9的执行结果 第四节 多态机制多态的概念 多态是指一个程序中有多个同名方法共存的情况。这些方法同名的原因是它们的最终功能和目的都相同,但是由于在完成同一功能时,可能遇到不同的具体情况,所以需要有不同的具体实现形式。多态可以提高程序的抽象度、封闭性和简洁性,统一一个或多个相关类对外的接口,使得它们不需了解对方的具体细

11、节,就可以很好地共同工作。 Java中提供两种多态机制:重载与覆盖。【例:c4_1.java】class a1int x=4;int y=1; public void Printme( ) System.out.println(x=+x+ y=+y); System.out.println(class name: +this.getClass( ).getName( ); public class c4_1 extends a1int x; public void Printme( )/重写父类的方法时,不可降低(但可扩大)方法的访问权限 int z=super.x+6; super.Prin

12、tme( ); System.out.println(I am an +this.getClass( ).getName( ); x=5; System.out.println( z=+z+ x=+x);/打印子类的数据成员 public static void main(String arg ) int k; a1 p1=new a1( ); c4_1 p2=new c4_1( ); p1.Printme( ); p1=p2; p1.Printme( ); / super.Printme( );/错,在static方法中根本就不认识super和this 运行结果如下:x=4 y=1class

13、 name: a1x=4 y=1class name: c4_1I am an c4_1z=10 x=5【例如程序c4_2.java】class addclass public int x=0; addclass(int x) this.x=x; System.out.println(addclass); public int add( ) return x+5;public class c4_2 extends addclass int a=0; addclass a1=new addclass(1); c4_2(int x) super(x); a=x+10; System.out.pri

14、ntln(“c4_2);/去掉super(x); ? public int add( ) System.out.println(super: x+5=+super.add( ); return a+x; public static void main(String args) c4_2 p=new c4_2(2); System.out.println(a+x=+p.add( ); 输出:addclassaddclassC4_2super: x+5=7a+x=14【例如程序c4_3.java】父类对象与子类对象之间在一定条件下相互转换class SuperClass int x=1,y=2,t

15、=98; void show( ) System.out.println(x+y=+(x+y); class SubClass extends SuperClass int y=9,z=7; void show( ) System.out.println(y*z+x=+(y*z+x); public class c4_3 /使用父类与子类public static void main(String args) SuperClass sc,scf; SubClass sb,sbf; sc=new SuperClass( ); sb=new SubClass( ); sc.show( ); scf

16、=(SuperClass)sb; /也可以写成:scf=sb; scf.show( ); sbf=(SubClass)scf; /父类引用转换为子类引用 System.out.println(sbf.x=+sbf.x+ sbf.y=+sbf.y+ sbf.z=+sbf.z); System.out.print(sbf.show( ):t); sbf.show( ); 运行结果:x+y=3y*z+x=64sbf.x=1 sbf.y=9 sbf.z=7sbf.show( ):y*z+x=64第五节 抽象类、接口接口 Java出于平安性、简化程序结构的考虑,不支持多继承。然而在解决实际问题的过程中,

17、在很多情况下仅仅依靠单继承不能将复杂的问题描述清楚。例如,冷藏车既是一种汽车,也是一种制冷设备,所以它是汽车的子类也是制冷设备的子类。为了使类间层次结构合理,并符合实际问题的本质,JAVA用接口来实现多重继承机制。 说明: (1) 接口可以看成一个特殊类。 (2) 接口修饰符有两种:public 和默认。1声明接口修饰符 interface接口名extends 父接口名列表常量数据成员声明 抽象方法声明 (3) 接口中定义的数据成员全是final staticpublic final static double PI=3.14159;final static int a=9;int SUM=1

18、00;(等价于final static int SUM=100;) (4) 接口中的方法默认为public abstract方法,格式如下: 返回值类型 方法名(参数列表); 2. 类实现接口的本卷须知 一个类要实现接口,要注意以下几点: (1) 如果实现某接口的类不是abstract的抽象类,那么在类的定义局部必须实现指定接口的所有抽象方法,而且方法头局部应该与接口中的定义完全一致。 (2) 一个类只能有一个父类,但可以同时实现假设干个接口。 (3) 如果实现某接口的类是abstract的抽象类,那么它可以不实现该接口所有的方法。 (4) 类在实现方法时,必须显式地使用public修饰符,否

19、那么?【例如程序c5_1.java】编写一个计算矩形、三角形和圆的面积与周长的程序import java.awt.*; import javax.swing.*;interface Shapes abstract double getArea( ); abstract double getPerimeter( );class Coordinatesint x,y; public Coordinates(int x,int y) this.x=x; this.y=y;class Square extends Coordinates implements Shapespublic int widt

20、h,height; public double getArea( )return(width*height); public double getPerimeter( )return(2*width+2*height); public Square(int x,int y,int width,int height) super(x,y); this.width=width; this.height=height;class Circle extends Coordinates implements Shapespublic int width,height; public double r;

21、public double getArea( )return(r*r*Math.PI); public double getPerimeter( )return(2*Math.PI*r); public Circle(int x,int y,int w,int h) super(x,y); width=w; height=h; r=(double)width/2.0;public class c5_1 extends JAppletSquare Box=new Square(5,15,25,25); Circle Oval=new Circle(5,90,25,25); public void

22、 paint(Graphics g) g.drawRect(Box.x,Box.y,Box.width,Box.height); g.drawString(Box Area:+Box.getArea( ),50,35); g.drawOval(Oval.x,Oval.y,Oval.width,Oval.height); 程序c5_1的运行结果例5-2:接口回调interface Computerablepublic double 求面积();class 梯形 implements Computerable double a,b,h; 梯形(double a,double b,double h)

23、 this.a=a;this.b=b;this.h=h; public double 求面积() return(1/2.0)*(a+b)*h);class 圆形 implements Computerable double r; 圆形(double r) this.r=r; public double 求面积() return(3.14*r*r);class 锥 Computerable 底; /用接口变量,可以回调求面积方法。 double 高; 锥(Computerable 底,double 高) this.底=底; this.高=高; void 换底(Computerable 底) th

24、is.底=底; public double 求体积() return (底.求面积()*高)/3.0;public class Example5_2 public static void main(String args) 锥 zui; Computerable bottom; bottom=new 梯形(2.0,7.0,10.7); /接口变量中存放对象的引用 System.out.println(梯形的面积+bottom.求面积(); zui=new 锥(bottom,30); System.out.println(梯形底的锥的体积+zui.求体积(); bottom=new 圆形(10)

25、; /接口变量中存放对象的引用。 System.out.println(半径是10的圆的面积+bottom.求面积(); zui.换底(bottom); System.out.println(圆形底的锥的体积+zui.求体积(); 第六节 数组一维数组的声明 声明一个数组就是要确定数组名、数组的维数和数组元素的数据类型。数组的维数用 “ 的个数来确定。数组元素的类型可以是Java的任何数据类型,如根本类型(int、float、double、char等),类(class)或接口(interface)等。数组的声明格式如下:int abc ;double example2;只能空一维数组的初始化

26、声明一个数组仅仅为这个数组指定数组名和数组元素的类型,并不为数组元素分配实际的存储空间。 接指定初值的方式:int a1=23,-9,38,8,65; 用关键字new初始化数组 类型标识符 数组名 ; 数组名=new 类型标识符数组长度; 或合二为一:int a=new int10;在Java语言中,数组实际上是一种隐含的“数组类的实例。每个数组名实际是该实例的一个引用。 【例如程序c6_1.java】 二分查找。import java.io.*;class FindSearch int binarySearch(int arr ,int searchValue) int low=0;/ lo

27、w是第一个数组元素的下标 int high=arr.length-1;/ high是最后一个数组元素的下标 int mid=(low+high)/2; / mid是中间那个数组元素的下标 while(low=high & arrmid!=searchValue) if( arrmidhigh) mid=-1; return mid;/ 假设为-1那么表示不存在要查的元素 public class c6_1public static void main(String args) throws IOException BufferedReader keyin=new BufferedReader(

28、new InputStreamReader(System.in); int i,k,search,mid; String c1; int arr =2,4,7,18,25,34,56,68,89; System.out.println(打印原始数据); for(i=0;iarr.length;i+) System.out.print( +arri); System.out.println(n); System.out.println(请输入要查找的整数); c1=keyin.readLine( ); search=Integer.parseInt(c1); FindSearch p1=new

29、FindSearch( ); mid=p1.binarySearch(arr,search); if(mid=-1) System.out.println(没找到!); else System.out.println(所查整数在数组中的位置下标是:+mid); 【例如程序c6_2.java】数组是对象,数组名是引用变量。public class c6_2 public static void main(String arg ) int i; int a1=2,5,8,25,36; int a3 =90,3,9; System.out.println(a1.length=+a1.length);

30、 System.out.println(a3.length=+a3.length); a3=a1; /赋值的结果是a3指向a1指向的数组 System.out.print(a1:); for(i=0;ia1.length;i+) System.out.print( +a1i); System.out.println(n); System.out.println(a3.length=+a3.length); System.out.print(a3:); for(i=0;ia3.length;i+) System.out.print( +a3i); System.out.println(n); 运

31、行结果:a1.length=5a3.length=3a1: 2 5 8 25 36a3.length=5a3: 2 5 8 25 36class Student private String name; private char sex; private double score; Student(String cname,char csex,double cscore) name=cname; sex=csex; score=cscore; String getName( )return name; char getSex( )return sex; void studPrint( ) Sy

32、stem.out.println(Name: +name+tSex: +sex+tScore: +score);【例如c6_3.java】 学生数组public class c6_3public static void main(String args) String mname; char msex; int len; Student st1=new Student3; /声明时并不为每一个元素分配存储空间 st10=new Student(li,F,89); /为每一个对象数组元素分配存储空间 st11=new Student(he,M,90); st12=new Student(zhan

33、g,M,78); len=3; for(int i=0;ilen;i+) st1i.studPrint( ); mname=st11.getName( ); msex=st11.getSex( ); System.out.println(Name 1:+mname+tSex:+msex); 运行结果:Name: liSex: FScore: 89.0Name: heSex: MScore: 90.0Name: zhangSex: MScore: 78.0Name 1:heSex:M二维数组的声明 类型说明符 数组名 ;或 类型说明符 数组名;二维数组的初始化 1用new操作符初始化数组 用ne

34、w操作符来初始化数组有两种方式: (1) 数组名=new 类型说明符数组长度 ; (2) 数组名=new 类型说明符数组长度 数组长度;以行为主次序存储例如:int arra ; /声明二维数组arra=new int34;/实际上相当于下述4条语句: /创立一个有3个元素的数组,且每个元素也是数组 arra=new int3 ; /创立3个行引用元素arra0=new int4;/创立数组arra0,它有4个元素arra1=new int4;arra2=new int4;图4.10 语句“arra=new int34;的作用 int arr=new int4 ;和int arr =new i

35、nt43; 也可行,但是,不指定行数而指定列数是错误的。例如int arr=new int 4; 是错误的。 【例c6_4.java】 分析程序class Maxvalueint maxvl(int arr1 ) int i, k, max; int len=arr1.length, len1; max=arr100; for(i=0;i=len-1;i+) len1=arr1i.length; for(k=0;kmax) max=arr1ik; return max; public class c6_4 public static void main(String args) int max

36、x; int arr=1,3,7,6,78,0,42,5,-98,7,10,-1; Maxvalue p1=new Maxvalue( ); maxx=p1.maxvl(arr); System.out.println(max=+maxx); 第七节 String类 String类对象是一经创立便不能变动内容的字符串常量, 而StringBuffer类是一个在操作中可以更改其内容的字符串类。 Java的任何字符串常量都是String类的对象,在没有明确命名时,为其创立一个匿名String类对象。如: String c1=“Java;通过赋值号将匿名String类的对象Java赋值给c1引用。

37、注意:c1是变量(它可以引用不同的串对象),但它引用的串是常量。【例c7_1.java】字符串的连接、替换和字母大小写转换操作:concat、replace、toLowerCase、toUpperCase。 public class c7_1 public static void main(String args ) String s1=Java, s2=java,s3=Welcome; String s4=Welcome, s5=Welcoge; String sc1=s3.concat(s1);/ sc1值为Welcome Java String sc2=s1.concat(abx); S

38、tring sr1=s3.replace(e,r);/s3不变 String w1=s5.toLowerCase( ), u2=s2.toUpperCase( ); System.out.println(s1=+s1+ts2=+s2); System.out.println(s3=+s3+ts4=+s4); System.out.println(s5=+s5); System.out.println(s3+s1=+sc1); System.out.println(s1+abx=+sc2); System.out.println(s3.replace(e,r)=+sr1); System.out

39、.println(s5.toLower=+w1); System.out.println(s2.toUpper=+u2); 运行结果:s1=Java s2=javas3=Welcome s4=Welcomes5=Welcoges3+s1=WelcomeJavas1+abx=Javaabxs3.replace(e,r)=Wrlcomrs5.toLower=welcoges2.toUpper=JAVA其他类型的数据转换成字符串 String类中的valueOf(参数)成员方法可以将参数类型的数据转换成字符串,参数的类型可以是:boolean,char,int,long,float,double和对

40、象。【例c7_2.java】 将其他类型数据转换成字符串。 public class c4_5 public static void main(String args ) double m1=3.456; String s1=String.valueOf(m1); char cc=a,b,c; String s2=String.valueOf(cc);/将字符数组转换成字符串 boolean f=true; String s3=String.valueOf(f); /将布尔值转换成字符串 char cs=J,a,v,a; String s4=String.valueOf(cs,2,2); Sy

41、stem.out.println(m1=+m1+ts1=+s1); System.out.println(s2=+s2); System.out.println(f=+f+ts3=+s3); System.out.println(s4=+s4); char cb=s3.toCharArray(); /将串转换成字符数组 System.out.println(cb=+cb0+cb1+cb2+cb3); System.out.println(cb=+cb); 运行结果:m1=3.456s1=3.456s2=abcf=true s3=trues4=vacb=truecb=C11a698a【例c7_3

42、.java】valueOf(p)引用toString(p) ,而toString(p) 将p对象转换成字符串class A1int x,y; A1(int x,int y)this.x=x;this.y=y; public String toString( )return (tx=+x+t,y=+y);public class c7_3public static void main(String args ) A1 p=new A1(2,6); String str=String.valueOf(p);/对象的串表示 System.out.println(str=+str); 【例Exampl

43、e7_4.java】 数字串转换成相应的数值public class Example5_5public static void main(String args) double n,sum=0.0 ; for(int i=0;iargs.length;i+) sum+=Double.valueOf(argsi).doubleValue(); / 与sum+=Double.parseDouble(argsi)等价; /查看Double与String类中静态方法valueOf的各自返回值类型 n=sum/args.length; System.out.println(平均数:+n); 第八节 Ja

44、va Applet1、所有小应用程序的根源 Java小应用程序Java Applet是使用Java语言编写的一段代码,它能够在浏览器环境中运行。 Applet与Application地主要区别在于它们的执行方式不同:Application是使用命令行命令直接运行,从其main()方法开始运行的;而Applet那么是在浏览器中运行的,首先必须创立一个HTML文件,通过编写HTML语言代码告诉浏览器载入何种Applet以及如何运行,再在浏览器中给出该HTML文件的URL地址即可。1、所有小应用程序的根源 回忆一下小应用程序的书写格式 import javax.swing.*; public cla

45、ss MyApplet extends JApplet ; 每一个小应用程序都继承自javax.JApplet类,并且每个小应用都有一个主程序类,之前必须加上public。Applet其实是一种能够在浏览器Web中运行的特殊的图形用户界面程序。2.1 所有小应用程序的根源http:/someLocation/file.html1. Browser loads URL2. Browser loads HTML documentApplet class3. Browser loads applet classesLocation:http:/someLocation/file.htmlLoadin

46、g.4. Browser run applet1、所有小应用程序的根源appletBrowserSERVER本地程序fileSERVERlocalconnectionconnectionapplet被下载的与applet无关的本地方法小应用程序的限制Applet不允许访问系统,除非通过定义平安策略与签名授权机制,被Java运行系统授予了相应的权限。1、所有小应用程序的根源一个简单例子:import javax.swing.*;import java.awt.*;public class HelloApplet extends JAppletpublic String s; public voi

47、d init() s = new String(“Hello World!); public void paint(Graphics g) g.drawString(s,25,25); Hello World HelloApplet.javajavax.swing.JAppletpublic void init()public void destroy()public void start()public void stop()public void paint(Graphics g)2、小应用程序的执行Applet的运行控制 Applet的运行控制 JApplet的生命周期初始态(瞬态)运行

48、态停止态消亡态离开Web页面:极小化或装入其他页面,调用stop()方法重新装入或改变页面大小或返回Web页面,调用start()方法关闭浏览器,调用stop()、destroy()方法第一次装入,构造applet类,调用init()方法调用start()方法2、小应用程序的执行Applet的运行控制 Applet中没有main()方法。当Applet被浏览器运行时, init() 、start()、stop()、destroy()方法等自动执行: init()方法:初始化,自动调用,只执行一次。 start()方法:初始化后,重入等都将自动调用。 stop()方法:离开Applet所在页面时

49、调用。 destroy()方法:浏览器关闭时自动调用,以去除Applet所用的所有资源。2、小应用程序的执行Applet的运行控制public class SimpleApplet extends JAppletStringBuffer buffer; public void init() buffer = new StringBuffer(); addItem(initializing. ); public void start() addItem(starting. ); public void stop() addItem(stopping. ); public void destroy

50、() addItem(preparing for unloading(destroy). ); void addItem(String newWord) System.out.println(newWord); buffer.append(newWord); repaint(); public void paint(Graphics g) g.drawRect(0, 0, getSize().width-1, getSize().height - 1); g.drawString(buffer.toString(),5, 15); SimpleApplet.java2、小应用程序的执行Appl

51、et的运行控制 HTML中applet标签的使用 APPLET CODE = appletFile WIDTH = pixels HEIGHT = pixels VSPACE = pixels HSPACE = pixels . . . 2、小应用程序的执行Applet与HTMLJava applet其它内容其它内容vspacehspace其它内容vspace其它内容hspaceheightwidth2、小应用程序的执行Applet与HTMLpublic class AppletPara extends JAppletString s1,s2; public void init() s1=ge

52、tParameter(p1); s2=getParameter(p2); public void paint(Graphics g) g.drawString(s1,10,10); g.drawString(s2,10,30); Applet Parameter Test 两个步骤: 在Applet类中: s1 = getParameter(p1); 在页面中设置Applet参数: AppletPara.javapublc class AppletApp extends JAppletpublic String s; public void init() s=new String(“Hello

53、 World!); public void paint(Graphics g) g.drawString(s,25,25); 一个Java类文件可以既是一个Java Applet,又是一个Java Application,但它却既可以在浏览器中运行,又可以作为Application单独运行。public static void main(String args)Frame f=new Frame(“Applet-App); AppletApp app = new AppletApp(); f.add(app, “Center); f.setSize(200, 200); f.setVisibl

54、e(true); f.addWindowListener( new WindowAdapter() ); app.init(); app.start();AppletApp.java2、小应用程序的执行Applet与Application3、图形操作paint()、update()和repaint() Applet中有三个显示相关的方法:paint()、update()和repaint()。 Applet的显示更新是由一个AWT线程来控制完成的,它主要负责两种显示更新情况:第一是曝光,表示局部显示区域被遮盖、调整大小、最大最小化等,这种情况随时会发生,需要系统调用paint()方法;第二是程序

55、需要重画显示区域,添加一些新的显示内容,需要程序调用repaint()方法。AWT thread(waiting)update():clear area call paint()paint()程序调用repaint()Exposure:遮盖、调整大小、最大最小化等3、图形操作paint()、update()和repaint() paint( Graphics g )方法 当小应用首次被装载,以及每次窗口放大、缩小、刷新时都要调用paint()方法当用户窗口界面遭到破坏时。当程序希望调用paint方法时,用repaint()方法。 paint()方法的参数是Graphics类的对象 g,该对象不

56、是由new产生的,而是由系统或其他方式直接将生好的Graphics对象当作方法的参数,再交给paint()方法。 update()方法 update()方法用于更新图形。它首先去除背景,然后设置前景,再调用paint()方法完成Applet中的具体绘图。一般不要重写update()方法。3、图形操作paint()、update()和repaint()3、图形操作Graphics、Font和Color类的使用 在paint()方法中有一个Graphics类参数,它是画图的关键。它支持两种绘制:一是根本的绘图,包括画点、线、矩形、文字等;二是画图象。在进行根本画图时,可以设定所需的颜色和字体等,这

57、需要用到Font、FontMetrics和Color三个类。 repaint()方法 repaint()方法主要用于重绘图形,它是通过调用update()方法来实现图形重绘的。一般不要重写repaint()方法。 /定时器、动画例如import javax.swing.*;import java.awt.*;import java.awt.event.*;public class a extends JFrame implements ActionListener int offset = -10; private Image im; private Timer timer; private

58、AnimationPane animationPane; public a() super(动画例如); int delay = 100; timer = new Timer(delay, this); timer.setInitialDelay(0); Container c = getContentPane(); c.setLayout(new FlowLayout(); c.setBackground(Color.gray); Toolkit toolkit = Toolkit.getDefaultToolkit(); im = toolkit.getImage(cat.gif); animationPane = new AnimationPane(im); c.add(animationPane); timer.start(); setSize(300, 150); show(); /显示动画的JPanel class AnimationPane extends JPanel Image image; public AnimationPane(Image image)

温馨提示

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

评论

0/150

提交评论