我帮你稍微改了一下,好像可以了,你看看
你是g.drawLine没有对。
(int)(Math.cos(hourAngle))是恒等于0的。不会产生变化。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import java.awt.geom.*;
import javax.swing.Timer;
public class ClockStart
{
public static void main(String args[])
{
ClockFrame frame=new ClockFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
}
}
class ClockFrame extends JFrame
{
public ClockFrame()
{
setSize(450,300);
setTitle("Clock");
ClockPanel panel=new ClockPanel();
getContentPane().add(panel);
}
}
class ClockPanel extends JPanel
{
private GregorianCalendar calendar;
int i=0;
public ClockPanel()
{
calendar=new GregorianCalendar(TimeZone.getTimeZone("Asia/Taipei"));
ActionListener listener=new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
calendar.setTime(new Date());
repaint();
}
};
Timer t=new Timer(100,listener);
t.start();
setSize(450,300);
}
public void paint(Graphics g)
{
super.paintComponent(g);
g.drawOval(0,0,250,250);
int seconds=calendar.get(Calendar.HOUR)*60*60+calendar.get(Calendar.MINUTE)*60+calendar.get(Calendar.SECOND);
double hourAngle=2*Math.PI*(seconds-3*60*60)/(12*60*60);
double minuteAngle=2*Math.PI*(seconds-15*60)/(60*60);
double secondAngle=2*Math.PI*(seconds-15)/60;
g.drawLine(125,125,125+(int)(30.0*(Math.cos(hourAngle))),125+(int)(30.0*(Math.sin(hourAngle))));
g.drawLine(125,125,125+(int)(35.0*(Math.cos(minuteAngle))),125+(int)(35.0*(Math.sin(minuteAngle))));
g.drawLine(125,125,125+(int)(45.0*(Math.cos(secondAngle))),125+(int)(45.0*(Math.sin(secondAngle)))); }
}
你是g.drawLine没有对。
(int)(Math.cos(hourAngle))是恒等于0的。不会产生变化。
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
import java.awt.geom.*;
import javax.swing.Timer;
public class ClockStart
{
public static void main(String args[])
{
ClockFrame frame=new ClockFrame();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.show();
}
}
class ClockFrame extends JFrame
{
public ClockFrame()
{
setSize(450,300);
setTitle("Clock");
ClockPanel panel=new ClockPanel();
getContentPane().add(panel);
}
}
class ClockPanel extends JPanel
{
private GregorianCalendar calendar;
int i=0;
public ClockPanel()
{
calendar=new GregorianCalendar(TimeZone.getTimeZone("Asia/Taipei"));
ActionListener listener=new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
calendar.setTime(new Date());
repaint();
}
};
Timer t=new Timer(100,listener);
t.start();
setSize(450,300);
}
public void paint(Graphics g)
{
super.paintComponent(g);
g.drawOval(0,0,250,250);
int seconds=calendar.get(Calendar.HOUR)*60*60+calendar.get(Calendar.MINUTE)*60+calendar.get(Calendar.SECOND);
double hourAngle=2*Math.PI*(seconds-3*60*60)/(12*60*60);
double minuteAngle=2*Math.PI*(seconds-15*60)/(60*60);
double secondAngle=2*Math.PI*(seconds-15)/60;
g.drawLine(125,125,125+(int)(30.0*(Math.cos(hourAngle))),125+(int)(30.0*(Math.sin(hourAngle))));
g.drawLine(125,125,125+(int)(35.0*(Math.cos(minuteAngle))),125+(int)(35.0*(Math.sin(minuteAngle))));
g.drawLine(125,125,125+(int)(45.0*(Math.cos(secondAngle))),125+(int)(45.0*(Math.sin(secondAngle)))); }
}
public void paintComponet(Graphics g)
__↑__拼写错误!应该是paintComponent还有就是时/分/秒针不能准确地画出来,这是你算法的问题了。