本站首页    管理页面    写新日志    退出

«August 2025»
12
3456789
10111213141516
17181920212223
24252627282930
31


公告

  如果你忍了,欺负你的人将来可能就进监狱了。如果你反击,欺负你的人将来可能就获选十大杰出青年了。

        QQ: 3159671

http://greenboy.javaeye.com/

http://blog.sina.com.cn/u/1278341164 小鸟吹烟


我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:小鸟吹烟
日志总数:157
评论数量:424
留言数量:-1
访问次数:1252811
建立时间:2006年10月23日




[JAVA桌面开发]Applet类
文章收藏,  网上资源

tone 发表于 2007/3/14 15:36:21

Applet类  Applet类是所有Applet应用的基类,所有的Java小应用程序都必须继承该类。如下所示。         import java. applet.*;public class OurApplet extends Applet{............}  Applet类的构造函数只有一种,即:public Applet()  Applet实现了很多基本的方法,下面列出了Applet类中常用方法和用途。 public final void setStub(AppletStub stub)//设置Applet的stub.stub是Java和C之间转换参数并返回值的代码位,它是由系统自动设定的。public boolean isActive();// 判断一个Applet是否处于活动状态。public URL getDocumentBase();// 检索表示该Applet运行的文件目录的对象。public URL getCodeBase();// 获取该Applet 代码的URL地址。public String getParameter(String name);// 获取该Applet 由name指定参数的值。public AppletContext getAppletContext();// 返回浏览器或小应用程序观察器。public void resize(int width,int height);// 调整Applet运行的窗口尺寸。public void resize(Dimension d);// 调整Applet运行的窗口尺寸。public void showStatus(String msg);// 在浏览器的状态条中显示指定的信息。public Image getImage(URL url); // 按url指定的地址装入图象。public Image getImage(URL url,String name);// 按url指定的地址和文件名加载图像。public AudioClip getAudioClip(URL url);// 按url指定的地址获取声音文件。public AudioClip getAudioClip(URL url, String name);// 按url指定的地址和文件名获取声音。public String getAppletInfo();// 返回Applet应用有关的作者、版本和版权方面的信息;public String[][] getParameterInfo();// 返回描述Applet参数的字符串数组,该数组通常包含三个字符串: 参数名、该参数所需值的类型和该参数的说明。public void play(URL url);// 加载并播放一个url指定的音频剪辑。public void destroy();//撤消Applet及其所占用的资源。若该Applet是活动的,则先终止该Applet的运行。  (1) Applet运行状态控制基本方法  Applet类中的四种基本方法用来控制其运行状态:init()、start()、stop()、destroy()  init()方法  这个方法主要是为Applet的正常运行做一些初始化工作。当一个Applet被系统调用时,系统首先调用的就是该方法。通常可以在该方法中完成从网页向Applet传递参数,添加用户界面的基本组件等操作。  start()方法  系统在调用完init()方法之后,将自动调用start()方法。而且,每当用户离开包含该Applet的主页后又再返回时,系统又会再执行一遍start()方法。这就意味着start()方法可以被多次执行,而不像init()方法。因此,可把只希望执行一遍的代码放在init()方法中。可以在start()方法中开始一个线程,如继续一个动画、声音等。  stop()方法  这个方法在用户离开Applet所在页面时执行,因此,它也是可以被多次执行的。它使你可以在用户并不注意Applet的时候,停止一些耗用系统资源的工作以免影响系统的运行速度,且并不需要人为地去调用该方法。如果Applet中不包含动画、声音等程序,通常也不必实现该方法。  destroy()方法  与对象的finalize()方法不同,Java在浏览器关闭的时候才调用该方法。Applet是嵌在HTML文件中的,所以destroty()方法不关心何时Applet被关闭,它在浏览器关闭的时候自动执行。在destroy()方法中一般可以要求收回占用的非内存独立资源。(如果在Applet仍在运行时浏览器被关闭,系统将先执行stop()方法,再执行destroy()方法。  (2) Applet应用的有关参数说明  利用Applet来接收从HTML中传递过来的参数,下面对这些参数作一简单说明:  * CODE标志  CODE标志指定Applet的类名;WIDTH和HEIGHT标志指定Applet窗口的像素尺寸。在APPLET语句里还可使用其他一些标志。  * CODEBASE 标志  CODEBASE标志指定Applet的URL地址。Applet的通用资源定位地址URL,它可以是绝对地址 ,如www.sun.com。也可以是相对于当前HTML所在目录的相对地址,如/AppletPath/Name。如果HTML文件不指定CODEBASE 标志,浏览器将使用和HTML文件相同的URL。  * ALT 标志  虽然Java在WWW上很受欢迎,但并非所有浏览器都对其提供支持。如果某浏览器无法运行Java Applet,那么它在遇到APPLET语句时将显示ALT标志指定的文本信息。  * ALIGN 标志  ALIGN标志可用来控制把Applet窗口显示在HTML文档窗口的什么位置。与HTML<LMG>语句一样,ALIGN标志指定的值可以是TOP、MIDDLE或BOTTOM。  * VSPACE与HSPACE 标志  VSPACE和HSPACE标志指定浏览器显示在Applet窗口周围的水平和竖直空白条的尺寸,单位为像素。如下例使用该标志在Applet窗口之上和之下各留出50像素的空白,在其左和其右各留出25像素的空白:  * NAME 标志  NAME标志把指定的名字赋予Applet的当前实例。当浏览器同时运行两个或多个Applet时,各Applet可通过名字相互引用或交换信息。如果忽略NAME标志,Applet的名字将对应于其类名。  * PARAM 标志  通用性是程序设计所追求的目标之一。使用户或者程序员能很方便地使用同一个Applet完成不同的任务是通用性的具体表现。从HTML文件获取信息是提高Applet通用性的一条有效途径。  假设编制了一个把某公司的名字在屏幕上卷动的Applet。为了使该Applet更加通用,则可以使该Applet从HTML文件获取需要卷动的文本信息。这样,若想显示另一个公司的名字,用不着修改Java Applet本身,只需修改HTML文件即可。  PARAM 标志可用来在HTML文件里指定参数,格式如下所示:PARAM Name="name" Value="Liter"  Java Applet可调用getParameter方法获取HTML文件里设置的参数值。


