JAVA——編寫時鐘程式
阿新 • • 發佈:2018-12-11
編寫時鐘程式
1.要求
建立一個視窗並實時顯示當前時間,每1秒時鐘內容更新一次,在介面中包含數字式和錶盤式的顯示。
2.語法
- Java.util.Calendar包的使用 繪製時鐘圖形
- GregorianCalendar()的用法 Calender now=new GregorianCalendar();
- 繪製圖形Graphics2D g2D=(Graphics2D)g;,Graphics強制型別轉換成Graphics2D。
- 獲取系統時間。 1)int hour=now.get(Calendar.HOUR_OF_DAY):取得當前的小時部分; 2)int minute=now.get(Calendar.MINUTE):取得當前時間的分鐘部分; 3)int second =now.get(Calendar.SECOND):取得當前時間的秒。
3.程式碼
繪製時鐘圖形:
//繪製圖形
Graphics2D g2D=(Graphics2D) g;//Graphics強制型別轉換成Graphics2D
Insets insets =getInsets();//建立JFrame的邊界物件
int L=insets.left/2,T=insets.top/2;//L=左邊界的2/1,T=上邊界的2/1
h =getSize().height;//返回JFrame的高度
g.setColor(new Color(115,74,18));//設定畫筆顏色為棕色
//畫圓
g2D.setStroke(new BasicStroke(5.0f));//勾畫出寬度為4cm的圓
g.drawOval(L+40,T+40,h-80,h-80);//
r=h/2-40;
x_1=40+r-5+L;
y_1=40+r-5-T;
ang=60;
//繪製時鐘上的12個字
g.setFont(new Font("",Font.BOLD,12));
g.setColor(new Color(255,255,255));
for(int i=1;i<=12;i++) {
x=(int)((r+12)*Math.cos(RAD * ang)+x_1);
y=(int)((r+12)*Math.sin(RAD * ang)+y_1);
g.drawString (""+ i,x, h-y);
ang -=30;
}
獲得現在的時間:
Calendar now=new GregorianCalendar();//建立Calender物件now
int hour=now.get(Calendar.HOUR_OF_DAY);//取得當前的小時部分
int minute=now.get(Calendar.MINUTE);//取得當前時間的分鐘部分
int second =now.get(Calendar.SECOND);//取得當前時間的秒
String st;
if(hour<10)
st="0"+hour;
else
st=""+hour;
if(minute<10)
st+=":0"+minute;
else
st +=":"+minute;
if(second<10)
st+=":0"+second;
else
st +=":"+second;
//窗體上顯示時間格式,如00:00:00
擦除秒針,原理是將秒針顏色改變為原來的背景顏色(繪製分針和時針的原理與此相同):
if(ss_x>0) {//擦除秒針,原理為改變為原來的背景顏色
g.setColor(getBackground());
g.drawLine(x_1, y_1, ss_x, h-ss_y);
}else {
old_m = mm;
old_h = hh;
}
繪製秒針:
x=(int)(r*0.9*Math.cos(RAD*ss))+x_1;
y=(int)(r*0.9*Math.sin(RAD*ss))+y_1-2*T;
g.setColor(new Color(255,99,71));
g.drawLine(x_1, y_1, x, h-y);
ss_x=x;
ss_y=y;
新建視窗並建立一個時間計數器,實現每一秒觸發一次:
public rw23() {
super("JAVA 小時鐘");
setDefaultCloseOperation(3);
Image image =getToolkit().getImage("1.jpg");
setIconImage(image);
setSize(500,500);
setBackground(Color.black);
setLocation(300,150);
setResizable(false);
setVisible(true);
show();
int delay =1000;
ActionListener draw =new ActionListener() {//建立一個監聽事件
public void actionPerformed(ActionEvent evt) {
repaint();
}
};
new Timer(delay,draw).start();//建立一個時間計數器,每一秒觸發一次
}
4.結果
編譯結果如下圖所示: 執行結果如下圖所示: