文章目录

  • 实现效果
  • 代码结构
  • 全部代码

实现效果

代码结构

ClockPane与DisplayClock的代码组合,可以实现如上的时钟界面,但是时间是静态的,取到的时间只能是当前的运行的时候的时间
ClockPane与ClockAnimation的低吗组合,可以实现动态时钟的界面。

全部代码

ClockPane的代码

package Clock;import java.util.Calendar;
import java.util.GregorianCalendar;import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.scene.shape.Circle;
import javafx.scene.shape.Line;
import javafx.scene.text.Text;public class ClockPane extends Pane {private int hour;private int minute;private int second;public ClockPane() {setCurrentTime();}public ClockPane(int hour, int minute, int second) {this.hour = hour;this.minute = minute;this.second = second;}public int getHour() {return hour;}public void setHour(int hour) {this.hour = hour;paintClock();}public int getMinute() {return minute;}public void setMinute(int minute) {this.minute = minute;paintClock();}public int getSecond() {return second;}public void setSecond(int second) {this.second = second;paintClock();}public void setCurrentTime() {Calendar calendar=new GregorianCalendar();this.hour=calendar.get(Calendar.HOUR_OF_DAY);this.minute=calendar.get(Calendar.MINUTE);this.second=calendar.get(Calendar.SECOND);paintClock();}void paintClock() {double clockRadius=Math.min(getWidth(), getHeight())*0.8*0.5;double centerX=getWidth()/2;double centerY=getHeight()/2;Circle circle=new Circle(centerX,centerY,clockRadius);circle.setFill(Color.WHITE);circle.setStroke(Color.BLACK);Text t1=new Text(centerX-5,centerY-clockRadius+12,"12");Text t2=new Text(centerX-clockRadius+3,centerY+5,"9");Text t3=new Text(centerX+clockRadius-10,centerY+3,"3");Text t4=new Text(centerX-3,centerY+clockRadius-3,"6");double sLength=clockRadius*0.8;double secondX=centerX+sLength*Math.sin(second*(2*Math.PI/60));double secondY=centerY-sLength*Math.cos(second*(2*Math.PI/60));Line sLine=new Line(centerX,centerY,secondX,secondY);sLine.setStroke(Color.RED);//draw minute handdouble mLength=clockRadius*0.65;double xMinute=centerX+mLength*Math.sin((minute+second/60)*(2*Math.PI/60));double yMinute=centerY-mLength*Math.cos((minute+second/60)*(2*Math.PI/60));Line mLine=new Line(centerX,centerY,xMinute,yMinute);mLine.setStroke(Color.BLUE);//draw hour handdouble hLength=clockRadius*0.5;double hourX=centerX+hLength*Math.sin((hour%12+minute/60.0+second/(60*60))*(2*Math.PI/12));double hourY=centerY-hLength*Math.cos((hour%12+minute/60.0+second/(60*60))*(2*Math.PI/12));Line hLine=new Line(centerX,centerY,hourX,hourY);hLine.setStroke(Color.GREEN);getChildren().clear();getChildren().addAll(circle,t1,t2,t3,t4,sLine,mLine,hLine);}@Overridepublic void setWidth(double width) {super.setWidth(width);paintClock();}@Overridepublic void setHeight(double height) {super.setHeight(height);paintClock();}
}

DisplayClock的代码

package Clock;import javafx.application.Application;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Label;
import javafx.scene.layout.BorderPane;
import javafx.stage.Stage;public class DisplayClock extends Application {@Overridepublic void start(Stage primaryStage) throws Exception {ClockPane  clock=new ClockPane();String timeString=clock.getHour()+":"+clock.getMinute()+":"+clock.getSecond();BorderPane pane=new BorderPane();Label currentTimeLabel=new Label(timeString);pane.setCenter(clock);pane.setBottom(currentTimeLabel);BorderPane.setAlignment(currentTimeLabel, Pos.CENTER);Scene scene=new Scene(pane,300,300);primaryStage.setScene(scene);primaryStage.setTitle("DisplayClock");primaryStage.show();}public static void main(String[] args) {launch(args);}}

ClockAnimation的代码

package Clock;import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.util.Duration;public class ClockAnimation extends Application{public void start(Stage primaryStage) throws Exception {ClockPane  clock=new ClockPane();//creat a handle forEventHandler<ActionEvent>eventHandler=event -> {clock.setCurrentTime();};Timeline animation=new Timeline(new KeyFrame(Duration.millis(1000),eventHandler));//循环计数animation.setCycleCount(Timeline.INDEFINITE);animation.play();Scene scene=new Scene(clock,300,300);primaryStage.setTitle("ClockAnimation");primaryStage.setScene(scene);primaryStage.show();}public static void main(String[] args) {launch(args);}}

JavaFx——动态时钟的实现(线程,线程池)相关推荐

  1. Win32多线程编程(6) — 多线程协作及线程的池化管理

    多线程级别的并行计算 写多线程应用程序最困难的地方在于如何使各线程的工作协调进行.Windows提供的用于线程间通信的各种机制是很容易掌握的,可是要把它们应用到工作中完成既定的功能时就会遇到这样.那样 ...

  2. Java坑人面试题系列: 线程/线程池(高级难度)

    ExecutorService 接口及相关API细节详解. Java Magazine上面有一个专门坑人的面试题系列: https://blogs.oracle.com/javamagazine/qu ...

  3. java小时钟实验报告_JAVA实验报告(运用JavaFx实现时钟动画).doc

    JAVA实验报告(运用JavaFx实现时钟动画),javafx时钟,javafx动画,javafx等待动画,javafx动画效果,时钟动画,ppt时钟动画,时钟机关之星动画化,flash时钟动画,fl ...

  4. 线程 - 线程安全 - 线程优化

    本文详尽的介绍了线程的相关知识,从概念到创建线程和其基本使用,又介绍了线程安全的相关知识,其中包含线程同步的四种实现方式与线程休眠的不同方式与其区别,最后介绍了线程优化包括线程优化.线程任务优化.锁优 ...

  5. javascript 计算器、动态时钟、表格复选框全选(扩展)、轮播图、36选7、随机数...

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  6. python动态时钟代码_python实现简易动态时钟

    本文实例为大家分享了python实现简易动态时钟的具体代码,供大家参考,具体内容如下 from turtle import * from datetime import * #移动到指定位置 def ...

  7. 【C++ 语言】线程 ( 线程创建方法 | 线程标识符 | 线程属性 | 线程属性初始化 | 线程属性销毁 | 分离线程 | 线程调度策略 | 线程优先级 | 线程等待 )

    文章目录 I 线程创建方法 II 线程执行函数 III 线程标识符 IV 线程属性 V 线程属性 1 ( 分离线程 | 非分离线程 ) VI 线程属性 2 ( 线程调度策略 ) VII 线程属性 3 ...

  8. 线程的创建 验证线程之间共享数据 守护线程 线程进程效率对比 锁 死锁 递归锁...

    线程(from threading import Thread):CPU调度的最小单位 线程的两种创建方式:方式一: 1 from threading import Thread 2 def f1(i ...

  9. java 线程一直运行状态_详解JAVA 线程-线程的状态有哪些?它是如何工作的?

    线程(Thread)是并发编程的基础,也是程序执行的最小单元,它依托进程而存在. 一个进程中可以包含多个线程,多线程可以共享一块内存空间和一组系统资源,因此线程之间的切换更加节省资源.更加轻量化,也因 ...

最新文章

  1. pytest 9 pytest-datadir读取文件信息
  2. 我所知道的网络管理软件
  3. STL源码剖析(四)
  4. window系统下C语言找不到fork()函数
  5. 嵌入式linux系统和嵌入式android系统的区别和联系
  6. 我为什么对TypeScript由黑转粉?
  7. python基础-userlist、userdict、userstring
  8. css隐藏滚动条、兼容
  9. C,C++宏中#与##的讲解
  10. 中国能源变革令西方相形见绌
  11. oracle转换指定类型,PL/SQL 类型格式转换
  12. mysql union 别名报错_MySQL中UNION和UNION ALL的使用
  13. oracle sql抓取1
  14. C语言学习笔记(零)
  15. 攻防世界逆向入门题之getit
  16. 单例模式singleton
  17. Java快速开发框架_若依——Ruoyi-SpringCloud版本-2.安装redis服务端和客户端-win7
  18. 必应API接口node.js版 - 极客玩家大白
  19. 关于身份证号码位数转换计算方式
  20. python rest api 连接sdn控制器_基于REST-API的SDN控制器故障恢复机制

热门文章

  1. 基于.NET的WebSocket实例:在线聊天室
  2. 【喜报】华为OD统一考试(B卷)题库清单(已收录161题),更快,更全的 B 卷题库大纲
  3. vue改变class名字_vue动态绑定class名
  4. 2020-06-11 LeetCode 739 每日温度 C++
  5. Redis 6.2.6(NoSQL简介/redis介绍及安装/数据类型/配置文件)
  6. 大数据面试八股文之 hive 篇
  7. Python中类的基本用法
  8. 安全联盟2017年上半年网络诈骗数据报告
  9. 【经典C程序】不用分号打印”hello world“
  10. 计网第一章笔记----绪论