JavaFX实现简易时钟效果_java

来源:脚本之家  责任编辑:小易  

  JavaFX脚本是一种声明式、静2113态类型编程语言。它具有5261一等4102函数(first-class functions)、声明式的语法、列表推导(list-comprehensions)及1653基于依赖关系的增量式求值(incremental dependency-based evaluation)等特征。  JavaFX脚本为多种多样的操作提供了声明式、无中间程序逻辑的语法,这些操作包括创建2D动画、设置属性或者声明在模式和视图对象之间的绑定依赖关系。  ,据说是炒2113作起型哪来的!去官网下吧!如果官网都5261没有,其他地4102方也不会有!这个败液东西在javaeye上看过介1653绍,不要急啊!卜枯码http://www.javaeye.com/search?type=topic&query=javafx资料还算不少!本回答被提问者采纳www.zgxue.com防采集请勿采集本网。

本文实例为大家分享了JavaFX实现简易时钟效果的具体代码,供大家参考,具体内容如下

用Swing 或AWT来写吧,FX都没有映象了!

首先要在面板中显示一个时钟,我们可以设计一个ClockPane类来显示一个时钟。

用方程的话肯定输出不会和你的图完全一致 心形线方程如图 用上面行第二个比较简单,程序如下 #include bool draw(float x, float y){ float a = x * x + y * y - 1.0; float b = x * x * y * y * y; return a * a * a - b = -1.5; y -= 0.1) { f

最终效果:

若要绘制一个时钟,需要绘制一个圆并为秒钟、分钟和小时绘制三个指针。为了画一个指针,需要确定一条直线的两端:一端是时钟的中央,位于(centerX,centerY);另外一端位于(endX,endY),由一下公式来确定:

1、看一些javafx做的开源项目,还有官方的例子程序,界面基本就会写出来了(跟swing没太大差距); 2、对于一些新的东西,不要排斥,多看看fx的api文档 大概就这么多,用一个好的ide,对于javafx 的CSS提示好的话,css这一块能学的很快

endX=centerX+handLength×sin(θ)

当我们完成了MyScene类后,可以开始写Java的主程序了,这是个标准的Swing程序中调用JavaFX代码如下: package swingtest; /** * JavaFXToSwingTest.java http://www.javafxblogs.com * @author Henry Zhang */ import java.awt.*; import javax.s

endY=centerY-handLength×cos(θ)

应该是未在classpath中指定jfxrt.jar的路径,看你的截图你应该用的的IDE,不知道用的eclipse还是IDEA?JBUILDER?,如果你使用的是JDK1.7,那么 JavaFX 工具包已经包含在里面了路径(%JAVA_HOME%\jre\lib\jfxrt.jar),但是eclipse默认的jre是不

(其中θ是指针和竖直方向12点的夹角)

因为一分钟有60秒,所以第2个指针的角度是:second×(2π/60)

分钟的位置由分钟和秒钟来决定。包含秒数的确切分钟数是minu+second/60。例如,如时间是3分30秒,那么总的分钟数就是3.5。由于一小时有60分钟,因此分针的角度是: (minute+second/60)×(2π/12)

由于一个圆被分为12个小时,所以时针的角度是: (hour+minute/60+second/(60×60))×(2π/12)

为了简化计算,在计算分针和时针角度的时候,可以忽略秒针,因为它们数字太小,基本可以忽略。因此,秒针、分针以及时针的端点可以如下计算:

secondX = centerX + secondHandLength × sin(second × (2π/60))

secondY = centerY - secondHandLength × cos(second × (2π/60))

minuteX = centerX + minuteHandLength × sin(minute × (2π/60))

minuteY = centerY - minuteHandLength × cos(minute × (2π/60))

hourX = centerX + hourHandLength × sin((hour+minute/60) × (2π/12))

hourX = centerX + hourHandLength × sin((hour+minute/60) × (2π/12))

这样就得到了ClockPane类的实现程序:

