学习java的路上大家写的博客无偿的给了我很大的帮助,我很感动,结合课本,我用java绘图做了一个简单的时钟,供初学者参考,注释很少,有问题直接问我,有时间一定回复。
package Mytest;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Insets;
import java.awt.RadialGradientPaint;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.GregorianCalendar;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.JFrame;
import javax.xml.parsers.DocumentBuilder;
public class lab1 extends JFrame implements ActionListener {
int x0,y0,r,h,angle,x,y,hour,minute,second,hours,xs,xy,oldxs=0,oldxy=0,xm,ym,oldxm=0,oldym=0,xh,yh,oldxh=0,oldyh=0;
double angles,anglem,angleh;
final double RAD = Math.PI/180;
public void sx(){
//public DrawClock drawClock;
this.repaint();
}
public lab1(){
this.setTitle("GD Time");
this.setSize(300,300);
this.setLocation(200,200);
this.setDefaultCloseOperation(3);
this.setResizable(false);
this.setVisible(true);
int delay = 1000;
Timer timer = new Timer();
timer.schedule(new DrawClock(), 0,delay);
}
class DrawClock extends TimerTask{
@Override
public void run() {
// TODO 自动生成的方法存根
repaint();
}
}
public void paint(Graphics myg){
Graphics2D myg2D = (Graphics2D)myg;
x0=150;y0=161;r=110;h=300;angle=60;
// Insets insets = getInsets();
// int lift = insets.left/2;
// int right = insets.right;
// int top = insets.top/2;
// int height = getSize().height;
// System.out.println("lift is : "+lift);
// System.out.println("right is : "+right);
// System.out.println("top is : "+top);
// System.out.println("height is : "+height);
myg2D.setStroke(new BasicStroke(2.0f));
myg.drawOval(40,51, 2*r,2*r);
for(int i =1;i<=12;i++){
x=(int)((r+12)*Math.cos(RAD*angle)+x0);
y=(int)((r+12)*Math.sin(RAD*angle)+y0);
myg.drawString(""+i, x-3, h-y+26);
angle-=30;
}
GregorianCalendar calendar = new GregorianCalendar();
hour = calendar.get(calendar.HOUR);
hours = calendar.get(calendar.HOUR_OF_DAY);
minute = calendar.get(calendar.MINUTE);
second = calendar.get(calendar.SECOND);
System.out.println("hour is "+hour);
System.out.println("hours is"+hours);
String sT;
if(hours<10){
sT = "0"+hours;
}
else{
sT = ""+hours;
}
if(minute<10){
sT +=":0"+minute;
}
else{
sT +=":"+minute;
}
if(second<10){
sT +=":0"+second;
}
else{
sT +=":"+second;
}
myg.setColor(Color.blue);
myg.fillRect(4, 27, 60, 20);
myg.setColor(Color.yellow);
myg.drawString(sT,8, 40);
//擦除秒针
if(oldxs!=0&&oldxy!=0){
myg2D.setStroke(new BasicStroke(1.5f));
myg.setColor(Color.WHITE);
myg.drawLine(x0, y0, oldxs, oldxy);
}
if(oldxh!=0&&oldyh!=0){
myg2D.setStroke(new BasicStroke(4.2f));
myg.setColor(Color.WHITE);
myg.drawLine(x0, y0, oldxh, oldxh);
}
if(oldxm!=0&&oldyh!=0){
myg2D.setStroke(new BasicStroke(2.5f));
myg.setColor(Color.WHITE);
myg.drawLine(x0, y0, oldxm, oldym);
}
//开始绘制时钟
myg2D.setStroke(new BasicStroke(1.5f));
angles = second*6*RAD;
myg.setColor(Color.red);
xs=(int)(0.9*r*Math.sin(angles))+150;
xy=r-(int)(0.9*r*Math.cos(angles))+51;
myg.drawLine(x0, y0, xs, xy);
oldxs = xs;
oldxy = xy;
myg2D.setStroke(new BasicStroke(2.5f));
anglem = minute*6*RAD;
myg.setColor(Color.black);
xm=150+(int)(0.7*r*Math.sin(anglem));
ym = 51+r-(int)(0.7*r*Math.cos(anglem));
myg.drawLine(x0, y0, xm, ym);
oldxm = xm;
oldym = ym;
myg2D.setStroke(new BasicStroke(4.2f));
angleh = hour*30*RAD;
myg.setColor(Color.black);
xh=150 +(int)(0.5*r*Math.sin(angleh));
yh=51+r-(int)(0.5*r*Math.cos(angleh));
myg.drawLine(x0, y0, xh, yh);
oldxh = xh;
oldyh = yh;
}
public static void main(String[] args){
new lab1();
}
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO 自动生成的方法存根
}
}