在学完javaswing的编程后,我自己动手实现了一个万年历和时钟。以下是我实现的代码:
1、DrawClock类:
package calender;
import java.awt.Color;
import java.awt.Graphics;
import java.util.Date;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.border.TitledBorder;
public class DrawClock extends JPanel implements Runnable {
Thread newThread;
public static int RADIUS=80;
public int centerX=150;
public int centerY=120;
public int hr,min,sec;
public int[] xPoint=new int[4];
public int[] yPoint=new int[4];
public double hrAlpha,minAlpha,secAlpha,theta;
private JTextField timezone;
public void start(){
newThread=new Thread(this);
newThread.start();
}
public void stop(){
newThread=null;
}
public void paint(Graphics g){
super.paint(g);
//画出刻度
double minuteAlpha = Math.PI/30.0;
int count =0;
for(double alpha=0;alpha<2.0*Math.PI;alpha+=minuteAlpha){
int tX= (int)(centerX+RADIUS*0.9*Math.sin(alpha));
int tY= (int)(centerY-RADIUS*0.9*Math.cos(alpha));
if(count%5==0){
g.setColor(Color.BLUE);
g.fill3DRect(tX, tY, 3, 3, false);
if(count%3==0){
g.setColor(Color.RED);
int m=count/15;
switch(m){
case 1:g.drawString("3", centerX+RADIUS-18,centerY+5);
break;
case 2:g.drawString("6", centerX-3, centerY+RADIUS-10);
break;
case 3:g.drawString("9", centerX-RADIUS+11, centerY+6);
break;
default :g.drawString("12", centerX-5, centerY-RADIUS+22);
}
}
}else{
g.setColor(Color.GRAY);
g.fill3DRect(tX, tY, 2, 2, false);
}
count++;
}
//画出时针
g.setColor(Color.gray);
drawPointer(g,centerX+2,centerY+2,(int)(RADIUS*0.75),hrAlpha);
g.setColor(Color.CYAN);
drawPointer(g,centerX,centerY,(int)(RADIUS*0.75),hrAlpha);