package com.company;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;import java.util.Calendar;import java.util.GregorianCalendar;public class ClockPane extends Pane{ private int hour; private int minute; private int second; private double w=250,h=250; public ClockPane() { setCurrentTime(); } public ClockPane(int hour,int minute,int second) { this.hour=hour; this.minute=minute; this.second=second; paintClock(); } 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 double getW() { return w; } public void setW(double w) { this.w=w; paintClock(); } public double getH() { return h; } public void setH(double h) { this.h=h; 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(); } protected void paintClock() { double clockRadius=Math.min(w,h)*0.8*0.5; double centerX=w/2; double centerY=h/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 scondX=centerX+sLength*Math.sin(second*(2*Math.PI/60)); double scondY=centerY-sLength*Math.cos(second*(2*Math.PI/60)); Line sline=new Line(centerX,centerY,scondX,scondY); sline.setStroke(Color.RED); double mLength=clockRadius*0.65; double minuteX=centerX+mLength*Math.sin(minute*(2*Math.PI/60)); double minuteY=centerY-mLength*Math.cos(minute*(2*Math.PI)/60); Line mline=new Line(centerX,centerY,minuteX,minuteY); mline.setStroke(Color.BLUE); double hLength=clockRadius*0.5; double hourX=centerX+hLength*Math.sin((hour%12+minute/60.0)*(2*Math.PI/12)); double hourY=centerY-hLength*Math.cos((hour%12+minute/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); }}

对程序的简要解读:①Java API的GregorianCalendar类可以使用它的无参构造方法来商城一个具有当前时间的Calendar实例。可以从一个Calendar对象,通过调用它的get(Calendar.HOUR)、get(Calendar.MINUTE)和get(Calendar.SECOND)方法来返回小时、分钟以及秒钟。②因为paintClock()方法在任何一个新的属性(hour、minute、second、w以及h)被设置的时候调用,所以之前的内容从面板中被清除。

然后就需要设计一个ClockAnimation类来显示时钟的动画

Timeline类可以用于通过使用一个或者更多的KeyFrame(关键帧)来编写任意动画。

你可以用Timeline来控制时钟的重绘,代码如下:

package com.company;import javafx.animation.Timeline;import javafx.application.Application;import javafx.geometry.Pos;import javafx.scene.Scene;import javafx.scene.layout.BorderPane;import javafx.stage.Stage;import javafx.util.Duration;import javafx.event.ActionEvent;import javafx.event.EventHandler;import javafx.animation.KeyFrame;import javafx.scene.control.Label;public class ClockAnimation extends Application { @Override public void start(Stage primaryStage) { ClockPane clock=new ClockPane(); BorderPane borderPane=new BorderPane(); EventHandler<ActionEvent> eventHandler=e -> { clock.setCurrentTime(); String timeString=clock.getHour()+":"+clock.getMinute()+":"+clock.getSecond(); Label lblCurrentTime=new Label(timeString); borderPane.setCenter(clock); borderPane.setBottom(lblCurrentTime); BorderPane.setAlignment(lblCurrentTime, Pos.TOP_CENTER); }; Timeline animation=new Timeline(new KeyFrame(Duration.millis(1000),eventHandler)); animation.setCycleCount(Timeline.INDEFINITE); animation.play(); Scene scene=new Scene(borderPane,250,250); primaryStage.setTitle("ClockAnimation"); primaryStage.setScene(scene); primaryStage.show(); borderPane.widthProperty().addListener(ov -> clock.setW(borderPane.getWidth()) ); borderPane.heightProperty().addListener(ov -> clock.setH(borderPane.getHeight()) ); }}

程序简单解读:①在时间线动画的每个关键帧中,这个处理器每秒被调用一次。所以动画中的时间每秒被更新一次。②最后两个监听器是用来修改时钟的面板的大小的,将这个监听器和窗体的宽度和高度属性进行注册,从而在场景的宽度和高度改变的情况下可以重新设置面板大小。代码保证了时钟面板的大小和场景大小是同步的。

最后运行就能达到上面图所示的效果了。

http://zhidao.baidu.com/question/2012693426283593748 把2113swing的修改5261一下4102吧1653更多追问追答追问这个不行。早就在网上查到过和这个一模一样的代码。追答这个 是SWING的,不是FX的。。。。。但算法 是相同的,,只是换FX的画图方式 。。。。。追问我的教科书上面只是提了很少一部分的javafx,这个用awt写的代码我看懂了,但是不知道javafx有哪些方法。在网上找了一下,发现很少有这方面的东西。本回答被提问者和网友采纳内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • hadoop client与datanode的通信协议分析
  • mac下idea的svn密码记不住的问题及处理方法
  • 浅谈springboot2.4 配置文件加载机制大变化
  • 基于断点续传下载原理的实现
  • java 基于spire.cloud.sdk for java在pdf中绘制形状
  • java多线程编程中synchronized线程同步的教程
  • java8中对泛型目标类型推断方法的改进
  • 浅谈spring-boot-rabbitmq动态管理的方法
  • 浅析java异常栈
  • spring boot中@conditionalonproperty的使用方法
  • 求用java中的javafx实现单摆的图形化界面!!!
  • JavaFX与Java的本质区别
  • javaFX如何用Button实现跳转到一个已创建的fxml界面
  • 是JavaFX在Java SE?
  • 大神,JAVA界面,一个九宫格,鼠标点击实现T和H转...
  • 用java或者c程序输出如下图的这种简单心形,谁能给...
  • 如何给Java应用程序用JavaFX做界面
  • 如何在java中直接调用javaFX
  • 初学JavaFX,编写import java.application.Applica...
  • java 编程 怎么运行没有 main 函数的 javafx
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全c#教程vbvb.netc 语言java编程delphijavaandroidiosswiftscala易语言汇编语言其它相关首页javafx实现时钟效果java实现时钟效果java实现动态数字时钟java实现动态模拟时钟java实现的动态数字时钟功能示例【显示世界时间】java实现的简单数字时钟功能示例java实现动态时钟并设置闹钟功能java编程小实例—数字时钟的实现代码示例java多线程编程制作电子时钟hadoop client与datanode的通信协议分析mac下idea的svn密码记不住的问题及处理方法浅谈springboot2.4 配置文件加载机制大变化基于断点续传下载原理的实现java 基于spire.cloud.sdk for java在pdf中绘制形状java多线程编程中synchronized线程同步的教程java8中对泛型目标类型推断方法的改进浅谈spring-boot-rabbitmq动态管理的方法浅析java异常栈spring boot中@conditionalonproperty的使用方法java使double保留两位小数的多方intellij idea 2020最新激活码(亲java8 十大新特性详解java.net.socketexception: connjava写入文件的几种方法分享java环境变量的设置方法(图文教程java 十六进制与字符串的转换java list用法示例详解java中file类的使用方法java 字符串截取的三种方法(推荐java创建以任意图片为背景的窗口java容器类源码详解 deque与arraydequespring boot与spark、cassandra系统集成开java不可不知的泛型使用示例代码java实现gif动画效果(java显示动态图片)java线程池专题(概念和作用)java string不可变性实现原理解析java正则表达式验证固定电话号码符合性老生常谈比较排序之归并排序(递归)java制作带界面的聊天工具
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved