?? clock.java.bak
字號:
import java.awt.Graphics;
import java.awt.Color;
import java.util.Calendar;
/*類Clock繼承了java.applet.Applet,由于要用到線程,因而實現了Runnable接口*/
public class Clock extends java.applet.Applet implements Runnable {
/*聲明一個Thread對象threadObj*/
Thread threadObj;
/*下面的6個變量分別代表前一個位置秒針、分針、時針末端的橫縱坐標*/
int lastxs, lastys, lastxm,lastym, lastxh, lastyh;
/*lastdate為前一個指針位置對應的日期*/
String lastdate;
/*handColor用于設置時針、分針和鐘框的顏色*/
Color handColor;
/*numberColor設置秒針和鐘面上數字的顏色*/
Color numberColor;
/*聲明一個Calendar對象,用于取得當前時間*/
Calendar rightnow = Calendar.getInstance();
/*獲得當前日期的年份并賦給yearInt*/
int yearInt = rightnow.get(rightnow.YEAR);
/*獲得當前日期的月份并賦給monthInt*/
int monthInt = rightnow.get(rightnow.MONTH);
/*值得注意的是:月份以0為基準開始計數,一月對應的month值為0,依次類推*/
/*獲得當前的日期,賦給dayInt*/
int dayInt = rightnow.get(rightnow.DATE);
/*獲得當前時間時鐘對應的整數并賦給hoursInt*/
int hoursInt = rightnow.get(rightnow.HOUR_OF_DAY);
/*獲得當前時間分針對應的整數并賦給minutesInt*/
int minutesInt = rightnow.get(rightnow.MINUTE);
/*獲得當前時間秒針對應的整數并賦給secondsInt*/
int secondsInt = rightnow.get(rightnow.SECOND);
/*獲得當前時間對應的星期并賦給dayofweekInt*/
int dayofweekInt = rightnow.get(rightnow.DAY_OF_WEEK);
/*值得注意的是通過DAY_OF_WEEK獲得的星期值中,星期天對應的值為1,星期一對應的為2,依次類推,為此,將利用getweekday方法轉換(參考getweekday方法)。*/
/*init()方法用來初始化指針的位置和顏色,以及日期*/
public void init() {
/*將秒針、分針和時鐘初始位置的橫縱坐標設置為0*/
lastxs = lastys = lastxm = lastym = lastxh = lastyh = 0;
/*將上面獲得的信息用字符串表示出來*/
lastdate = yearInt + "年" + (monthInt + 1) + "月" + dayInt + "日" + hoursInt + ":" + minutesInt + ":" + secondsInt + " 星期" + getweekday(dayofweekInt);
/*設置時鐘上時、分、秒針的顏色*/
handColor = Color.red;
/*設置時鐘上數據的顏色*/
numberColor = Color.darkGray;
}
/*下面的方法變換星期的表示,將1,2,3,4,5,7匹配為7,1,2,3,4,5,6*/
public int getweekday(int dayInt) {
int weekdayInt;
switch(dayInt) {
case 1: weekdayInt = 7;
break;
default: weekdayInt = dayInt - 1;
}
return weekdayInt;
}
/*start()方法用來啟動Clock線程*/
public void start() {
/*初始化線程對象,名稱為“Clock”*/
threadObj = new Thread(this, "Clock");
threadObj.start();
}
/*update()方法用來刷新圖象*/
public void update(Graphics g) {
paint(g);
}
/*run()方法用來實現刷新時鐘圖象*/
public void run() {
while (threadObj != null) {
try {
threadObj.sleep(10);
} catch(InterruptedException e) {}
/*repaint方法用于時間的刷新顯示*/
repaint();
}
}
/*paint()繪制指針位置并進行可能的刷新操作,同時顯示當前日期和時間*/
public void paint(Graphics g) {
/*下面的前6個int變量分別代表時針、分鐘和秒鐘外邊緣端點的橫縱坐標,xcenter和ycenter代表時鐘的中心位置*/
int xh, yh, xm, ym, xs, ys, xcenter = 100, ycenter = 70;
/*下面的語句用于獲得當前時間*/
Calendar rightnow = Calendar.getInstance();
yearInt = rightnow.get(rightnow.YEAR);
monthInt = rightnow.get(rightnow.MONTH);
dayInt = rightnow.get(rightnow.DATE);
hoursInt = rightnow.get(rightnow.HOUR_OF_DAY);
minutesInt = rightnow.get(rightnow.MINUTE);
secondsInt = rightnow.get(rightnow.SECOND);
dayofweekInt = rightnow.get(rightnow.DAY_OF_WEEK);
/*字符串today包含當前日期和時間信息*/
String today = yearInt + "年" + (monthInt + 1) + "月" + dayInt + "日" + hoursInt + ":" + minutesInt + ":" + secondsInt + " 星期" + getweekday(dayofweekInt);
/*計算秒針、分針、時針外邊緣端點的橫縱坐標(設定三針長度分別為45,40,30)*/
xs = (int)(Math.cos(secondsInt * 3.14f / 30 - 3.14f / 2) * 45 + xcenter);
ys = (int)(Math.sin(secondsInt * 3.14f / 30 - 3.14f / 2) * 45 + ycenter);
/*值得注意的是,計算分針外邊緣端點的橫縱坐標時,需要考慮秒針對它的影響*/
xm = (int)(Math.cos((minutesInt + secondsInt/60f) * 3.14f / 30 - 3.14f / 2) * 40 + xcenter);
ym = (int)(Math.sin((minutesInt + secondsInt/60f) * 3.14f / 30 - 3.14f / 2) * 40 + ycenter);
/*計算時針外邊緣端點的橫縱坐標時,需要考慮分針對它的影響,將秒針的影響忽略了*/
xh = (int)(Math.cos((hoursInt * 30 + minutesInt / 2) * 3.14f / 180 - 3.14f/2) * 30 + xcenter);
yh = (int)(Math.sin((hoursInt * 30 + minutesInt / 2) * 3.14f / 180 - 3.14f/2) * 30 + ycenter);
/*繪制矩形和數字(9, 12, 3, 6)*/
handColor = Color.red;
g.setColor(handColor);
/*下面的語句繪制紅色的矩形外框*/
g.drawRect(xcenter - 50, ycenter - 50, 100, 100);
g.setColor(numberColor);
g.drawString("9",xcenter-45,ycenter+3);
g.drawString("3",xcenter+40,ycenter+3);
g.drawString("12",xcenter-5,ycenter-37);
g.drawString("6",xcenter-3,ycenter+45);
/*下面的語句根據當前時間和上一次顯示的時間時、分、秒針是否相同來擦除相應的指針,繪制新指針*/
g.setColor(getBackground());
if (xs != lastxs || ys != lastys) {
/*擦除秒針的顯示*/
g.drawLine(xcenter, ycenter, lastxs, lastys);
/*擦除界面中日期和時間的字符串*/
g.drawString(lastdate, 30, 150);
}
if (xm != lastxm || ym != lastym) {
/*擦除分針的顯示,分針是由兩條線組成的*/
g.drawLine(xcenter, ycenter-1, lastxm, lastym);
g.drawLine(xcenter-1, ycenter, lastxm, lastym); }
if (xh != lastxh || yh != lastyh) {
/*擦除時針的顯示,也是由兩條線組成的*/
g.drawLine(xcenter, ycenter-1, lastxh, lastyh);
g.drawLine(xcenter-1, ycenter, lastxh, lastyh);
}
/*重新顯示秒針和時間字符串*/
g.setColor(numberColor);
g.drawString("", 30, 150);
g.drawString(today, 30, 150);
g.drawLine(xcenter, ycenter, xs, ys);
/*將分針和時針的顏色設置為藍色*/
handColor = Color.blue;
g.setColor(handColor);
/*繪制分針和時針,都分別由兩條線組成*/
g.drawLine(xcenter, ycenter - 1, xm, ym);
g.drawLine(xcenter - 1, ycenter, xm, ym);
g.drawLine(xcenter, ycenter - 1, xh, yh);
g.drawLine(xcenter - 1, ycenter, xh, yh);
g.drawLine(xcenter, ycenter - 2, xh, yh);
g.drawLine(xcenter - 2, ycenter, xh, yh);
/*將當前時間的時、分、秒針的橫縱坐標賦給前一次時間對應的變量*/
lastxs=xs;
lastys=ys;
lastxm=xm;
lastym=ym;
lastxh=xh;
lastyh=yh;
/*將當前日期賦給上一次日期*/
lastdate = today;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -