java 钟_java时钟

|顶(0)|踩(0)2016-05-12

import javax.swing.*;

import java.awt.event.ActionListener;

import java.awt.event.ActionEvent;

import java.awt.*;

import java.util.Calendar;

import java.util.GregorianCalendar;

class Clock extends JFrame implements ActionListener{

int x,y,x0,y0,r,h,olds_x,olds_y,oldm_x,oldm_y,oldh_x,oldh_y,ss,mm,hh,old_m,old_h,ang;

final double RAD=Math.PI/180;

public Clock(){

super("Clock by kikiwawa");

setDefaultCloseOperation(3);

setSize(200,200);

setBackground(Color.BLACK);

setLocation(300,150);

setResizable(false);

setVisible(true);

int delay = 1000;

ActionListener drawClock = new ActionListener(){

public void actionPerformed(ActionEvent evt){

repaint();

}

};

new Timer(delay,drawClock).start();

}

public void actionPerformed(ActionEvent e){

}

public void paint(Graphics g){

Graphics2D g2D = (Graphics2D)g;

Insets insets = getInsets();

int L = insets.left/2,T = insets.top/2;

h = getSize().height;

g.setColor(Color.white);

g2D.setStroke(new BasicStroke(4.0f));

g.drawOval(L+40,T+40,h-80,h-80);

r=h/2-40;

x0=40+r-5+L;

y0=40+r-5-T;

ang=60;

for(int i=1;i<=12;i++){

x=(int)((r+10)*Math.cos(RAD*ang)+x0);

y=(int)((r+10)*Math.sin(RAD*ang)+y0);

g.drawString(""+i,x,h-y);

ang-=30;

}

Calendar now= new GregorianCalendar();

int nowh= now.get(Calendar.HOUR_OF_DAY);

int nowm= now.get(Calendar.MINUTE);

int nows= now.get(Calendar.SECOND);

String st;

if(nowh<10) st="0"+nowh;else st=""+nowh;

if(nowm<10) st+=":0"+nowm;else st+=":"+nowm;

if(nows<10) st+=":0"+nows;else st+=":"+nows;

g.setColor(Color.pink);

g.fillRect(L,T,50,28);

g.setColor(Color.blue);

g.drawString(st,L+2,T+26);

ss=90-nows*6;

mm=90-nowm*6;

hh=90-nowh*30-nowm/2;

x0=r+40+L;

y0=r+40+T;

if(olds_x>0){

g.setColor(getBackground());

g.drawLine(x0,y0,olds_x,h-olds_y);

}

else{

old_m = mm;

old_h = hh;

}

x=(int)(r*0.9*Math.cos(RAD*ss))+x0;

y=(int)(r*0.9*Math.sin(RAD*ss))+y0-2*T;

g.setColor(Color.yellow);

g.drawLine(x0,y0,x,h-y);

olds_x=x;

olds_y=y;

g2D.setStroke(new BasicStroke(2.2f));

if(old_m!=mm){

g.setColor(getBackground());

g.drawLine(x0,y0,oldm_x,h-oldm_y);

}

x=(int)(r*0.7*Math.cos(RAD*mm))+x0;

y=(int)(r*0.7*Math.sin(RAD*mm))+y0-2*T;

g.setColor(Color.green);

g.drawLine(x0,y0,x,h-y);

oldm_x=x;

oldm_y=y;

old_m=mm;

g2D.setStroke(new BasicStroke(3.4f));

if(old_h!=hh){

g.setColor(getBackground());

g.drawLine(x0,y0,oldh_x,h-oldh_y);

}

x=(int)(r*0.5*Math.cos(RAD*hh))+x0;

y=(int)(r*0.5*Math.sin(RAD*hh))+y0-2*T;

g.setColor(Color.red);

g.drawLine(x0,y0,x,h-y);

oldh_x=x;

oldh_y=y;

old_h=hh;

}

public static void main(String[] args){

Clock c = new Clock();

} }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要实现一个时钟效果,可以使用 Java 中的 Swing 组件库。下面是一个简单的 Java 时钟实现: ```java import java.awt.Font; import java.awt.Graphics; import java.text.SimpleDateFormat; import java.util.Calendar; import javax.swing.JFrame; import javax.swing.JPanel; public class Clock extends JPanel implements Runnable { private Thread thread; private Font clockFont; private SimpleDateFormat timeFormat; public Clock() { this.clockFont = new Font("Arial", Font.BOLD, 48); this.timeFormat = new SimpleDateFormat("HH:mm:ss"); this.thread = new Thread(this); this.thread.start(); } @Override public void paint(Graphics g) { super.paint(g); Calendar calendar = Calendar.getInstance(); String time = this.timeFormat.format(calendar.getTime()); g.setFont(this.clockFont); g.drawString(time, 100, 100); } @Override public void run() { while (true) { this.repaint(); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } public static void main(String[] args) { JFrame frame = new JFrame("Java Clock"); Clock clock = new Clock(); frame.add(clock); frame.setSize(300, 200); frame.setVisible(true); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); } } ``` 在这个例子中,我们使用了 JPanel 组件来绘制时钟,并且使用了 Thread 来更新时钟。在 run 方法中,我们使用了 Thread.sleep(1000) 来让线程休眠 1 秒,以保证时钟每秒更新一次。最后,我们将 JPanel 组件添加到 JFrame 中,并设置 JFrame 的大小和关闭操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值