电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

java實現時鐘效果

瀏覽:5日期:2022-09-04 17:54:12

本文實例為大家分享了java實現時鐘效果的具體代碼,供大家參考,具體內容如下

實現效果如圖:

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)); } @Override public 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() {// 創建線程對象,更新時鐘面板界面 @Override public void run() { try { while (true) { sleep(1000);// 休眠1秒 clockPanel.repaint();// 重新繪制時鐘面板界面 } } catch (InterruptedException e) { e.printStackTrace(); } } }.start(); }}

兩個Java文件就實現了!接下來講解一下實現步驟:

1、把上面的代碼賦值下來并把它粘貼到記事本保存,兩個文件放在同一個文件加里,改一下文件后綴為Java。

2、配置Java環境就是下載JDK,這個步驟不懂的自行百度

推薦閱讀:

圖文詳解Java環境變量配置方法

Java新手環境搭建 JDK8安裝配置教程

3、cmd執行編譯命令javac(注意:只編譯ClockFrame.java文件,ClockPanel.java不編譯,因為它在編譯ClockFrame.java文件時,也會編譯ClockPanel.java文件)

java實現時鐘效果

4、執行Java命令(效果如圖)

java實現時鐘效果

這個實現功能就到此結束了。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
主站蜘蛛池模板: ET3000双钳形接地电阻测试仪_ZSR10A直流_SXJS-IV智能_SX-9000全自动油介质损耗测试仪-上海康登 | 浙江建筑资质代办_二级房建_市政_电力_安许_劳务资质办理公司 | 插针变压器-家用电器变压器-工业空调变压器-CD型电抗器-余姚市中驰电器有限公司 | 国标白水泥,高标号白水泥,白水泥厂家-淄博华雪建材有限公司 | 培训中心-海南香蕉蛋糕加盟店技术翰香原中心官网总部 | 天津仓库出租网-天津电商仓库-天津云仓一件代发-【博程云仓】 | 锂电叉车,电动叉车_厂家-山东博峻智能科技有限公司 | 南溪在线-南溪招聘找工作、找房子、找对象,南溪综合生活信息门户! | 罗茨真空机组,立式无油往复真空泵,2BV水环真空泵-力侨真空科技 | 电缆隧道在线监测-智慧配电站房-升压站在线监测-江苏久创电气科技有限公司 | 楼承板-钢筋楼承板-闭口楼承板-无锡优贝斯楼承板厂 | 物流之家新闻网-最新物流新闻|物流资讯|物流政策|物流网-匡匡奈斯物流科技 | 优秀的临床医学知识库,临床知识库,医疗知识库,满足电子病历四级要求,免费试用 | 生鲜配送系统-蔬菜食材配送管理系统-连锁餐饮订货配送软件-挪挪生鲜供应链管理软件 | 东莞猎头公司_深圳猎头公司_广州猎头公司-广东万诚猎头提供企业中高端人才招聘服务 | 电竞馆加盟,沈阳网吧加盟费用选择嘉棋电竞_售后服务一体化 | 意大利Frascold/富士豪压缩机_富士豪半封闭压缩机_富士豪活塞压缩机_富士豪螺杆压缩机 | 地图标注|微信高德百度地图标注|地图标记-做地图[ZuoMap.com] | 银川美容培训-美睫美甲培训-彩妆纹绣培训-新娘化妆-学化妆-宁夏倍莱妮职业技能培训学校有限公司 临时厕所租赁_玻璃钢厕所租赁_蹲式|坐式厕所出租-北京慧海通 | 澳门精准正版免费大全,2025新澳门全年免费,新澳天天开奖免费资料大全最新,新澳2025今晚开奖资料,新澳马今天最快最新图库-首页-东莞市傲马网络科技有限公司 | 挖掘机挖斗和铲斗生产厂家选择徐州崛起机械制造有限公司 | 深圳办公室装修,办公楼/写字楼装修设计,一级资质 - ADD写艺 | 锂辉石检测仪器,水泥成分快速分析仪-湘潭宇科分析仪器有限公司 | 西门子伺服控制器维修-伺服驱动放大器-828D数控机床维修-上海涌迪 | 铆钉机|旋铆机|东莞旋铆机厂家|鸿佰专业生产气压/油压/自动铆钉机 | 【星耀裂变】_企微SCRM_任务宝_视频号分销裂变_企业微信裂变增长_私域流量_裂变营销 | 防火卷帘门价格-聊城一维工贸特级防火卷帘门厂家▲ | 合肥通道闸-安徽车牌识别-人脸识别系统厂家-安徽熵控智能技术有限公司 | 无锡网站建设_小程序制作_网站设计公司_无锡网络公司_网站制作 | 高压无油空压机_无油水润滑空压机_水润滑无油螺杆空压机_无油空压机厂家-科普柯超滤(广东)节能科技有限公司 | 水性漆|墙面漆|木器家具漆|水漆涂料_晨阳水漆官网 | 聚合甘油__盐城市飞龙油脂有限公司| 一路商机网-品牌招商加盟优选平台-加盟店排行榜平台 | 六维力传感器_六分量力传感器_模腔压力传感器-南京数智微传感科技有限公司 | 临朐空调移机_空调维修「空调回收」临朐二手空调 | 小程序开发公司_APP开发多少钱_软件开发定制_微信小程序制作_客户销售管理软件-济南小溪畅流网络科技有限公司 | 喷砂机厂家_自动除锈抛丸机价格-成都泰盛吉自动化喷砂设备 | 模具ERP_模具管理系统_模具mes_模具进度管理_东莞市精纬软件有限公司 | 产业规划_产业园区规划-产业投资选址及规划招商托管一体化服务商-中机院产业园区规划网 | 镀锌钢格栅_热镀锌格栅板_钢格栅板_热镀锌钢格板-安平县昊泽丝网制品有限公司 | 冷热冲击试验箱_温度冲击试验箱价格_冷热冲击箱排名_林频厂家 |