資源簡介
1、使用圖形做表盤和指針(夠新鮮吧!)。
2、及時獲得系統時間,沒有用++那樣的算法,那樣會有延遲的。
3、三線程(如果用一個線程秒針會跳躍多格,也就是還會延遲)。
4、如果運行期間更改系統時間,不會馬上改變時鐘指針(秒針是1秒鐘更新,分針15秒更新,時針兩分鐘更新),請高手指點怎么優化。
5、指針圖片因為涉及旋轉,在處理時要注意旋轉軸心點的問題。

代碼片段和文件信息
import?java.awt.Container;
import?java.awt.Graphics;
import?java.awt.Graphics2D;
import?java.awt.Image;
import?java.awt.MediaTracker;
import?java.awt.geom.AffineTransform;
import?java.awt.image.AffineTransformOp;
import?java.awt.image.BufferedImage;
import?java.util.Calendar;
import?java.util.GregorianCalendar;
import?javax.swing.Jframe;
import?javax.swing.JPanel;
public?class?clock?extends?Jframe{
ImagePane?imagePane[];
String?mypic;
static?Calendar?now;
static?Float?s;
static?Float?m;
static?Float?h;
class?s?extends?Thread
???{
??public?void?run()
??{
??while(true)?{
??gettime();
??s?=?(float)(now.get(Calendar.SECOND)?*?6);//?獲得秒轉換成度數,每秒轉1次(1/360圓周)
??imagePane[0].ratoteImage(s*Math.PI/180);//秒針旋轉
??try?{Thread.sleep(1000);}
??catch?(Exception?ex)?{}
??}}
???}
class?m?extends?Thread
{
??public?void?run()
??{
??while(true)?{
??gettime();
??m?=?(float)(now.get(Calendar.MINUTE)?*?6+Math.rint(now.get(Calendar.SECOND)/15)*1.5);//?獲得分鐘每15秒轉1次(1/360圓周)
??imagePane[1].ratoteImage(m*Math.PI/180);//分針旋轉
??try?{Thread.sleep(15000);}
??catch?(Exception?ex)?{}
??}}
}
class?h?extends?Thread
{
??public?void?run()
??{
while(true)?{
??gettime();
??h?=?(float)((now.get(Calendar.HOUR_OF_DAY)?-?12)?*?30+?Math.rint(now.get(Calendar.MINUTE)/2));//?獲得小時,每12分轉1格(1/360圓周)
??imagePane[2].ratoteImage(h*Math.PI/180);//時針旋轉
??try?{Thread.sleep(120000);}
??catch?(Exception?ex)?{}
??}}
}
public?static?void?gettime()
{
now?=?new?GregorianCalendar();
}
public?clock()
{
super(“java時鐘“);?//調用父類構造函數
imagePane=new?ImagePane[4];?
Container?container=getContentPane();?//得到窗口容器
for(int?i=0;i<4;i++)
{
imagePane[i]=new?ImagePane();
imagePane[i].setOpaque(false);//設置透明
imagePane[i].loadImage(“image/“+(3-i)+“.png“);?//裝載圖片
imagePane[i].setBounds(0?0?500?600);//設置位置
container.add(imagePane[i]);?//增加組件到容器上
}
}
public?static?void?main(String[]?args){
clock?hh=new?clock();
Thread?ts=hh.new?s();
Thread?tm=hh.new?m();
Thread?th=hh.new?h();
gettime();//取得當前時間
ts.start();tm.start();th.start();
hh.setSize(520620);?//設置窗口尺寸
hh.setVisible(true);?//設置窗口可視
hh.setResizable(false);//不可改變大小
hh.setLocationRelativeTo(null);//居中
hh.setDefaultCloseOperation(Jframe.EXIT_ON_CLOSE);?//關閉窗口時退出程序?
}
class?ImagePane?extends?JPanel?{
Image?image;
BufferedImage?bufImage;?//用于顯示的緩沖區圖像
BufferedImage?originalBufImage;?//原始緩沖區圖像
Graphics2D?bufImageG;?//緩沖區圖像的圖形環境?
public?void?loadImage(String?fileName)?{
image?=?this.getToolkit().getImage(fileName);?//取得圖像
MediaTracker?mt?=?new?MediaTracker(this);?//實例化媒體加載器
mt.addImage(image?0);?//增加圖像到加載器中
try?{
mt.waitForAll();?//等待圖片加載
}?catch?(Exception?ex)?{
ex.printStackTrace();?//輸出出錯信息
}
originalBufImage?=?new?BufferedImage(image.getWidth(this)image.getHeight(this)BufferedImage.TYPE_INT_ARGB);?//創建原始緩沖區圖像
bufImage?=?originalB
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????381??2011-04-30?20:24??clock\.project
?????文件???????4301??2011-05-04?11:53??clock\src\clock.java
?????文件????????141??2011-04-30?20:31??clock\bin\java.policy.ap
?????文件???????2076??2011-05-04?11:53??clock\bin\clock.class
?????文件???????2550??2011-05-04?11:53??clock\bin\clock$ImagePane.class
?????文件????????947??2011-05-04?11:53??clock\bin\clock$s.class
?????文件???????1023??2011-05-04?11:53??clock\bin\clock$m.class
?????文件???????1012??2011-05-04?11:53??clock\bin\clock$h.class
?????文件????????629??2011-04-30?20:24??clock\.settings\org.eclipse.jdt.core.prefs
?????文件????????301??2011-04-30?20:24??clock\.classpath
?????文件?????147610??2011-05-02?23:59??clock\image\0.png
?????文件???????5146??2011-05-03?00:12??clock\image\3.png
?????文件???????4879??2011-05-04?12:21??clock\image\2.png
?????文件???????5073??2011-05-04?12:22??clock\image\1.png
?????目錄??????????0??2011-04-30?20:24??clock\src
?????目錄??????????0??2011-04-30?20:24??clock\bin
?????目錄??????????0??2011-04-30?20:24??clock\.settings
?????目錄??????????0??2011-04-30?22:04??clock\image
?????目錄??????????0??2011-04-30?20:24??clock
-----------?---------??----------?-----??----
???????????????176069????????????????????19
評論
共有 條評論