版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、時鐘的界面良好,簡潔實用性強,實現(xiàn)程序與電腦的時間的同步??梢燥@示始終,也可以顯示分針秒針,并可以在相應的位置調(diào)整時間。而且初始運行會與電腦的時間校對,一般默認為同步,但還可以自己再次調(diào)節(jié),提高實用性。本系統(tǒng)共包括 1 個 java 源文件。1、Clock 源文件是本程序的主函數(shù)其作用是初始化棋盤。2、 setCurrentTime 源文件實現(xiàn)電腦設置時間。3、 paintHourPointer 源文件為時針.4、 paintSecondPointer 源文件實現(xiàn)人與電腦設置秒針.5、 paintMinuteDot 源文件人與電腦設置分針. Clock 成員變量 : 成員變量描述 變量類型 名
2、稱 時針 String Hour 分針 String Minute 秒針 String Second 時間點 TextField text_1 Clock 方法 : 方法名 功能 備注 setCurrentTime 設置當前時間 構造方法 paintHourPointer 設置時針 接口方法 paintSecondPointer 設置秒針 接口方法 paintMinuteDot 設置分針 接口方法 actionPerformed 事件處理 run 程序運行 詳細設計如下import java.awt.*; import java.awt.geom.Ellipse2D; import java.
3、awt.geom.GeneralPath; import java.awt.geom.Line2D; import java.awt.geom.Rectangle2D; import java.util.Calendar; import java.util.Date; import javax.swing.BorderFactory; import javax.swing.JComponent; import javax.swing.JFrame; import javax.swing.UIManager; public class Clock extends JComponent priva
4、te static final Color INTEGRAL_COLOR = new Color(0, 128, 128); private int radius; private Calendar currentTime = Calendar.getInstance(); private double s = 0.03; public Clock(int radius) this.radius = radius; public void setCurrentTime(Date time) /設置當前時間 this.currentTime.setTime(time); public void
5、setCurrentTime(long millis) this.currentTime.setTimeInMillis(millis); public Dimension getPreferredSize() Insets insets = getInsets(); int r = (int) (radius = -1 ? 0 : radius*(1+s)+1; return new Dimension(r * 2 + insets.left + insets.right,r * 2 + insets.top + insets.bottom); /返回一個指定寬、高的 Dimension p
6、rotected void paintComponent(Graphics g) super.paintComponent(g); Graphics2D g2d = (Graphics2D) g; g2d.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON); Insets insets = getInsets(); int wid = getWidth() - insets.left - insets.right; int hei = getHeight() - insets.
7、top - insets.bottom; int r = (int) (Math.min(wid, hei) / 2 / (1+s); g2d.translate(insets.left + r * (1+s), insets.top + r * (1+s); g2d.scale(1, -1); for (int i = 0; i 60; i+) int angle = 90 - i * 6; double pos = calcPos(r, angle); paintMinuteDot(r, g2d, pos0, pos1, i % 5 = 0); paintHourPointer(r, g2
8、d); paintMinutePointer(r, g2d); paintSecondPointer(r, g2d); paintCenterPoint(g2d); g2d.scale(1, -1); g2d.translate(-insets.left - r * (1+s), -insets.top - r * (1+s); private void paintCenterPoint(Graphics2D g2d) g2d.setColor(Color.BLUE); Rectangle2D rect = new Rectangle2D.Double(-2, -2, 4, 4); g2d.f
9、ill(rect); private void paintMinutePointer(int r, Graphics2D g2d) int minute = currentTime.get(Calendar.MINUTE); int second = currentTime.get(Calendar.SECOND); double angle = 90 - (minute + second / 60.0) * 6; Shape pointerShape = createPointerShape(r * 0.8, r * 0.04, r * 0.08, angle); g2d.setColor(
10、Color.LIGHT_GRAY); g2d.fill(pointerShape); g2d.setColor(Color.DARK_GRAY); g2d.draw(pointerShape); private void paintHourPointer(int r, Graphics2D g2d) int hour = currentTime.get(Calendar.HOUR); int minute = currentTime.get(Calendar.MINUTE); int second = currentTime.get(Calendar.SECOND); double angle
11、 = 90 - (hour + minute / 60.0 + second / 3600.0) * 30; Shape pointerShape = createPointerShape(r * 0.6, r * 0.06, r * 0.1, angle); g2d.setColor(Color.LIGHT_GRAY); g2d.fill(pointerShape); g2d.setColor(Color.DARK_GRAY); g2d.draw(pointerShape); private Shape createPointerShape(double r1, double r2, dou
12、ble r3, double angle) GeneralPath gp = new GeneralPath(); double pos = calcPos(r1, angle); double pos1 = calcPos(r2, angle + 90); gp.append(new Line2D.Double(pos0, pos1, pos10, pos11), true); double pos2 = calcPos(r3, angle + 180); gp.lineTo(float)pos20, (float)pos21); double pos3 = calcPos(r2, angl
13、e + 270); gp.lineTo(float)pos30, (float)pos31); gp.closePath(); return gp; private void paintSecondPointer(int r, Graphics2D g2d) g2d.setColor(Color.BLACK); int second = currentTime.get(Calendar.SECOND); int angle = 90 - second * 6; double pos = calcPos(r * 0.9, angle); double pos1 = calcPos(r * 0.2
14、, angle + 180); Line2D line = new Line2D.Double(pos10, pos11, pos0, pos1); g2d.draw(line); private void paintMinuteDot(int r, Graphics2D g2d, double x, double y, boolean flag) g2d.setColor(flag ? Color.RED : Color.BLACK); if (flag) /Rectangle2D rect = new Rectangle2D.Double( Ellipse2D rect = new Ell
15、ipse2D.Double( x - r * s, y - r * s, r * s * 2, r * s * 2); g2d.fill(rect); else /Rectangle2D rect = new Rectangle2D.Double( Ellipse2D rect = new Ellipse2D.Double( x - r * 0.02, y - r * 0.02, r * 0.04, r * 0.04); g2d.fill(rect); private double calcPos(double r, double angle) double radian = Math.toR
16、adians(angle); double x = r * Math.cos(radian); double y = r * Math.sin(radian); return new double x, y; public static void main(String args) try UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName(); catch (Exception e) e.printStackTrace(); final Clock clock = new Clock(50); clock.setB
17、order(BorderFactory.createEmptyBorder(10, 10, 10, 10); JFrame f = new JFrame( 軟件 081 班 071404011 孫慶賀 ); /f.setBounds(380,200,500,600); f.getContentPane().add(clock, BorderLayout.CENTER); f.pack(); f.setLocationRelativeTo(null); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); ne
18、w Thread() public void run() while (true) try Thread.sleep(1000); catch (InterruptedException ex) ex.printStackTrace(); clock.setCurrentTime(System.currentTimeMillis(); clock.repaint(); .start(); int y1 = (int)(r - 10) * Math.cos(rad * s); g.drawLine(x + r, y + r, x + r + x1, y + r - y1); /分針 g.setC
19、olor(Color.BLUE); x1 = (int)(r - r / 2.5) * Math.sin(rad * m); y1 = (int)(r - r / 2.5) * Math.cos(rad * m); g.drawLine(x + r, y + r, x + r + x1, y + r - y1); /時針 g.setColor(Color.CYAN); x1 = (int)(r - r / 1.5) * Math.sin(rad * h); y1 = (int)(r - r / 1.5) * Math.cos(rad * h); g.drawLine(x + r, y + r,
20、 x + r + x1, y + r - y1); /數(shù)字 g.setColor(Color.YELLOW); int d = 29; for (int i = 1; i = 12; i+) x1 = (int)(r - 10) * Math.sin(rad * d); y1 = (int)(r - 10) * Math.cos(rad * d); g.drawString(i + , x + r + x1 - 4, x + r - y1 + 5); d+=30; /小點 d = 0; for (int i = 0; i = 360) s = 0; m+=6; if (m = 72 | m =
21、 144 | m = 216 | m = 288) h+=6; if (m = 360) m = 0; h+=6; if (h =360) h = 0; this.repaint(); int x, y, r; int h, m, s;/小時,分鐘,秒 double rad = Math.PI / 180; public ClockPaint(int x, int y, int r) this.x = x; this.y = y; this.r = r; Calendar now = new GregorianCalendar(); s = now.get(Calendar.SECOND) *
22、 6;/獲得秒轉換成度數(shù) m = now.get(Calendar.MINUTE) * 6;/獲得分鐘 h = (now.get(Calendar.HOUR_OF_DAY) - 12) * 30 + now.get(Calendar.MINUTE) / 12 * 6;/獲得小時 Thread t = new Thread(this); t.start(); public void paint(Graphics g) /清屏 super.paint(g); g.setColor(Color.BLACK); g.fillRect(0, 0, r * 3, r * 3); /畫圓 g.setColo
23、r(Color.WHITE); g.drawOval(x, y, r * 2, r * 2); /秒針 g.setColor(Color.RED); int x1 = (int)(r - 10) * Math.sin(rad * s); /定義 MyTimer 類 class MyTimer1 extends JFrame static int count=0; /判斷是否重定義了時間 /構造函數(shù) public MyTimer1() /定義窗口大小 setSize(320, 200); /定義窗口標題 setTitle(測試自定義時鐘類!); Container c = getContentP
24、ane(); / new ClockCanvas(北京時間, GMT+8) c.add(new ClockCanvas(北京時間, GMT+8); /定義接口 interface TimerListener1 void timeElapsed(Timer1 t); class Timer1 extends Thread /類 Timer1 private TimerListener1 target; private int interval; public Timer1(int i, TimerListener1 t) target = t; interval = i; setDaemon(t
25、rue); public void run() try while (!interrupted() sleep(interval); target.timeElapsed(this); catch(InterruptedException e) class ClockCanvas extends JPanel /clockcanvas implements TimerListener1 static int seconds = 0; private String city; private GregorianCalendar calendar; /構造函數(shù) public ClockCanvas
26、(String c, String tz) city = c; calendar = new GregorianCalendar(TimeZone.getTimeZone(tz); Timer1 t = new Timer1(1000, this); t.start(); setSize(180, 180); /繪制鐘面 public void paintComponent(Graphics g) super.paintComponent(g); g.drawOval(100, 5, 120, 120); g.drawOval(101, 6, 118, 118); /分離時間 double h
27、ourAngle = 2 * Math.PI * (seconds - 3 * 60 * 60) / (12 * 60 * 60); double minuteAngle = 2 * Math.PI * (seconds - 15 * 60) / (60 * 60); double secondAngle = 2 * Math.PI * (seconds - 15) / 60; public void timeElapsed(Timer1 t) calendar.setTime(new Date(); if(MyTimer1.count=1) int a=1; seconds=MyTimer.
28、intHour*60*60+MyTMinute*60+MyTSecond; seconds+=a;/a 為秒自加 repaint(); else seconds = calendar.get(Calendar.HOUR) * 60 * 60 + calendar.get(Calendar.MINUTE) * 60 + calendar.get(Calendar.SECOND); repaint(); /定義時鐘類 class MyTimer implements TimerListener /定義時鐘類的屬性 static int intHour,intMinute,intSecond;/構造函數(shù) public MyTi
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 上??萍即髮W《電化學及應用》2023-2024學年第一學期期末試卷
- 上海交通大學《機器人控制系統(tǒng)》2023-2024學年第一學期期末試卷
- 上海建設管理職業(yè)技術學院《中級宏觀經(jīng)濟學(英語)》2023-2024學年第一學期期末試卷
- 上海濟光職業(yè)技術學院《框架與應用開發(fā)》2023-2024學年第一學期期末試卷
- 特種聚合材料項目可行性研究報告-應用領域加速拓展市場競爭力日益凸顯
- 公司人事管理制度選集大全
- 中西醫(yī)結合治療銀屑病
- 單位人事管理制度精彩選集
- 2024年中國汽車飾板市場調(diào)查研究報告
- 建筑薪酬調(diào)研報告范文
- 電動自行車火災事故教訓警示課件
- 江蘇小高考計算機考試題目及答案
- 上海市徐匯區(qū)2023-2024學年九年級上學期一?;瘜W試題
- 2024年度初級會計《初級會計實務》模擬試題及答案
- 美容護膚招商方案
- 新概念英語課件NCE1-lesson57-58(共21張)
- 國開2023秋《人文英語3》第5-8單元作文練習參考答案
- 水平四《排球正面雙手傳球》教學設計
- 黑龍江省黑河北安市2024屆中考二模數(shù)學試題含解析
- 計算機系統(tǒng)權限修改審批表
- 建標 189-2017 婦幼健康服務機構建設標準
評論
0/150
提交評論