JAVA绘制简易时钟

mac2024-06-06  60

代码如下:

package java2; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.sql.Time; import java.util.Date; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.Timer; public class zzj extends JFrame{ public zzj() { // TODO Auto-generated constructor stub //把钟居于图像中间,其实没什么用的 setLayout(new BorderLayout()); add(new clock(),BorderLayout.CENTER); } public static void main(String arg[]) { zzj frame=new zzj(); frame.setTitle("时钟"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(190, 220); frame.setLocationRelativeTo(null); frame.setVisible(true); } class clock extends JPanel{ //xbase,ybase,radius都可以看成是半径 private int xbase,ybase,radius; private double s=0;//秒 private int minute=0;//分 private int hour=0;//小时 public clock() { // TODO Auto-generated constructor stub //获取当前的时间 Date date=new Date(); hour=date.getHours(); minute=date.getMinutes(); s=date.getSeconds(); //创建一个时间监听器,每1000毫秒 进行一次监听,就是创建一个Listener()类 ,调用其actionPerformed方法 Timer timer=new Timer(1000, new Listener()); timer.start();//开始计时。很重要,没有的话程序不能运行 } //Listener类接口ActionListener 。所以必须重新actionPerformed方法 class Listener implements ActionListener{ @Override public void actionPerformed(ActionEvent e) { // TODO Auto-generated method stub s++; //每次执行次函数就是经过1秒,60秒变1分,60分变1小时 if(s==60) minute++; if(minute==60) hour++; repaint(); } } @Override protected void paintComponent(Graphics g) { // TODO Auto-generated method stub super.paintComponent(g); radius=ybase=xbase=150/2; //给x,y,r赋值,150/2是我随便赋的 g.setColor(Color.black); //画出时钟的形状,也就是画圆 g.drawOval(10, 10, 150, 150); //画出时钟的数字 new String(i+" ")是用于将数字int型转成string型 for (int i = 1; i <= 12; i++) { g.drawString(new String(i+" "), (int)(10+xbase+Math.sin(Math.PI/6*i)*radius), (int)(10+ybase-Math.cos(Math.PI/6*i)*radius)); } //画出秒针,xbase+10是圆心的x坐标, ybase+10是圆心的y坐标。(10+xbase+(Math.sin(s*Math.PI/60)*radius)是针尖的x坐标(10+ybase-(Math.cos(s*Math.PI/60)*radius))是针尖的y坐标,根据几何可以得到这个写法的 g.setColor(Color.blue); g.drawLine(xbase+10, ybase+10, (int)(10+xbase+(Math.sin(s*Math.PI/60)*radius)), (int)(10+ybase-(Math.cos(s*Math.PI/60)*radius))); //画出分针 g.setColor(Color.green); g.drawLine(xbase+10, ybase+10, (int)(10+xbase+(Math.sin(minute*Math.PI/60)*radius)), (int)(10+ybase-(Math.cos(minute*Math.PI/60)*radius))); //画出时针 g.setColor(Color.red); g.drawLine(xbase+10, ybase+10, (int)(10+xbase+(Math.sin(hour*Math.PI/60)*radius)), (int)(10+ybase-(Math.cos(hour*Math.PI/60)*radius))); } } }

运行图:

最新回复(0)