当前位置:课程学习>>第九章 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);
}
}
}