import?java.awt.*;
創(chuàng)新互聯(lián)來電聯(lián)系:18980820575,為您提供成都網(wǎng)站建設(shè)網(wǎng)頁設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù),創(chuàng)新互聯(lián)網(wǎng)頁制作領(lǐng)域10年,包括成都假山制作等多個(gè)領(lǐng)域擁有多年的網(wǎng)站運(yùn)維經(jīng)驗(yàn),選擇創(chuàng)新互聯(lián),為企業(yè)保駕護(hù)航!
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時(shí)鐘");
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;
//創(chuàng)建一個(gè)監(jiān)聽事件
setVisible(true);
ActionListener?drawClock?=?new?ActionListener(){
public?void?actionPerformed(ActionEvent?evt){
repaint();
}
};
//創(chuàng)建一個(gè)時(shí)間計(jì)數(shù)器,每一秒觸發(fā)一次
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;
//繪制時(shí)鐘上的12個(gè)字
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;
}
//獲得現(xiàn)在的時(shí)間
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());
//在窗體上顯示時(shí)間
g.setColor(Color.pink);
g.fillRect(L,?T,?50,?28);
g.setColor(Color.blue);
g.drawString(st,L+2,T+26);
//計(jì)算時(shí)間與度數(shù)的關(guān)系
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));
//擦除時(shí)針
//if(old_h!=hh){
//????g.setColor(getBackground());
//????g.drawLine(x0,y0,oldh_x,h-oldh_y);
//}
//繪制時(shí)針
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();
}
}
//整理一下
這里有一個(gè)時(shí)鐘的類,你看一下吧,不明白你的 100毫秒的時(shí)鐘 是什么意思。
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],// 用來表示秒針端點(diǎn)坐標(biāo)的數(shù)組
pointSY[] = new double[60], pointMX[] = new double[60], // 用來表示分針端點(diǎn)坐標(biāo)的數(shù)組
pointMY[] = new double[60], pointHX[] = new double[60], // 用來表示時(shí)針端點(diǎn)坐標(biāo)的數(shù)組
pointHY[] = new double[60];
ClockAs() {
secondTime = new Timer(1000, this);
pointSX[0] = 0; // 12點(diǎn)秒針位置
pointSY[0] = -100;
pointMX[0] = 0; // 12點(diǎn)分針位置
pointMY[0] = -90;
pointHX[0] = 0; // 12點(diǎn)時(shí)針位置
pointHY[0] = -70;
double angle = 6 * Math.PI / 180; // 刻度為6度
for (int i = 0; i 59; i++) // 計(jì)算出各個(gè)數(shù)組中的坐標(biāo)
{
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; // 坐標(biāo)平移
pointSY[i] = pointSY[i] + 120;
pointMX[i] = pointMX[i] + 120; // 坐標(biāo)平移
pointMY[i] = pointMY[i] + 120;
pointHX[i] = pointHX[i] + 120; // 坐標(biāo)平移
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(); // 秒針開始計(jì)時(shí)
}
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); // 鐘表中心的實(shí)心圓
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)); // 獲取時(shí)間中的秒
int h = hour % 12;
a = second; // 秒針端點(diǎn)的坐標(biāo)
b = munite; // 分針端點(diǎn)的坐標(biāo)
c = h * 5 + munite / 12; // 時(shí)針端點(diǎn)的坐標(biāo)
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("時(shí)鐘");
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();
}
}
面向?qū)ο笏枷雽懗桑?/p>
下面是一個(gè)顯示器類
public?class?Display?{
private?int?value;//現(xiàn)在的值
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());
}
}
}
下面創(chuàng)建一個(gè)時(shí)鐘對(duì)象:
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){//如果分重置,小時(shí)+1
min.increase();
if(min.getValue()?==?0){//如果分重置,小時(shí)+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();
}
//這是新建了一個(gè)public類,名稱為Time
public class Time{
//其中有三個(gè)變量,表示時(shí)分秒
private int hour;
private int minute;
private int second;
//此處即為空參數(shù)的構(gòu)造函數(shù),即當(dāng)聲明這個(gè)類的對(duì)象時(shí),怎樣初始化這個(gè)對(duì)象里面的值
//每個(gè)對(duì)象都表示個(gè)時(shí)間。
//這個(gè)構(gòu)造函數(shù)調(diào)用了這個(gè)類里面的有三個(gè)參數(shù)的構(gòu)造函數(shù)。
public Time(){
this(0,0,0);
}
//此處為一個(gè)參數(shù)的構(gòu)造函數(shù)
public Time(int h){
this(h,0,0);
}
//此處為二個(gè)參數(shù)的構(gòu)造函數(shù)
public Time(int h,int m){
this(h,m,0);
}
//此處為三個(gè)參數(shù)的構(gòu)造函數(shù),即前面的構(gòu)造函數(shù)調(diào)用了這個(gè)構(gòu)造函數(shù)來初始化對(duì)象的時(shí)間值
public Time(int h,int m,int s){
setTime(h,m,s);
}
//此處是構(gòu)造函數(shù),參數(shù)為這個(gè)類的對(duì)象:
//即用一個(gè)已經(jīng)表示一個(gè)時(shí)間的Time對(duì)象來創(chuàng)建一個(gè)和它一樣的時(shí)間對(duì)象
public Time(Time time){
this(time.getHour(),time.getMinute(),time.getSecond());
}
//設(shè)置時(shí)間值
public void setTime(int h,int m,int s){
setHour(h);
setMinute(m);
setSecond(s);
}
//設(shè)置時(shí)
public void setHour(int h){
hour=((h=0h24)?h:0);
}
//設(shè)置分
public void setMinute(int m){
minute=((m=0m60)?m:0);
}
//設(shè)置秒
public void setSecong(int s){
second=((s=0s60)?s:0);
}
//獲得這個(gè)時(shí)間對(duì)象的時(shí)
public int getHour(){
return hour;
}
//獲得分
public int getMinute(){
return minute;
}
//獲得秒
public int getSecond(){
return second;
}
//格式化時(shí)間成為串
public String toUniversalString(){
return String.format("%d:%02d:%02d",getHour(),getMinute(),getSecond());
}
//格式化這個(gè)時(shí)間成為串
public String toString(){
return String.format("%d:%02d:%02d%s",((getHour()==0||getHour()==12)?12:getHour()%12),getMinute(),getSecond(),(getHour()12?"AM":"PM"));
}
}
構(gòu)造方法:通過這個(gè)程序可以看出,一個(gè)時(shí)間對(duì)象表示一個(gè)時(shí)間,有時(shí)分秒,那么創(chuàng)建對(duì)象要給它表示個(gè)時(shí)間,構(gòu)造函數(shù)就是初始化有關(guān)的操作。
比如我創(chuàng)建一個(gè)對(duì)象Time time0=new Time(8,20,20);那么time0就表示8:20:20。
構(gòu)造函數(shù)通常的格式是:public + 類名稱(參數(shù)列表){},記住,它沒有返回值。
重載:可以看到里面不只一個(gè)構(gòu)造函數(shù),這就是重載。你可能并不一定要確切的時(shí)分秒或其它,這樣就可以調(diào)用不同的構(gòu)造函數(shù)。
比如:Time time1=new Time(time0);這也創(chuàng)建了對(duì)象,此對(duì)象表示的時(shí)間和time0是一樣的。
重載的意思是一個(gè)函數(shù),參數(shù)列表的不同可以實(shí)現(xiàn)不同的功能。
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時(shí)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;
//時(shí)針的坐標(biāo)
//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;
}
//分針的坐標(biāo)
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;
}
//秒針的坐標(biāo)
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è)點(diǎn)表示起點(diǎn),另一個(gè)表示終點(diǎn)
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類型模擬時(shí)鐘代碼 java類型模擬時(shí)鐘代碼大全
地址分享:http://muchs.cn/article8/hjdiop.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、手機(jī)網(wǎng)站建設(shè)、企業(yè)網(wǎng)站制作、網(wǎng)站維護(hù)、Google、網(wǎng)站營(yíng)銷
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)