import java.awt.*;
import java.util.*;
import javax.swing.*;
import java.awt.geom.*; //主类
public class ClockTest
{
public static void main(String[] args)
{
Clockframe frame=new Clockframe();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
} class Clockframe extends JFrame
{
public Clockframe()
{
setTitle("时钟");
setSize(400,400); panel=new Clockpanel();
panel.start();
add(panel,BorderLayout.CENTER);
}
private Clockpanel panel;
} //时钟界面类
class Clockpanel extends JPanel implements Runnable
{
public void paintComponent(Graphics g)
{
super.paintComponents(g);
g2=(Graphics2D)g;
Ellipse2D circle=new Ellipse2D.Double(100,100,r,r);
g2.draw(circle); //获取时间
nowtime=Calendar.getInstance();
hour=nowtime.get(Calendar.HOUR_OF_DAY);
minute=nowtime.get(Calendar.MINUTE);
secend=nowtime.get(Calendar.SECOND); //设置钟面
Font font=new Font("SansSerif",Font.BOLD,12);
g2.setFont(font);
drawstring("1",Math.toRadians(90-360*1/12),0.44*r);
drawstring("2",Math.toRadians(90-360*2/12),0.44*r);
drawstring("3",Math.toRadians(90-360*3/12),0.46*r);
drawstring("4",Math.toRadians(90-360*4/12),0.46*r);
drawstring("5",Math.toRadians(90-360*5/12),0.48*r);
drawstring("6",Math.toRadians(90-360*6/12),0.5*r);
drawstring("7",Math.toRadians(90-360*7/12),0.5*r);
drawstring("8",Math.toRadians(90-360*8/12),0.5*r);
drawstring("9",Math.toRadians(90-360*9/12),0.5*r);
drawstring("10",Math.toRadians(90-360*10/12),0.48*r);
drawstring("11",Math.toRadians(90-360*11/12),0.46*r);
drawstring("12",Math.toRadians(90-360*12/12),0.44*r); //画时针
double hourAngle=Math.toRadians(90-360*hour/12);
drawHand(g2,hourAngle,0.2*r);
//画分针
g2.setColor(Color.blue);
double minuteAngle=Math.toRadians(90-360*minute/60);
drawHand(g2,minuteAngle,0.3*r);
//画秒针
g2.setColor(Color.red);
double secendAngle=Math.toRadians(90-360*secend/60);
drawHand(g2,secendAngle,0.4*r);
//画出时间
g2.drawString(hour+":"+minute+":"+secend,180,350); }
//画线方法
public void drawHand(Graphics2D g2,double angle,double length)
{
Point2D end=new Point2D.Double(
r+length*Math.cos(angle),
r-length*Math.sin(angle));
Point2D fist=new Point2D.Double(r,r);
g2.draw(new Line2D.Double(fist,end));
} //画表盘的方法
public void drawstring(String s,double angle,double length)
{
int y=(int)(r-length*Math.sin(angle));
int x=(int)(r+length*Math.cos(angle));
g2.drawString(s,x,y);
} public void start()//用于启动的标准程序
{
if (clockThread == null) //判断线程是否还未创建
clockThread = new Thread(this);
clockThread.start();//启动线程
} public void run() //用于定义运行内容的标准程序
{
while (true)
{
try {
clockThread.sleep(1000);//休眠1秒
} catch (InterruptedException e){} //异常错误处理,防止出现中断错误
repaint();//重绘组件
}
} private Thread clockThread;
private Graphics2D g2;
private int r=200;
private Calendar nowtime;
private int hour;
private int minute;
private int secend;
}
import java.util.*;
import javax.swing.*;
import java.awt.geom.*; //主类
public class ClockTest
{
public static void main(String[] args)
{
Clockframe frame=new Clockframe();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
} class Clockframe extends JFrame
{
public Clockframe()
{
setTitle("时钟");
setSize(400,400); panel=new Clockpanel();
panel.start();
add(panel,BorderLayout.CENTER);
}
private Clockpanel panel;
} //时钟界面类
class Clockpanel extends JPanel implements Runnable
{
public void paintComponent(Graphics g)
{
super.paintComponents(g);
g2=(Graphics2D)g;
Ellipse2D circle=new Ellipse2D.Double(100,100,r,r);
g2.draw(circle); //获取时间
nowtime=Calendar.getInstance();
hour=nowtime.get(Calendar.HOUR_OF_DAY);
minute=nowtime.get(Calendar.MINUTE);
secend=nowtime.get(Calendar.SECOND); //设置钟面
Font font=new Font("SansSerif",Font.BOLD,12);
g2.setFont(font);
drawstring("1",Math.toRadians(90-360*1/12),0.44*r);
drawstring("2",Math.toRadians(90-360*2/12),0.44*r);
drawstring("3",Math.toRadians(90-360*3/12),0.46*r);
drawstring("4",Math.toRadians(90-360*4/12),0.46*r);
drawstring("5",Math.toRadians(90-360*5/12),0.48*r);
drawstring("6",Math.toRadians(90-360*6/12),0.5*r);
drawstring("7",Math.toRadians(90-360*7/12),0.5*r);
drawstring("8",Math.toRadians(90-360*8/12),0.5*r);
drawstring("9",Math.toRadians(90-360*9/12),0.5*r);
drawstring("10",Math.toRadians(90-360*10/12),0.48*r);
drawstring("11",Math.toRadians(90-360*11/12),0.46*r);
drawstring("12",Math.toRadians(90-360*12/12),0.44*r); //画时针
double hourAngle=Math.toRadians(90-360*hour/12);
drawHand(g2,hourAngle,0.2*r);
//画分针
g2.setColor(Color.blue);
double minuteAngle=Math.toRadians(90-360*minute/60);
drawHand(g2,minuteAngle,0.3*r);
//画秒针
g2.setColor(Color.red);
double secendAngle=Math.toRadians(90-360*secend/60);
drawHand(g2,secendAngle,0.4*r);
//画出时间
g2.drawString(hour+":"+minute+":"+secend,180,350); }
//画线方法
public void drawHand(Graphics2D g2,double angle,double length)
{
Point2D end=new Point2D.Double(
r+length*Math.cos(angle),
r-length*Math.sin(angle));
Point2D fist=new Point2D.Double(r,r);
g2.draw(new Line2D.Double(fist,end));
} //画表盘的方法
public void drawstring(String s,double angle,double length)
{
int y=(int)(r-length*Math.sin(angle));
int x=(int)(r+length*Math.cos(angle));
g2.drawString(s,x,y);
} public void start()//用于启动的标准程序
{
if (clockThread == null) //判断线程是否还未创建
clockThread = new Thread(this);
clockThread.start();//启动线程
} public void run() //用于定义运行内容的标准程序
{
while (true)
{
try {
clockThread.sleep(1000);//休眠1秒
} catch (InterruptedException e){} //异常错误处理,防止出现中断错误
repaint();//重绘组件
}
} private Thread clockThread;
private Graphics2D g2;
private int r=200;
private Calendar nowtime;
private int hour;
private int minute;
private int secend;
}
解决方案 »
- 请求答案
- Java的网络高手和Xml高手请进(三)
- jdbc ,怎么动态建立Table?
- 将JDK换为1.4以后,出现的Jbuilder6.0的中文问题。请各位大侠不吝赐教!
- 哪里可以下JSP的中文文档及相关资料
- 又谁能告诉我用SWT的开发包,怎么作出一个竖着的工具栏。
- 新手提问:如何把内存中的数据流作为文件使用(不能存成文件,在内存中)?
- 看看哪错了!谢谢,再线等待回答!
- java处理一行字符串,怎么把有标点紧跟空格(比如:“... ”)的类似可能是要换行的都给换成标点+换行符+空格
- 关于java中菜单事件的监听问题,求各位大神!
- java 如何实现“另存为”“保存”“查找”等功能
- 问一个概念问题
class Clockpanel extends JPanel implements Runnable
{
public void paintComponent(Graphics g)
{
super.paintComponent(g); //这个方法拼写错了,父类的方法负责擦除
// super.paintComponents(g); 就是那个方法拼写错了,代码帮你重帖一下
import java.awt.*;
import java.util.*;
import javax.swing.*;
import java.awt.geom.*; //主类
public class ClockTest
{
public static void main(String[] args)
{
Clockframe frame=new Clockframe();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
} class Clockframe extends JFrame
{
public Clockframe()
{
setTitle("时钟");
setSize(400,400);
panel=new Clockpanel();
panel.start();
add(panel,BorderLayout.CENTER);
}
private Clockpanel panel;
} //时钟界面类
class Clockpanel extends JPanel implements Runnable
{
public void paintComponent(Graphics g)
{
super.paintComponent(g); //这个方法拼写错了,父类的方法负责擦除
// super.paintComponents(g); g2=(Graphics2D)g;
Ellipse2D circle=new Ellipse2D.Double(100,100,r,r);
g2.draw(circle);
//获取时间
nowtime=Calendar.getInstance();
hour=nowtime.get(Calendar.HOUR_OF_DAY);
minute=nowtime.get(Calendar.MINUTE);
secend=nowtime.get(Calendar.SECOND);
//设置钟面
Font font=new Font("SansSerif",Font.BOLD,12);
g2.setFont(font);
drawstring("1",Math.toRadians(90-360*1/12),0.44*r);
drawstring("2",Math.toRadians(90-360*2/12),0.44*r);
drawstring("3",Math.toRadians(90-360*3/12),0.46*r);
drawstring("4",Math.toRadians(90-360*4/12),0.46*r);
drawstring("5",Math.toRadians(90-360*5/12),0.48*r);
drawstring("6",Math.toRadians(90-360*6/12),0.5*r);
drawstring("7",Math.toRadians(90-360*7/12),0.5*r);
drawstring("8",Math.toRadians(90-360*8/12),0.5*r);
drawstring("9",Math.toRadians(90-360*9/12),0.5*r);
drawstring("10",Math.toRadians(90-360*10/12),0.48*r);
drawstring("11",Math.toRadians(90-360*11/12),0.46*r);
drawstring("12",Math.toRadians(90-360*12/12),0.44*r); //画时针
double hourAngle=Math.toRadians(90-360*hour/12);
drawHand(g2,hourAngle,0.2*r);
//画分针
g2.setColor(Color.blue);
double minuteAngle=Math.toRadians(90-360*minute/60);
drawHand(g2,minuteAngle,0.3*r);
//画秒针
g2.setColor(Color.red);
double secendAngle=Math.toRadians(90-360*secend/60);
drawHand(g2,secendAngle,0.4*r);
//画出时间
g2.drawString(hour+":"+minute+":"+secend,180,350); }
//画线方法
public void drawHand(Graphics2D g2,double angle,double length)
{
Point2D end=new Point2D.Double(
r+length*Math.cos(angle),
r-length*Math.sin(angle));
Point2D fist=new Point2D.Double(r,r);
g2.draw(new Line2D.Double(fist,end));
} //画表盘的方法
public void drawstring(String s,double angle,double length)
{
int y=(int)(r-length*Math.sin(angle));
int x=(int)(r+length*Math.cos(angle));
g2.drawString(s,x,y);
} public void start()//用于启动的标准程序
{
if (clockThread == null) //判断线程是否还未创建
clockThread = new Thread(this);
clockThread.start();//启动线程
} public void run() //用于定义运行内容的标准程序
{
while (true)
{
try{
clockThread.sleep(1000);//休眠1秒
} catch(InterruptedException e){} //异常错误处理,防止出现中断错误
repaint();//重绘组件
}
} private Thread clockThread;
private Graphics2D g2;
private int r=200;
private Calendar nowtime;
private int hour;
private int minute;
private int secend;
}
{
while (true)
{
try{
clockThread.sleep(1000);//休眠1秒
} catch(InterruptedException e){} //异常错误处理,防止出现中断错误
repaint();//重绘组件
}
}
import java.awt.*;
import java.util.*;
import javax.swing.*;
import java.awt.geom.*; //主类
public class ClockTest
{
public static void main(String[] args)
{
Clockframe frame=new Clockframe();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
} class Clockframe extends JFrame
{
public Clockframe()
{
setTitle("时钟");
setSize(400,400);
panel=new Clockpanel();
panel.start();
add(panel,BorderLayout.CENTER);
}
private Clockpanel panel;
} //时钟界面类
class Clockpanel extends JPanel implements Runnable
{
public void paintComponent(Graphics g)
{
super.paintComponent(g); g2=(Graphics2D)g;
Ellipse2D circle=new Ellipse2D.Double(100,100,r,r);
g2.draw(circle);
//获取时间
nowtime=Calendar.getInstance();
hour=nowtime.get(Calendar.HOUR_OF_DAY);
minute=nowtime.get(Calendar.MINUTE);
secend=nowtime.get(Calendar.SECOND);
//设置钟面
Font font=new Font("SansSerif",Font.BOLD,12);
g2.setFont(font);
drawstring("1",Math.toRadians(90-360*1/12),0.44*r);
drawstring("2",Math.toRadians(90-360*2/12),0.44*r);
drawstring("3",Math.toRadians(90-360*3/12),0.46*r);
drawstring("4",Math.toRadians(90-360*4/12),0.46*r);
drawstring("5",Math.toRadians(90-360*5/12),0.48*r);
drawstring("6",Math.toRadians(90-360*6/12),0.5*r);
drawstring("7",Math.toRadians(90-360*7/12),0.5*r);
drawstring("8",Math.toRadians(90-360*8/12),0.5*r);
drawstring("9",Math.toRadians(90-360*9/12),0.5*r);
drawstring("10",Math.toRadians(90-360*10/12),0.48*r);
drawstring("11",Math.toRadians(90-360*11/12),0.46*r);
drawstring("12",Math.toRadians(90-360*12/12),0.44*r); //画时针
double hourAngle=Math.toRadians(90-360*hour/12);
drawHand(g2,hourAngle,0.2*r);
//画分针
g2.setColor(Color.blue);
double minuteAngle=Math.toRadians(90-360*minute/60);
drawHand(g2,minuteAngle,0.3*r);
//画秒针
g2.setColor(Color.red);
double secendAngle=Math.toRadians(90-360*secend/60);
drawHand(g2,secendAngle,0.4*r);
//画出时间
g2.drawString(hour+":"+minute+":"+secend,180,350); }
//画线方法
public void drawHand(Graphics2D g2,double angle,double length)
{
Point2D end=new Point2D.Double(
r+length*Math.cos(angle),
r-length*Math.sin(angle));
Point2D fist=new Point2D.Double(r,r);
g2.draw(new Line2D.Double(fist,end));
} //画表盘的方法
public void drawstring(String s,double angle,double length)
{
int y=(int)(r-length*Math.sin(angle));
int x=(int)(r+length*Math.cos(angle));
g2.drawString(s,x,y);
} public void start()//用于启动的标准程序
{
if (clockThread == null) //判断线程是否还未创建
clockThread = new Thread(this);
clockThread.start();//启动线程
} public void run() //用于定义运行内容的标准程序
{
while (true)
{
try{
clockThread.sleep(1000);//休眠1秒
} catch(InterruptedException e){} //异常错误处理,防止出现中断错误
repaint();//重绘组件
}
} private Thread clockThread;
private Graphics2D g2;
private int r=200;
private Calendar nowtime;
private int hour;
private int minute;
private int secend;
}
这回终于可以了
把画时针和分针的代码改成:
double hourAngle=Math.toRadians(90-360*(hour%12)/12-(double)minute/60 * 30);
double minuteAngle=Math.toRadians(90-360*minute/60-(double)second/60 * 6);