阅读全文(9087) | 回复(3) | 编辑 | 精华
 


回复:Applet类
文章收藏,  网上资源

tone发表评论于2007/3/14 15:49:59

声音和图像的协调(Appletl.java)//源程序清单import java.awt.*;import java.applet.*;import java.util.*;public class Appletl extends Applet implements Runnable{  AudioClip audioClip;  Thread ShapeThread=null;  Random RandomNumber=new Random( );  Color ImageColor;  public void init( )  {   audioClip=getAudioClip(getCodeBase( ), "Sample.AU");// 创建一个AudioClip对象  }  public void start( )  {   if (ShapeThread= =null)   {    ShapeThread=new Thread(this);    ShapeThread.start( );   }  }  public void run()  {   while (true)   {    switch (RandomNumber.nextlnt(5)) { //把随机数转换为0~4之间的值    case 0: ImageColor=Color.black;        break;    case 1: ImageColor=Color.blue;        break;    case 2: ImageColor=Color.cyan;        break;    case3: ImageColor=Color.magenta;        break;    case4: ImageColor=Color.orange;        break;    default: ImageColor=Color.red;   }   try   {    ShapeThread.sleep(300); //线程睡眠   }   catch(InterruptedException e)   {    //忽略异常    repaint();   }  }  public void paint(Graphics g)  {   g.setColor(ImageColor);   audioClip.play(); //播放声音   switch(RandomNumber.nextlnt(2)) //获取随机数与2整除的余数   {    case0:g.fillRect(25,25,200,200); //添充一个矩形       break;    default:g.fillOval(25,25,200,200); //添充一个椭圆       break;   }  }}  该Applet的声音处理非常简单。它首先创建一个AudioClip对象并用getAudioClip把声音文件赋予该对象,然后用AudioClip类的play方法播放声音。该Applet使用Random对象产生随机数。它首先根据随机数确定颜色;然后在paint内根据随机数确定画圆还是画方。Random类的nexsInt函数返回一个随机整数(int型)。该Applet把随机数转换为一个0~4之间的值(在run函数内)和一个0~1之间的值(在paint函数内)。需把如下的HTML语句放入Appletl.HTML文件,为运行该Appletl做准备。<HTML><TITLE>Applet</TITLE><APPLET CODE="Appletl.class" WIDTH=300 HEIGHT=300></APPLET></HTML>


个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
 


回复:Applet类
文章收藏,  网上资源

tone发表评论于2007/3/14 15:47:41

* 动画技巧  在编写动画过程时,遇到最常见的问题是屏幕会出现闪烁现象。闪烁有两个原因:一是绘制每一帧花费的时间太长(因为重绘时要求的计算量大);二是在每次调用Pain()前,Java 会用背景颜色重画整个画面,当在进行下一帧的计算时,用户看到的是背景。  有两种方法可以明显地减弱闪烁:重载 update()或使用双缓冲。  (1) 重载 update()  当AWT接收到一个applet的重绘请求时,它就调用applet的 update(),默认地,update() 清除applet的背景,然后调用 paint()。重载 update(),将以前在paint()中的绘图代码包含在update()中,从而避免每次重绘时将整个区域清除。下面是 update()方法的原始程序代码:public void update(Graphics g){  //首先用背景色来绘制整个画面  g.setColor(getBackGround());  g.fillRect(0,0,width,height);  //接着设置前景色为绘制图像的颜色,然后调用paint()方法  g.setColor(getForeGround());  paint(g);}  所以要消除画面闪烁就一定要改写 update() 方法,使该方法不会清除整个画面,只是消除必要的部分。 (2) 使用双缓冲技术  另一种减小帧之间闪烁的方法是使用双缓冲,它在许多动画Applet中被使用。其主要原理是创建一个后台图像,将需要绘制的一帧画入图像,然后调用DrawImage()将整个图像一次画到屏幕上去;好处是大部分绘制是离屏的,将离屏图像一次绘至屏幕上比直接在屏幕上绘制要有效得多,大大提高做图的性能。  双缓冲可以使动画平滑,但有一个缺点,要分配一张后台图像,如果图像相当大,这将需要很大一块内存;当你使用双缓冲技术时,应重载 update()。  下面举一个时钟的例子来说明如何处理动画//AnimatorDemo.javaimport java.util.*;import java.awt.*;import java.applet.*;import java.text.*;public class AnimatorDemo extends Applet implements Runnable {  Thread timer; // 用于显示时钟的线程  int lastxs, lastys, lastxm,  lastym, lastxh, lastyh;   SimpleDateFormat formatter; //格式化时间显示  String lastdate; // 保存当前时间的字符串  Font clockFaceFont; //设置显示时钟里面的数字的字体  Date currentDate; // 显示当前时间  Color handColor; // 用于显示时针、分针和表盘的颜色  Color numberColor; // 用于显示秒针和数字的颜色  public void init()   {   int x,y;   lastxs = lastys = lastxm = lastym = lastxh = lastyh = 0;   formatter = new SimpleDateFormat ("yyyy EEE MMM dd hh:mm:ss ");   currentDate = new Date();   lastdate = formatter.format(currentDate);   clockFaceFont = new Font("Serif", Font.PLAIN, 14);   handColor = Color.blue;   numberColor = Color.darkGray;   try {    setBackground(new Color(Integer.parseInt(getParameter("bgcolor"),16)));   } catch (Exception E) { }   try {    handColor = new Color(Integer.parseInt(getParameter("fgcolor1"),16));   } catch (Exception E) { }   try {    numberColor = new Color(Integer.parseInt(getParameter("fgcolor2"),16));   } catch (Exception E) { }   resize(300,300); // 设置时钟窗口大小  }  // 计算四分之一的圆弧  public void plotpoints(int x0, int y0, int x, int y, Graphics g)   {   g.drawLine(x0+x,y0+y,x0+x,y0+y);   g.drawLine(x0+y,y0+x,x0+y,y0+x);   g.drawLine(x0+y,y0-x,x0+y,y0-x);   g.drawLine(x0+x,y0-y,x0+x,y0-y);   g.drawLine(x0-x,y0-y,x0-x,y0-y);   g.drawLine(x0-y,y0-x,x0-y,y0-x);   g.drawLine(x0-y,y0+x,x0-y,y0+x);   g.drawLine(x0-x,y0+y,x0-x,y0+y);  }  // 用Bresenham算法来画圆,其中(x0,y0)是圆的中心,r为圆半径  public void circle(int x0, int y0, int r, Graphics g)   {   int x,y;   float d;   x=0;   y=r;   d=5/4-r;   plotpoints(x0,y0,x,y,g);   while (y>x) {    if (d<0) {     d=d+2*x+3;     x++;    }    else {     d=d+2*(x-y)+5;     x++;     y--;     }    plotpoints(x0,y0,x,y,g);   }  }  public void paint(Graphics g)   {   int xh, yh, xm, ym, xs, ys, s = 0, m = 10, h = 10, xcenter, ycenter;   String today;   currentDate = new Date();   SimpleDateFormat formatter = new SimpleDateFormat("s",Locale.getDefault());   try {    s = Integer.parseInt(formatter.format(currentDate));   } catch (NumberFormatException n) {    s = 0;   }   formatter.applyPattern("m");   try {    m = Integer.parseInt(formatter.format(currentDate));   } catch (NumberFormatException n) {    m = 10;   }    formatter.applyPattern("h");   try {    h = Integer.parseInt(formatter.format(currentDate));   } catch (NumberFormatException n) {    h = 10;   }   formatter.applyPattern("EEE MMM dd HH:mm:ss yyyy");   today = formatter.format(currentDate);   //设置时钟的表盘的中心点为(80,55)   xcenter=80;   ycenter=55;   // a= s* pi/2 - pi/2 (to switch 0,0 from 3:00 to 12:00)   // x = r(cos a) + xcenter, y = r(sin a) + ycenter   xs = (int)(Math.cos(s * 3.14f/30 - 3.14f/2) * 45 + xcenter);   ys = (int)(Math.sin(s * 3.14f/30 - 3.14f/2) * 45 + ycenter);   xm = (int)(Math.cos(m * 3.14f/30 - 3.14f/2) * 40 + xcenter);   ym = (int)(Math.sin(m * 3.14f/30 - 3.14f/2) * 40 + ycenter);   xh = (int)(Math.cos((h*30 + m/2) * 3.14f/180 - 3.14f/2) * 30 + xcenter);   yh = (int)(Math.sin((h*30 + m/2) * 3.14f/180 - 3.14f/2) * 30 + ycenter);   //画时钟最外面的圆盘其中心在(xcenter,ycenter)半径为50    g.setFont(clockFaceFont);   g.setColor(handColor);   circle(xcenter,ycenter,50,g);   //画时钟表盘里的数字   g.setColor(numberColor);   g.drawString("9",xcenter-45,ycenter+3);    g.drawString("3",xcenter+40,ycenter+3);   g.drawString("12",xcenter-5,ycenter-37);   g.drawString("6",xcenter-3,ycenter+45);   // 如果必要的话抹去然后重画    g.setColor(getBackground());   if (xs != lastxs || ys != lastys) {    g.drawLine(xcenter, ycenter, lastxs, lastys);    g.drawString(lastdate, 5, 125);   }   if (xm != lastxm || ym != lastym) {    g.drawLine(xcenter, ycenter-1, lastxm, lastym);    g.drawLine(xcenter-1, ycenter, lastxm, lastym); }    if (xh != lastxh || yh != lastyh) {     g.drawLine(xcenter, ycenter-1, lastxh, lastyh);     g.drawLine(xcenter-1, ycenter, lastxh, lastyh); }    g.setColor(numberColor);    g.drawString("", 5, 125);    g.drawString(today, 5, 125);     g.drawLine(xcenter, ycenter, xs, ys);    g.setColor(handColor);    g.drawLine(xcenter, ycenter-1, xm, ym);    g.drawLine(xcenter-1, ycenter, xm, ym);    g.drawLine(xcenter, ycenter-1, xh, yh);    g.drawLine(xcenter-1, ycenter, xh, yh);    lastxs=xs; lastys=ys;    lastxm=xm; lastym=ym;    lastxh=xh; lastyh=yh;    lastdate = today;    currentDate=null;   }   //applet的启动方法   public void start()    {    timer = new Thread(this);    timer.start();   }   // applet的停止方法   public void stop()    {    timer = null;   }   //线程的run方法   public void run()    {    Thread me = Thread.currentThread();    while (timer == me) {     try {      Thread.currentThread().sleep(1000);     }      catch (InterruptedException e) {     }     repaint();    }   }   //注意:这里重写了update()方法,只是调用了paint()方法来消除闪烁现象   public void update(Graphics g)    {    paint(g);   }  }  下面是运行该Applet 需要的AnimatorDemo.html 的内容<HTML><HEAD>  <TITLE>一个时钟的例子</TITLE></HEAD><BODY>  <hr>  <applet codebase="." ALIGN=MIDDLE code="AnimatorDemo.class" width=200 height=150>  </applet></BODY></HTML>

个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
 


回复:Applet类
文章收藏,  网上资源

tone发表评论于2007/3/14 15:46:09

 (1) 播放声音文件  图像格式各种各样,如BMP、GIF和JPEG等。声音文件也一样,WAV和AU是最常用的两种声音文件。目前Java仅支持AU文件,但Windows环境下常用的却是WAV文件,所以最好能有一个可把WAV文件转换为AU文件的工具。  * 播放声音的AudioClip类  AudioClip类用来在Java Applet内播放声音,该类在java.Applet包中有定义。  下面演示了如何利用AudioClip类播放声音。  装入一个名为Sample.Au的声音文件并播放(SoundDemo.java)//源程序清单import java.awt.*;import java.applet.* public class SoundDemo extends Applet{  public void paint(Graphics g)  {   AudioClip audioClip=getAudioClip(getCodeBase(),”Sample.AU”);    //创建AudioClip对象并用//getAudioClip方法将其初始化。   g.drawstring("Sound Demo! ",5,15);   audioClip.loop();//使用AudioClip类的loop方法循环播放  }}  需把如下的HTML语句放入SoundDemo.HTML文件,为运行该Applet做准备。<HTML><TITLE>SoundDemo Applet</TITLE><APPLET CODE="SoundDemo.class" WIDTH=300 HEIGHT=200></APPLET></HTML>  编译并运行该Applet,屏幕上将显示出一个Applet窗口并伴以音乐。关闭Applet时音乐终止。

个人主页 | 引用回复 | 主人回复 | 返回 | 编辑 | 删除
 


» 1 »

发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.039 second(s), page refreshed 144756311 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号