java类型模拟时钟代码 java类型模拟时钟代码大全

JAVA画时钟代码

import java.awt.*;

创新互联来电联系:18980820575,为您提供成都网站建设网页设计及定制高端网站建设服务,创新互联网页制作领域10年,包括成都假山制作等多个领域拥有多年的网站运维经验,选择创新互联,为企业保驾护航!

import java.awt.event.*;

import javax.swing.*;

import sun.util.calendar.Gregorian;

import java.util.Calendar;

import java.util.GregorianCalendar;

public class ClockPointer extends JFrame{

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 ClockPointer(){

super("Java时钟");

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

Image image = getToolkit().getImage("clock.gif");

setIconImage(image);

setSize(400,400);

setBackground(Color.white);

//setLocation(300,150);

this.setLocationRelativeTo(null);

setResizable(true);

int delay = 1000;

//创建一个监听事件

setVisible(true);

ActionListener drawClock = new ActionListener(){

public void actionPerformed(ActionEvent evt){

repaint();

}

};

//创建一个时间计数器,每一秒触发一次

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

}

java.text.SimpleDateFormat fmTime = new java.text.SimpleDateFormat("HH:mm:ss");

//绘制图形

public void paint(Graphics g){

super.paint(g);

g.setFont(null);

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(2.0f));

g.setColor(Color.gray);

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;

//绘制时钟上的12个字

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.setColor(Color.black);

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=fmTime.format(now.getTime());

//在窗体上显示时间

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;

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

//擦除秒针

//if(olds_x  0){

//    g.setColor(getBackground());

//    // g.setColor(Color.gray);

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

//}

//绘制秒针

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.2f));

//擦除时针

//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){

new ClockPointer();

}

}

//整理一下

用 java 写一个clock的类,100毫秒的时钟 求代码。。越简单越好。。最好有注释

这里有一个时钟的类,你看一下吧,不明白你的 100毫秒的时钟 是什么意思。

import java.awt.BasicStroke;

import java.awt.BorderLayout;

import java.awt.Canvas;

import java.awt.Color;

import java.awt.Graphics;

import java.awt.Graphics2D;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.geom.Line2D;

import java.util.Date;

import javax.swing.JButton;

import javax.swing.JFrame;

import javax.swing.JPanel;

import javax.swing.Timer;

public class ClockAs extends Canvas implements ActionListener {

static JButton jb = new JButton("开始");

static JButton jb1 = new JButton("暂停");

Date date;

Timer secondTime;

int hour, munite, second;

Line2D secondLine, muniteLine, hourLine;

int a, b, c;

double pointSX[] = new double[60],// 用来表示秒针端点坐标的数组

pointSY[] = new double[60], pointMX[] = new double[60], // 用来表示分针端点坐标的数组

pointMY[] = new double[60], pointHX[] = new double[60], // 用来表示时针端点坐标的数组

pointHY[] = new double[60];

ClockAs() {

secondTime = new Timer(1000, this);

pointSX[0] = 0; // 12点秒针位置

pointSY[0] = -100;

pointMX[0] = 0; // 12点分针位置

pointMY[0] = -90;

pointHX[0] = 0; // 12点时针位置

pointHY[0] = -70;

double angle = 6 * Math.PI / 180; // 刻度为6度

for (int i = 0; i 59; i++) // 计算出各个数组中的坐标

{

pointSX[i + 1] = pointSX[i] * Math.cos(angle) - Math.sin(angle)

* pointSY[i];

pointSY[i + 1] = pointSY[i] * Math.cos(angle) + pointSX[i]

* Math.sin(angle);

pointMX[i + 1] = pointMX[i] * Math.cos(angle) - Math.sin(angle)

* pointMY[i];

pointMY[i + 1] = pointMY[i] * Math.cos(angle) + pointMX[i]

* Math.sin(angle);

pointHX[i + 1] = pointHX[i] * Math.cos(angle) - Math.sin(angle)

* pointHY[i];

pointHY[i + 1] = pointHY[i] * Math.cos(angle) + pointHX[i]

* Math.sin(angle);

}

for (int i = 0; i 60; i++) {

pointSX[i] = pointSX[i] + 120; // 坐标平移

pointSY[i] = pointSY[i] + 120;

pointMX[i] = pointMX[i] + 120; // 坐标平移

pointMY[i] = pointMY[i] + 120;

pointHX[i] = pointHX[i] + 120; // 坐标平移

pointHY[i] = pointHY[i] + 120;

}

secondLine = new Line2D.Double(0, 0, 0, 0);

muniteLine = new Line2D.Double(0, 0, 0, 0);

hourLine = new Line2D.Double(0, 0, 0, 0);

secondTime.start(); // 秒针开始计时

}

public void paint(Graphics g) {

for (int i = 0; i 60; i++) // 绘制表盘上的小刻度和大刻度

{

int m = (int) pointSX[i];

int n = (int) pointSY[i];

if (i % 5 == 0) {

g.setColor(Color.red);

g.fillOval(m - 4, n - 4, 8, 8);

} else {

g.setColor(Color.cyan);

g.fillOval(m - 2, n - 2, 4, 4);

}

}

g.fillOval(115, 115, 10, 10); // 钟表中心的实心圆

Graphics2D g_2d = (Graphics2D) g;

g_2d.setColor(Color.red);

g_2d.draw(secondLine);

BasicStroke bs = new BasicStroke(3f, BasicStroke.CAP_ROUND,

BasicStroke.JOIN_MITER);

g_2d.setStroke(bs);

g_2d.setColor(Color.blue);

g_2d.draw(muniteLine);

bs = new BasicStroke(6f, BasicStroke.CAP_BUTT, BasicStroke.JOIN_MITER);

g_2d.setStroke(bs);

g_2d.setColor(Color.green);

g_2d.draw(hourLine);

}

public void actionPerformed(ActionEvent e) {

if (e.getSource() == secondTime) {

date = new Date();

String s = date.toString();

hour = Integer.parseInt(s.substring(11, 13));

munite = Integer.parseInt(s.substring(14, 16));

second = Integer.parseInt(s.substring(17, 19)); // 获取时间中的秒

int h = hour % 12;

a = second; // 秒针端点的坐标

b = munite; // 分针端点的坐标

c = h * 5 + munite / 12; // 时针端点的坐标

secondLine.setLine(120, 120, (int) pointSX[a], (int) pointSY[a]);

muniteLine.setLine(120, 120, (int) pointMX[b], (int) pointMY[b]);

hourLine.setLine(120, 120, (int) pointHX[c], (int) pointHY[c]);

repaint();

}

if (e.getSource() == jb) {

secondTime.start();

}

if (e.getSource() == jb1) {

secondTime.stop();

}

}

public static void main(String args[]) {

JFrame win = new JFrame("时钟");

JPanel jp = new JPanel();

jp.add(jb);

jp.add(jb1);

ClockAs clock = new ClockAs();

jb.addActionListener(clock);

jb1.addActionListener(clock);

win.add(clock, BorderLayout.CENTER);

win.add(jp, "South");

win.setVisible(true);

win.setSize(246, 300);

win.setDefaultCloseOperation(3);

win.validate();

}

}

