首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java Swing 繪製模擬時鐘:Graphics2D 幾何計算與定時器驅動

     編輯:Java 相關知識

使用 Swing JFrame + JPanel 繪製模擬指針時鐘。核心邏輯:Graphics2D 繪製圓盤、刻度、三根指針;Thread.sleep(1000) 簡易定時觸發重繪。代碼雖簡單但涵蓋坐標轉換、筆觸樣式、弧形繪製等 2D 繪圖基礎知識。

關鍵技術點

  • 座標系:面板中心 (95,95) 為原點,Y 軸向下,角度 0 指向 12 點鐘方向(-Y 軸),順時針為正。
  • 弧度計算:
    • 秒/分指針:radian = value * Math.PI / 30(60 格分圓,每格 6° = π/30)。
    • 時指針:radian = hour * Math.PI/6 + minute/60 * Math.PI/6(含分齒跳動)。
  • 指針幾何:Pin 類封裝 Line2D.Double,根據半徑與弧度計算端點:x = cx + len * sin(rad), y = cy - len * cos(rad)。
  • 繪製層次:外圓 → 內圓 → 12 條刻度(雙色疊加立體感)→ 時/分/秒指針(漸粗筆觸)。

改進建議

  1. 替換 Thread.sleep 為 javax.swing.Timer(EDT 安全、無阻塞)。
  2. 重寫 paintComponent(Graphics g) 而非 paint,並調用 super.paintComponent(g) 清除舊幀。
  3. 啟用雙緩衝:setDoubleBuffered(true) 或離屏圖片繪製,消除閃爍。
  4. 時間來源改用 java.time.LocalTime.now()(Java 8+),避免 Date.getHours() 等過時方法。
  5. 拆分模型(時間狀態)與視圖(繪製邏輯),便於單元測試與皮膚切換。

完整類結構

Clock (JFrame) → ClockPane (JPanel) → Pin (幾何工具類)

主程序啟動 Clock,進入 interval() 循環每秒觸發 cp.drawClock()。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved