当前位置:课程学习>>第九章 Applet程序设计>>实践活动




同学们,实践是检验真理问题的唯一标准,运用你们学到的知识实践检验一下能力提升了吗?

实践主题1:信号灯。

实践目标1:学习小应用程序和paint方法。

实践任务1:按模板要求,将[代码]处替换为Java程序代码

实践要求1:编写一个Java Applet程序,要求该程序有3个按钮和一个画布对象,单击相应的按钮,画布绘制相应的信号灯。

SignalExample.java

  import java.awt.*;

  import java.applet.*;

  import java.awt.event.*;

  public class SignalExample extends Applet implements ActionListener {

    Button buttonRed,buttonGreen,buttonYellow;

    SignalCanvas signal;

    public void init() {

    buttonRed=[代码1] //创建按钮对象,按钮的名字是“红灯亮”

    buttonGreen=[代码2] //创建按钮对象,按钮的名字是“绿灯亮”

    buttonYellow=[代码3] //创建按钮对象,按钮的名字是“黄灯亮”

    signal=[代码4] //使用SignalCanvas类创建对象

    add(buttonRed);

    add(buttonGreen);

    add(buttonYellow);

    add(signal);

    [代码5] //buttonRed将当前Java Applet 作为自己的ActionEvent事件监视器

    [代码6] //buttonGreen将当前Java Applet 作为自己的ActionEvent事件监视器    

    [代码7] //buttonYellow将当前Java Applet 作为自己的ActionEvent事件监视器    

    }

    public void actionPerformed(ActionEvent e) {

    if( [代码8] ) { //判断事件源是否是buttonRed

       signal.setRed(1);

       signal.setYellow(0);

       signal.setGreen(0);

       signal.repaint();

    }

    else if( [代码9] ) { //判断事件源是否是buttonYellow

       signal.setRed(0);

       signal.setYellow(1);

       signal.setGreen(0);

       signal.repaint();

    }

    else if( [代码10] ) { //判断事件源是否是buttonGreen

       signal.setRed(0);

       signal.setYellow(0);

       signal.setGreen(1);

       signal.repaint();

    }

  }

}

class SignalCanvas extends Canvas {

    int red,green,yellow;

    SignalCanvas() {

       setSize(38,80);

       setBackground(Color.black);

    }

    public void setRed(int r) {

       red=r;

    }

    public void setGreen(int g) {

       green=g;

    }

    public void setYellow(int y) {

       yellow=y;

    }

    public void paint(Graphics g) {

       if( red==1) {

         g.setColor(Color.red);

         g.fillOval(10,3,20,20);

       }

       if( green==1) {

         g.setColor(Color.green);

         g.fillOval(10,28,20,20);

       }

       if( yellow==1) {

         g.setColor(Color.yellow);

         g.fillOval(10,53,20,20);

       }

    }

}      

教师分析:

这个实践主要是加强对小应用程序和paint方法的掌握。参考代码如下:

buttonRed=new Button("红灯亮");            //[代码1]

buttonGreen=new Button("绿灯亮");          //[代码2]

buttonYellow=new Button("黄灯亮");         //[代码3]

signal=new SignalCanvas();                     //[代码4]

uttonRed.addActionListener(this);          //[代码5]

buttonGreen.addActionListener(this);       //[代码6]

buttonYellow.addActionListener(this);      //[代码7]

if( e.getSource()==buttonRed )   {             //[代码8]

else if( e.getSource()==buttonYellow  ) {  //[代码9]

else if(  e.getSource()==buttonGreen ) {   //[代码10]

 

实践主题2:时钟。

实践目标2:学会在Java Applet中绘图。

实践任务2:按模板要求,将[代码]处替换为Java程序代码。

实践任务2:以时钟的形式实时显示当前时间,并显示当前日期。

Clock.java

  import java.util.*;

  import java.awt.*;

  import java.applet.*;

  import java.text.*;

  [代码1] //添加appletviewer运行时所需要的applet标记:宽度170,高度150,传递三个参数bgcolor="000000",fgcolor1="ff0000",fgcolor2="ff00ff"

  public class Clock extends Applet implements Runnable {

    private volatile Thread timer; //线程:用于显示时钟

    private int lastxs, lastys, lastxm, lastym, lastxh, lastyh; //秒针、分针、时针位置

    private SimpleDateFormat formatter; //时间显示格式

    private String lastdate; //日期字符串

    private Font clockFaceFont; //时钟上的字体

    private Date currentDate; //日期对象

    private Color handColor; //钟面和时针、分针的颜色

    private Color numberColor; //秒针和数字的颜色

    private int xcenter = 80, ycenter = 55; //时钟中心位置

    public void init() {

        int x,y;

        lastxs = lastys = lastxm = lastym = lastxh = lastyh = 0;

        formatter = new SimpleDateFormat ("yyyy MMM dd EEE hh:mm:ss", Locale.getDefault()); //按 年份(4位) 月份 日期 星期 时:分:秒 显示

    [代码2] //创建currentDate

       lastdate = formatter.format(currentDate);

       [代码3] //创建clockFaceFont所需要的字体:Serif,普通字体,14号大小

       [代码4] //创建handColor:蓝色

       [代码5] //创建numberColor:darkGray色

       try{

          setBackground(new Color(Integer.parseInt(getParameter("bgcolor"),16)));

}

      catch (NullPointerException e) { }

      catch (NumberFormatException e) { }

      try{

        handColor = new Color(Integer.parseInt(getParameter("fgcolor1"),16));

      }

      catch (NullPointerException e) { }

      catch (NumberFormatException e) { }

      try {

         numberColor = new Color(Integer.parseInt(getParameter("fgcolor2"),16));

      }

      catch (NullPointerException e) { }

      catch (NumberFormatException e) { }

      [代码6] //重设applet大小为300*300

   }

   // Paint is the main part of the program

   [代码7] //重写Applet中的update方法

   int xh, yh, xm, ym, xs, ys;

   int s = 0, m = 10, h = 10;

     String today;

     [代码8] //创建currentDate

     formatter.applyPattern("s");

     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;

     }

    //指针位置

    xs = (int) (Math.cos(s * Math.PI / 30 - Math.PI / 2) * 45 + xcenter);

    ys = (int) (Math.sin(s * Math.PI / 30 - Math.PI / 2) * 45 + ycenter);

    xm = (int) (Math.cos(m * Math.PI / 30 - Math.PI / 2) * 40 + xcenter);

    ym = (int) (Math.sin(m * Math.PI / 30 - Math.PI / 2) * 40 + ycenter);

    xh = (int) (Math.cos((h*30 + m / 2) * Math.PI / 180 - Math.PI / 2) * 30 + xcenter);

    yh = (int) (Math.sin((h*30 + m / 2) * Math.PI / 180 - Math.PI / 2) * 30 + ycenter);

    // Get the date to print at the bottom

    formatter.applyPattern("yyyy MMM dd EEE HH:mm:ss");

    today = formatter.format(currentDate);

    g.setFont(clockFaceFont);

    // Erase if necessary

    g.setColor(getBackground());

    if (xs != lastxs || ys != lastys) {

    g.drawLine(xcenter, ycenter, lastxs, lastys);

    [代码9] //在5,125处显示lastdate

    }

    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);

    [代码10] //在5,125处显示today

    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;

    }

    public void paint(Graphics g) {

      g.setFont(clockFaceFont);

      //显示圆和数字

      g.setColor(handColor);

      [代码11] //在xcenter-50,ycenter-50处画半径为100的圆

      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(numberColor);

      [代码12] //在5,125处显示lastdate

      g.drawLine(xcenter, ycenter, lastxs, lastys);

      g.setColor(handColor);

      g.drawLine(xcenter, ycenter-1, lastxm, lastym);

      g.drawLine(xcenter-1, ycenter, lastxm, lastym);

      g.drawLine(xcenter, ycenter-1, lastxh, lastyh);

      g.drawLine(xcenter-1, ycenter, lastxh, lastyh);

      }

  public void start() {

      timer = new Thread(this);

      timer.start();

  }

  public void stop() {

      timer = null;

  }

  public void run() {

      Thread me = Thread.currentThread();

      while (timer == me) {

      try{

      Thread.currentThread().sleep(100);

      }

      catch (InterruptedException e) { }

      [代码13] //重绘Applet

      }

  }

  public String getAppletInfo() {

      return "Title: A Clock \n" + "Author: Rachel Gollub, 1995 \n" + "An analog clock.";

  }

  public String[][] getParameterInfo() {

      String[][] info = {

  {"bgcolor", "hexadecimal RGB number", "The background color. Default is the color of your browser."},

  {"fgcolor1", "hexadecimal RGB number","The color of the hands and dial. Default is blue."},

  {"fgcolor2", "hexadecimal RGB number","The color of the second hand and numbers. Default is dark gray."}

  };

  return info;

  }

}

教师分析:

这个实践主要是加强对Java Applet绘图的掌握。

参考代码如下:

//<applet code="Clock" width=170 height=150>           //[代码1]

//<param name=bgcolor value="000000">

//<param name=fgcolor1 value="ff0000">

//<param name=fgcolor2 value="ff00ff">

//</applet>

currentDate = new Date();                      //[代码2]

clockFaceFont = new Font("Serif", Font.PLAIN, 14);    //[代码3]

handColor = Color.blue;                    //[代码4]

numberColor = Color.darkGray;                        //[代码5]

resize(300,300);                           //[代码6]

public void update(Graphics g) {               //[代码7]

currentDate = new Date();                     //[代码8]

g.drawString(lastdate, 5, 125);                //[代码9]

g.drawString(today, 5, 125);                    //[代码10]

g.drawArc(xcenter-50, ycenter-50, 100, 100, 0, 360);     //[代码11]

g.drawString(lastdate, 5, 125);               //[代码12]

repaint();                         //[代码13]

 

实践主题3:信号灯。

实践目标3:掌握Applet程序设计方法。

实践任务3:按模板要求,将[代码]处替换为Java程序代码

实践要求3:编写一个Java Applet程序,要求该程序有3个按钮和一个画布对象,单击相应的按钮,画布绘制相应的信号灯,当信号灯是某种颜色的信号时,相应的按钮与其具有相同的颜色。

教师分析:

这个实践主要是加强对Java Applet程序设计的掌握。

参考代码如下:

<applet code=SignalExample width=400 height=300>

</applet>

import java.awt.*;

import java.applet.*;

import java.awt.event.*;

public class SignalExample extends Applet implements ActionListener

{

  Button buttonRed,buttonGreen,buttonYellow;

  SignalCanvas signal;

  public void init()

  {

    buttonRed=new Button("红灯亮");

    buttonGreen=new Button("绿灯亮");

    buttonYellow=new Button("黄灯亮");

    signal=new SignalCanvas();

    add(buttonRed);

    add(buttonGreen);

    add(buttonYellow);

    add(signal);

    buttonRed.addActionListener(this);

    buttonGreen.addActionListener(this);

    buttonYellow.addActionListener(this);

  }

  public void actionPerformed(ActionEvent e)

  {

  if( e.getSource()==buttonRed )

  {

    signal.setRed(1);

    signal.setYellow(0);

    signal.setGreen(0);

    signal.repaint();

    buttonRed.setBackground(Color.red);

    buttonGreen.setBackground(Color.lightGray);

    buttonYellow.setBackground(Color.lightGray);

  }

  else if( e.getSource()==buttonYellow )

  {

    signal.setRed(0);

    signal.setYellow(1);

    signal.setGreen(0);

    signal.repaint();

    buttonRed.setBackground(Color.lightGray);

    buttonGreen.setBackground(Color.lightGray);

    buttonYellow.setBackground(Color.yellow);

  }

  else if( e.getSource()==buttonGreen )

  {

    signal.setRed(0);

    signal.setYellow(0);

    signal.setGreen(1);

    signal.repaint();

    buttonRed.setBackground(Color.lightGray);

    buttonGreen.setBackground(Color.green);

    buttonYellow.setBackground(Color.lightGray);

    }

  }

}

class SignalCanvas extends Canvas

{

  int red,green,yellow;

  SignalCanvas()

  {

    setSize(38,80);

    setBackground(Color.black);

  }

  public void setRed(int r)

  {

    red=r;

  }

  public void setGreen(int g)

  {

    green=g;

  }

  public void setYellow(int y)

  {

    yellow=y;

  }

  public void paint(Graphics g)

  {

    if( red==1)

    {

      g.setColor(Color.red);

      g.fillOval(10,3,20,20);

    }

    if( green==1)

    {

      g.setColor(Color.green);

      g.fillOval(10,28,20,20);

    }

    if( yellow==1)

    {

      g.setColor(Color.yellow);

      g.fillOval(10,53,20,20);

    }

  }

}

 

进入拓展资源