怎样用java 程序写一个时钟程序

面向对象思想写成:

下面是一个显示器类

public class Display {

private int value;//现在的值

private int limit;//上限值

Display( int limit) {

this.limit = limit;

}

public void increase() {

value++;

if(value == limit) {

value = 0;

}

}

public int getValue() {

return value;

}

public static void main(String[] args) {

Display d = new Display(24);

for(;;) {

d.increase();

System.out.println(d.getValue());

}

}

}

下面创建一个时钟对象:

public class Clock {

private Display h = new Display(24);

private Display min = new Display(60);

private Display s = new Display(60);

public void start () {

for(;;) {

s.increase();

if(s.getValue() == 0){//如果分重置,小时+1

min.increase();

if(min.getValue() == 0){//如果分重置,小时+1

h.increase();

}

}

System.out.printf("%02d:%02d:%02d\n",h.getValue(), min.getValue(),s.getValue());//格式输出

}

}

public static void main(String[] args) {

Clock clock = new Clock();

clock.start();

}

这段java代码, 通过一个模拟时钟的程序,熟悉构造方法重载, 可是看不懂啊 麻烦高手帮忙解释下

//这是新建了一个public类,名称为Time

public class Time{

//其中有三个变量,表示时分秒

private int hour;

private int minute;

private int second;

//此处即为空参数的构造函数,即当声明这个类的对象时,怎样初始化这个对象里面的值

//每个对象都表示个时间。

//这个构造函数调用了这个类里面的有三个参数的构造函数。

public Time(){

this(0,0,0);

}

//此处为一个参数的构造函数

public Time(int h){

this(h,0,0);

}

//此处为二个参数的构造函数

public Time(int h,int m){

this(h,m,0);

}

//此处为三个参数的构造函数,即前面的构造函数调用了这个构造函数来初始化对象的时间值

public Time(int h,int m,int s){

setTime(h,m,s);

}

//此处是构造函数,参数为这个类的对象:

//即用一个已经表示一个时间的Time对象来创建一个和它一样的时间对象

public Time(Time time){

this(time.getHour(),time.getMinute(),time.getSecond());

}

//设置时间值

public void setTime(int h,int m,int s){

setHour(h);

setMinute(m);

setSecond(s);

}

//设置时

public void setHour(int h){

hour=((h=0h24)?h:0);

}

//设置分

public void setMinute(int m){

minute=((m=0m60)?m:0);

}

//设置秒

public void setSecong(int s){

second=((s=0s60)?s:0);

}

//获得这个时间对象的时

public int getHour(){

return hour;

}

//获得分

public int getMinute(){

return minute;

}

//获得秒

public int getSecond(){

return second;

}

//格式化时间成为串

public String toUniversalString(){

return String.format("%d:%02d:%02d",getHour(),getMinute(),getSecond());

}

//格式化这个时间成为串

public String toString(){

return String.format("%d:%02d:%02d%s",((getHour()==0||getHour()==12)?12:getHour()%12),getMinute(),getSecond(),(getHour()12?"AM":"PM"));

}

}

构造方法:通过这个程序可以看出,一个时间对象表示一个时间,有时分秒,那么创建对象要给它表示个时间,构造函数就是初始化有关的操作。

比如我创建一个对象Time time0=new Time(8,20,20);那么time0就表示8:20:20。

构造函数通常的格式是:public + 类名称(参数列表){},记住,它没有返回值。

重载:可以看到里面不只一个构造函数,这就是重载。你可能并不一定要确切的时分秒或其它,这样就可以调用不同的构造函数。

比如:Time time1=new Time(time0);这也创建了对象,此对象表示的时间和time0是一样的。

重载的意思是一个函数,参数列表的不同可以实现不同的功能。

java模拟时钟

import java.awt.*;

import java.applet.Applet;

import java.util.Calendar;

import java.text.SimpleDateFormat;

import java.util.Date;

public class ClockApplet extends Applet implements Runnable //Applet支持线程

{

private Thread athread; //线程

private SimpleDateFormat sdateformat; //日期格式

public void init()

{

this.setBackground(Color.white);

this.athread = null;

}

public void paint(Graphics g)

{

this.sdateformat = new SimpleDateFormat("hh时mm分ss秒");

g.drawString(this.sdateformat.format(new Date()),25,131);

Calendar rightnow = Calendar.getInstance();

int second = rightnow.get(Calendar.SECOND);

int minute = rightnow.get(Calendar.MINUTE);

int hour = rightnow.get(Calendar.HOUR);

//半径

int R_H = 20,R_M = 4,R_S = 4;

//时针的坐标

//x ====(9-3)[0-6] (3-9)[6-0]

//y ====(12-6)[0-6] (6-12)[6-0]

int H_x ;

int H_y;

//x

if(hour == 0)

{

hour = 12;

}

if( hour = 3 hour = 9 )

{

H_x = R_H*Math.abs(hour - 9);

}

else

{

if(hour 9)

{

H_x = R_H*Math.abs(hour - 9);

}

else

{

H_x = R_H*Math.abs(hour+3);

}

}

//y

if( hour = 6 hour = 12 )

{

H_y = R_H*Math.abs(hour - 12);

}

else

{

H_y = R_H*hour;

}

//分针的坐标

int M_x;

int M_y;

if(minute == 0)

{

minute = 60;

}

if( minute = 15 minute = 45 )

{

M_x = R_M*Math.abs(minute - 45);

}

else

{

if(minute 45)

{

M_x = R_M*Math.abs(minute - 45);

}

else

{

M_x = R_M*Math.abs(minute+15);

}

}

//y

if( minute = 30 minute 60 )

{

M_y = R_M*Math.abs(minute - 60);

}

else

{

M_y = R_M*minute;

}

//秒针的坐标

int S_x;

int S_y;

if(second == 0)

{

second = 60;

}

if( second = 15 second = 45 )

{

S_x = R_S*Math.abs(second - 45);

}

else

{

if(second 45)

{

S_x = R_S*Math.abs(second - 45);

}

else

{

S_x = R_S*Math.abs(second+15);

}

}

//y

if( second = 30 second = 60 )

{

S_y = R_S*Math.abs(second - 60);

}

else

{

S_y = R_S*second;

}

// g.drawString(String.valueOf(second),25,50);

// g.drawString(String.valueOf(minute),25,60);

// g.drawString(String.valueOf(hour),25,70);

// g.drawString(String.valueOf(H_x),25,80);

// g.drawString(String.valueOf(H_y),25,90);

g.drawOval(0,0,120,120);//距离相差10像素

g.setColor(Color.darkGray);

g.drawString("9",5,65);

g.drawString("3",110,65);

g.drawString("12",55,15);

g.drawString("6",55,115);

g.drawString("1",80,20);

g.drawString("2",100,40);

g.drawString("4",100,90);

g.drawString("5",80,110);

g.drawString("7",30,110);

g.drawString("8",10,90);

g.drawString("10",10,40);

g.drawString("11",30,20);

g.setColor(Color.red);

g.drawLine(60,60,H_x,H_y);//前一个点表示起点,另一个表示终点

g.setColor(Color.blue);

g.drawLine(60,60,M_x,M_y);

g.setColor(Color.yellow);

g.drawLine(60,60,S_x,S_y);

}

public void start()

{

if(athread == null)

{

athread = new Thread(this);

athread.start();

}

}

public void stop()

{

if(athread != null)

{

athread.interrupt();

athread = null;

}

}

public void run()

{

while(athread != null)

{

repaint();

try

{

athread.sleep(1000);

}

catch(InterruptedException e)

{

}

}

}

}


新闻名称:java类型模拟时钟代码 java类型模拟时钟代码大全
本文链接:http://hbruida.cn/article/hjdiop.html