Java实现的简单的时钟

有诸多缺点,比如不是时间触发而是靠线程挂起

package com.zhou.clock;
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
import java.lang.Math;
import java.util.Date;
public class Clock extends JFrame {
ClockPane cp;
public Clock (){
super("clock");
setDefaultCloseOperation(EXIT_ON_CLOSE);
cp=new ClockPane();
cp.initTime();
//Container content=getContentPane();
//content.add(cp);
setContentPane(cp);//这句可用上面两句代替
setBounds(400,400,200,220);
setResizable(false);
setVisible(true);
}
public void interval(){
while(true){
try{Thread.sleep(1000);}
catch(Exception e){
}
cp.drawClock(cp.getGraphics());
}
}
public static void main(String[] args){
Clock clock=new Clock();
clock.interval();
}
class ClockPane extends JPanel{
double secondRadian;
double minuteRadian;
double hourRadian;
public void paintCompnent(Graphics comp){
drawClock(comp);
}
public void initTime(){
Date d=new Date();
int hours=d.getHours();
int minutes=d.getMinutes();
int seconds=d.getSeconds();
hourRadian=hours*Math.PI/6 + ((float)minutes/60)*Math.PI/6;
minuteRadian=minutes*Math.PI/30;
secondRadian=seconds*Math.PI/30;
}
public void drawClock(Graphics comp){
Graphics2D comp2D= (Graphics2D)comp;
comp2D.setColor(Color.GRAY);
BasicStroke pen=new BasicStroke(10F,BasicStroke.CAP_BUTT,BasicStroke.JOIN_ROUND);
comp2D.setStroke(pen);
Arc2D.Float circle=new Arc2D.Float(20F,20F,150F,150F,0F,360F,Arc2D.OPEN);
comp2D.draw(circle);
comp2D.setColor(Color.white);
comp2D.fill(circle);
pen=new BasicStroke(1F,BasicStroke.CAP_BUTT,BasicStroke.JOIN_ROUND);
comp2D.setStroke(pen);
comp2D.setColor(Color.CYAN);
circle=new Arc2D.Float(20.5F,20.5F,149F,149F,0F,360F,Arc2D.OPEN);
comp2D.draw(circle);
comp2D.setColor(Color.black);
pen=new BasicStroke(8F,BasicStroke.CAP_BUTT,BasicStroke.JOIN_ROUND);
comp2D.setStroke(pen);
Pin stake=new Pin(95.0,95.0,75.0);
double stakeRadian=0;
for(int i=0;i<12;i++){
comp2D.draw(stake.createStake(stakeRadian));
stakeRadian+=Math.PI/6;
}
pen=new BasicStroke(2F,BasicStroke.CAP_BUTT,BasicStroke.JOIN_ROUND);
comp2D.setStroke(pen);
comp2D.setColor(Color.CYAN);
for(int i=0;i<12;i++){
comp2D.draw(stake.createStake(stakeRadian));
stakeRadian+=Math.PI/6;
}
comp2D.setColor(Color.DARK_GRAY);
Pin secondPin =new Pin(95.0,95.0,65.0);
Pin minutePin =new Pin(95.0,95.0,50.0);
Pin hourPin =new Pin(95.0,95.0,40.0);
pen =new BasicStroke(2F,BasicStroke.CAP_BUTT,BasicStroke.JOIN_ROUND);
BasicStroke pen1=new BasicStroke(3F,BasicStroke.CAP_BUTT,BasicStroke.JOIN_ROUND);
BasicStroke pen2=new BasicStroke(4F,BasicStroke.CAP_BUTT,BasicStroke.JOIN_ROUND);
initTime();
comp2D.setStroke(pen);
comp2D.draw(secondPin.createPin(secondRadian));
comp2D.setStroke(pen1);
comp2D.draw(minutePin.createPin(minuteRadian));
comp2D.setStroke(pen2);
comp2D.draw(hourPin.createPin(hourRadian));
}
}
}
package com.zhou.clock;
import java.awt.*;
import java.awt.geom.*;
import javax.swing.*;
import java.lang.Math;
public class Pin{
double constantX;
double constantY;
double length;
public Pin(double inputX, double inputY, double inputLength){
constantX=inputX;
constantY=inputY;
length =inputLength;
}
public Line2D.Double createPin(double radian){
double variableX;
double variableY;
variableX=constantX+length*Math.sin(radian);
variableY=constantY-length*Math.cos(radian);
Line2D.Double ln=new Line2D.Double(constantX,constantY,variableX,variableY);
return ln;
}
public Line2D.Double createStake(double radian){
double innerX;
double innerY;
double outerX;
double outerY;
innerX=constantX+(length-15)*Math.sin(radian);
innerY=constantY-(length-15)*Math.cos(radian);
outerX=constantX+length*Math.sin(radian);
outerY=constantY-length*Math.cos(radian);
Line2D.Double ln=new Line2D.Double(innerX,innerY,outerX,outerY);
return ln;
}
}

