一个Clock程序(Applet & Application)
以下程序既可以作为applet 也可以作为Application, 供大家欣赏。程序代码:
import java.applet.Applet;
import java.awt.*;
import java.util.*;
import java.awt.Frame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
public class Clock extends Applet implements Runnable
{
Thread thisThread;
Color faceColor, borderColor, minuteColor, hourColor, secondColor;
public void init()
{
//read in the colors for each of the hands and for the face/border
faceColor = readColor(getParameter(\"faceCol\"));
borderColor = readColor(getParameter(\"borderCol\"));
minuteColor = readColor(getParameter(\"minuteCol\"));
hourColor = readColor(getParameter(\"hourCol\"));
secondColor = readColor(getParameter(\"secondCol\"));
}
// This method creates a color based on a string.
// The string is assumed to be \"red, green, blue\" where each
// of the colors is represented by its integer equivalent.
public Color readColor(String aColor)
{
if(aColor == null)
return Color.black;
int r, g, b;
//break the string apart into each number
StringTokenizer st = new StringTokenizer(aColor, \",\");
try
{
r = Integer.valueOf(st.nextToken()).intValue();
g = Integer.valueOf(st.nextToken()).intValue();
b = Integer.valueOf(st.nextToken()).intValue();
return new Color(r,g,b);
}
catch(Exception e)
{
System.out.println(\"An exception occurred trying to convert a parameter to a color:\" + e);
return Color.black;
}
}
public String getParameter(String name)
{
String ST;
if(inApplet)
return super.getParameter(name);
//if you are not in an applet you default all of the values
if(name == \"hourcol\")
return \"255,00,00\";
if(name == \"minuteCol\")
return \"00,255,00\";
if(name == \"secondCol\")
return \"00,00,255\";
if(name == \"borderCol\")
return \"255,255,255\";
if(name == \"faceCol\")
return \"125,125,125\";
return null;
}
public void start()
{
thisThread = new Thread(this);
thisThread.start();
}
public void run()
{
while(true)
{
repaint();
try
{
thisThread.sleep(1000);
}catch(Exception e){}
}
}
public void update(Graphics g)
{
paint(g);
}
public void paint(Graphics g)
{
//fill clock face
g.setColor(faceColor);
g.fillOval(0,0,100,100);
g.setColor(borderColor);
g.drawOval(0,0,100,100);
//get the current time
Calendar d = Calendar.getInstance();
//draw the minute hand
g.setColor(minuteColor);
double angle = (((double)(90 - d.get(Calendar.MINUTE)))/60)*2*Math.PI;
g.drawLine(50,50,50+(int)(Math.sin(angle)*50),50+(int)(Math.cos(angle)*50));
//draw the hour hand
g.setColor(hourColor);
angle = ((((double)18 - d.get(Calendar.HOUR_OF_DAY)+(double)d.get(Calendar.MINUTE)/60))/12)*2*Math.PI;
g.drawLine(50,50,50+(int)(Math.sin(angle)*40), 50+(int)(Math.cos(angle)*40));
//draw the second hand
g.setColor(secondColor);
angle = (((double)(90 - d.get(Calendar.SECOND)))/60)*2*Math.PI;
g.drawLine(50,50,50+(int)(Math.sin(angle)*50), 50+(int)(Math.cos(angle)*50));
}
static boolean inApplet = true;
public static void main(String args[])
{
//set a boolean flag to show if you are in an applet or not
inApplet = false;
//create a frame to place our application in
//you can change the string value to show your desired label
//for the frame
Frame myFrame = new Frame(\"Clock as an Application\");
myFrame.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent event)
{
System.exit(0);
}
});
//create a clock instance
Clock myApp = new Clock();
//add the current application to the frame
myFrame.add(\"Center\", myApp);
//resize the frame to the desired size and make it visible
myFrame.setSize(100,130);
myFrame.show();
//run the methods the browser normally would
myApp.init();
myApp.start();
}
}
html Code
程序代码:
<html>
<title>Clock</title>
<h1>Clock</h1>
<hr>
<applet code = \"Clock.class\" width=100 height=100>
<param name= hourCol value=255,00,00>
<param name= minuteCol value=00,255,00>
<param name= secondCol value=00,00,255>
<param name= borderCol value=255,255,255>
<param name= faceCol value=125,125,125>
</applet>
<hr>
</html>
[此贴子已经被作者于2006-4-7 22:53:49编辑过]