日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java代码实现时钟

發布時間:2023/12/14 java 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java代码实现时钟 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

實現效果如圖:

Java代碼:
文件一:ClockPanel.java

import static java.util.Calendar.HOUR; import static java.util.Calendar.MILLISECOND; import static java.util.Calendar.MINUTE; import static java.util.Calendar.SECOND; import java.awt.BasicStroke; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; import java.awt.Graphics2D; import java.util.Calendar; import javax.swing.ImageIcon; import javax.swing.JPanel;/*** 時鐘面板* * @author 聽說你很會玩*/ @SuppressWarnings("serial") public class ClockPanel extends JPanel {// 3個指針的粗細private static final BasicStroke HOURS_POINT_WIDTH = new BasicStroke(4);private static final BasicStroke MINUETES_POINT_WIDTH = new BasicStroke(3);private static final BasicStroke SEC_POINT_WIDTH = new BasicStroke(2);ImageIcon background;// 背景圖片對象private int centerX;// 中心坐標private int centerY;// 中心坐標private final static int secLen = 60; // 指針長度private final static int minuesLen = 55; // 指針長度private final static int hoursLen = 36; // 指針長度/*** 構造方法*/public ClockPanel() {setToolTipText("小鍵盤+、-調整透明度,Crtl+Shift+X退出");// 提示信息setOpaque(false);background = new ImageIcon(getClass().getResource("clock.jpg"));// 加載圖片int iconWidth = background.getIconWidth();// 獲取圖片大小centerX = iconWidth / 2;// 獲取圖片中間坐標int iconHeight = background.getIconHeight();centerY = iconHeight / 2;// 獲取圖片中間坐標setPreferredSize(new Dimension(iconWidth, iconHeight));}@Overridepublic void paint(Graphics g) {// 重寫父類方法Graphics2D g2 = (Graphics2D) g;g2.drawImage(background.getImage(), 0, 0, this);// 繪制背景圖片Calendar calendar = Calendar.getInstance();// 獲取日歷對象int millisecond = calendar.get(MILLISECOND);// 獲取毫秒值int sec = calendar.get(SECOND);// 獲取秒值int minutes = calendar.get(MINUTE);// 獲取分值int hours = calendar.get(HOUR);// 獲取時值double secAngle = (60 - sec) * 6 - (millisecond / 150); // 秒針角度int minutesAngle = (60 - minutes) * 6;// 分針角度int hoursAngle = (12 - hours) * 360 / 12 - (minutes / 2);// 時針角度// 計算秒針、分針、時針指向的坐標int secX = (int) (secLen * Math.sin(Math.toRadians(secAngle)));// 秒針指向點的X坐標int secY = (int) (secLen * Math.cos(Math.toRadians(secAngle))); // 秒針指向點的Y坐標int minutesX = (int) (minuesLen * Math.sin(Math.toRadians(minutesAngle))); // 分針指向點的X坐標int minutesY = (int) (minuesLen * Math.cos(Math.toRadians(minutesAngle))); // 分針指向點的Y坐標int hoursX = (int) (hoursLen * Math.sin(Math.toRadians(hoursAngle))); // 時針指向點的X坐標int hoursY = (int) (hoursLen * Math.cos(Math.toRadians(hoursAngle))); // 時針指向點的Y坐標// 分別繪制時針、分針、秒針g2.setStroke(HOURS_POINT_WIDTH);// 設置時針的寬度g2.setColor(Color.BLACK);// 設置時針的顏色g2.drawLine(centerX, centerY, centerX - hoursX, centerY - hoursY);// 繪制時針g2.setStroke(MINUETES_POINT_WIDTH);// 設置分針的寬度if (minutesAngle != hoursAngle) // 分針、時針重疊變色g2.setColor(new Color(0x2F2F2F));// 設置未重疊時的顏色else {g2.setColor(Color.GREEN);// 設置重疊時的顏色}g2.drawLine(centerX, centerY, centerX - minutesX, centerY - minutesY);// 繪制分針g2.setStroke(SEC_POINT_WIDTH);// 設置秒針的寬度if (secAngle != hoursAngle && secAngle != minutesAngle)// 分針、時針、秒針重疊變色g2.setColor(Color.ORANGE);// 設置未重疊時的顏色else {g2.setColor(Color.GREEN);// 設置重疊時的顏色}// 繪制3個指針的中心圓和秒針g2.fillOval(centerX - 5, centerY - 5, 10, 10);// 繪制中心圓g2.drawLine(centerX, centerY, centerX - secX, centerY - secY);// 繪制秒針g2.drawLine(centerX + 1, centerY + 1, centerX - secX + 1, centerY- secY + 1);// 繪制秒針} }

文件二:ClockFrame.java

import java.awt.*; import java.awt.event.*; import javax.swing.*;/*** @author 張振坤*/ @SuppressWarnings("serial") public class ClockFrame extends JDialog {private float opqua = 0.7f;private ClockPanel clockPanel;private Point fp; // 拖曳窗體之前的鼠標位置public static void main(String args[]) {EventQueue.invokeLater(new Runnable() {public void run() {try {ClockFrame frame = new ClockFrame();// 創建窗體對象frame.setVisible(true);// 顯示窗體} catch (Exception e) {e.printStackTrace();}}});}/*** 布局窗體的構造方法*/public ClockFrame() {super();setUndecorated(true);// 取消窗體修飾setAlwaysOnTop(true);// 窗體置頂setTitle("石英鐘");// 設置窗體標題getContentPane().setLayout(new BorderLayout());setBounds(100, 30, 217, 257);setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE);clockPanel = new ClockPanel();// 創建時鐘面板getContentPane().add(clockPanel);// 為時鐘面板添加鼠標按鍵事件監聽器clockPanel.addMouseListener(new MouseAdapter() {public void mousePressed(final MouseEvent e) {fp = e.getPoint();if (e.getButton()==MouseEvent.BUTTON3){System.exit(0);// 右鍵退出}}});// 在時鐘面板的鼠標拖曳事件中移動窗體clockPanel.addMouseMotionListener(new MouseMotionAdapter() {public void mouseDragged(final MouseEvent e) {JDialog frame = (JDialog) getRootPane().getParent();Point point = e.getLocationOnScreen();frame.setLocation(point.x - fp.x, point.y - fp.y);}});pack();addKeyListener(new KeyAdapter() {// 為窗體添加鍵盤事件監聽器public void keyPressed(final KeyEvent e) {int code = e.getKeyCode();switch (code) {// 判斷按鍵編碼case KeyEvent.VK_ADD:// +符號按鍵會降低透明圖opqua += 0.05;opqua = opqua > 0.95f ? 1f : opqua;break;case KeyEvent.VK_SUBTRACT:// -符號按鍵會提升透明度opqua -= 0.05;opqua = opqua < 0.1f ? 0.1f : opqua;break;}// 如果按Ctrl+Shift+X組合鍵,將退出程序if (code == KeyEvent.VK_X&& e.getModifiersEx() == (KeyEvent.CTRL_DOWN_MASK | KeyEvent.SHIFT_DOWN_MASK))System.exit(0);}});Dimension screenSize = getToolkit().getScreenSize();double width = screenSize.getWidth();int x = (int) (width - getWidth() - 30);setLocation(x, 30);new Thread() {// 創建線程對象,更新時鐘面板界面@Overridepublic void run() {try {while (true) {sleep(1000);// 休眠1秒clockPanel.repaint();// 重新繪制時鐘面板界面}} catch (InterruptedException e) {e.printStackTrace();}}}.start();} }

兩個Java文件就實現了!!Java是不是很牛逼!!哈哈。接下來講解一下實現步驟:

  • 把上面的代碼賦值下來并把它粘貼到記事本保存,兩個文件放在同一個文件加里,改一下文件后綴為Java。
  • 配置Java環境就是下載JDK,這個步驟不懂的自行百度
  • cmd執行編譯命令javac(注意:只編譯ClockFrame.java文件,ClockPanel.java不編譯,因為它在編譯ClockFrame.java文件時,也會編譯ClockPanel.java文件)
  • 執行Java命令(效果如圖)

    歐克,這個實現功能就到此結束了。
  • 總結

    以上是生活随笔為你收集整理的Java代码实现时钟的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。