时间: 2024-09-14 23:27:45

Java实现的简单的时钟的相关文章

PHP调用JAVA的WebService简单实例

 本篇文章主要是对PHP调用JAVA的WebService简单实例进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助 使用PHP调用JAVA语言开发的WebService. 客户端提交两个String类型的参数,服务端返回一个对象类型. 服务端使用AXIS-1.4作为SOAP引擎.客户端为PHP5.2.9,使用NuSOAP作为SOAP引擎.   服务端   对象类    代码如下: import java.io.Serializable;   public class Person imp

怎么用Java编写一个简单的登录系统?可以注册账号的那种

问题描述 怎么用Java编写一个简单的登录系统?可以注册账号的那种 数据库用的是MySQL,但Java操作方面的不知道怎么入手,求大神指点啊,有实例参考就更好了,谢谢 解决方案 import java.awt.event.*; import javax.swing.*; import java.awt.*; import java.awt.Container; import java.util.*; import java.sql.*; class Login extends JFrame im

java代码-Java中的简单Lottery问题,急求!!!麻烦了。。。

问题描述 Java中的简单Lottery问题,急求!!!麻烦了... 从1~22中随机产生5个随机数,不能有重复,关键我的有重复,帮忙修改下,我的问题在哪里??改了好多回都不行..... 解决方案 有一个办法可以解决你的问题,那就是将生成的随机数存储在HashSet当中,它会自动去除重复的元素,当个数达到5个时,停止生成.我的代码如下:public static void main(String[] args) { int[] mylist = new int[5]; HashSet rando

java Socket实现简单在线聊天(二)

接<java Socket实现简单在线聊天(一)>,在单客户端连接的基础上,这里第二步需要实现多客户端的连接,也就需要使用到线程.每当有一个新的客户端连接上来,服务端便需要新启动一个线程进行处理,从而解决之前的循环读取中造成阻塞的问题. 写线程通常有两种方法,集成Thread或者实现runnable接口,原则上是能实现runnable的情况下就不继承,因为实现接口的方式更加灵活. 客户端代码相较之前没有变化,变得是服务端,因此这里便只贴出服务端代码: package chat.chat; im

CSS3+HTML5特效9 - 简单的时钟

原文:CSS3+HTML5特效9 - 简单的时钟 效果演示(加快了100倍)                       实现原理 利用CSS3的transform-origin 及 transform 完成以上效果.   代码及说明 1 <style> 2 @-webkit-keyframes rotateLabel { 3 0%{ 4 -webkit-transform-origin:0% 100%; 5 -webkit-transform: rotate(0deg); 6 } 7 100

Java语言实现简单FTP软件------&amp;gt;FTP软件主界面的实现(四)

首先看一下该软件的整体代码框架                        1.首先介绍程序的主入口FTPMain.java,采用了一个漂亮的外观风格 package com.oyp.ftp; import java.util.logging.Level; import java.util.logging.Logger; import javax.swing.UIManager; import com.sun.java.swing.plaf.nimbus.NimbusLookAndFeel;

自己用java写的简单的http服务器,该怎么测试最大连接的socket数量?

问题描述 自己用java写的简单的http服务器,该怎么测试最大连接的socket数量? 服务器监听端口代码:while (true) { try { Socket connection = server.accept(); FileUtils.writeLocal(TimeUtils.getCurrentTime()); FileOutputStream fos = new FileOutputStream(""serverlog.txt"" true); thr

Java语言实现简单FTP软件------&amp;gt;源码放送(十三)

Java语言实现简单FTP软件------>FTP协议分析(一) Java语言实现简单FTP软件------>FTP软件效果图预览之下载功能(二) Java语言实现简单FTP软件------>FTP软件效果图预览之上传功能(三) Java语言实现简单FTP软件------>FTP软件主界面的实现(四) Java语言实现简单FTP软件------>FTP软件本地窗口的实现(五) Java语言实现简单FTP软件------>FTP软件远程窗口的实现(六) Java语言实现简

JAVA实现的简单万年历代码_java

本文实例讲述了JAVA实现的简单万年历.分享给大家供大家参考,具体如下: import java.util.Scanner; public class PrintCalendar { public static void main(String[] args) { int years = 0; int month = 0; int days = 0; boolean isRun = false; //從控制台輸入年,月 Scanner input = new Scanner(System.in)