呃……表着急嘛。
我把我的.class文件存在http://www.mikebox.com/index.php?code=78924014,提取码78924014,你可以去运行下。
要是不放心的话修改后的java文件如下,整个在一个Test.java文件下:
import java.awt.*;
import javax.swing.*;
import java.awt.geom.*;
import java.util.*;
public class Test {
public static void main(String[] args) {
TestFrame frame=new TestFrame();
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
class TestFrame extends JFrame {
public TestFrame(){
setTitle("钟表测试");
JPanel panel=new TestPanel();
add(panel);
pack();
TestRunnable r=new TestRunnable(panel);
r.start();
}
}
class TestPanel extends JPanel {
public TestPanel() {
setPreferredSize(new Dimension(201,201));
}
public void paintComponent(Graphics g) {
super.paintComponent(g);
Graphics2D g2=(Graphics2D)g;
Ellipse2D c=new Ellipse2D.Double(0,0,200,200);
g2.draw(c);
Calendar calendar=Calendar.getInstance();
double minutes=calendar.get(Calendar.HOUR)*60+calendar.get(Calendar.MINUTE);
double hourAngle=Math.toRadians(90-360*minutes/(12*60));
drawHand(g2,hourAngle,50);
double minuteAngle=Math.toRadians(90-360*minutes/60);
drawHand(g2,minuteAngle,70);
double seconds =
calendar.get(Calendar.HOUR)*60+calendar.get(Calendar.MINUTE) + calendar.get(Calendar.SECOND);
double secondsAngle=Math.toRadians(90-seconds*6);
drawHand(g2,secondsAngle, 90);
}
public void drawHand(Graphics2D g2,double angle,double handLength){
Point2D end=new Point2D.Double(
100+handLength*Math.cos(angle),
100-handLength*Math.sin(angle));
Point2D center=new Point2D.Double(100,100);
g2.draw(new Line2D.Double(center,end));
}
}
class TestRunnable implements Runnable {
private Thread t;
private Component component;
public TestRunnable(Component aComponent) {
component=aComponent;
t = new Thread(this);
}
public void start(){
t.start();
}
public void run() {
while(true)
try{
component.repaint();
Thread.sleep(1000);
}catch(InterruptedException e){
t.interrupt();
}
}
}
个别类做了一点调整。
同意楼上的,你没有执行更新图象的操作
确实是这样的!
你只是画了个图,和你的日历没有直接的联系