利用javafx编写一个时钟制作程序
1.首先创建一个时钟类,用于编写时钟的各种特有属性
package javaclock;
/**
*
* @author admin
*/
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.Scanner;
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 javafx.scene.control.Button;
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) {
// Button btn = new Button("调整时间");
//btn.setCurrentTime1();
this.hour = hour;
this.minute = minute;
this.second = second;
paintClock();//调用方法
}
//set与get方法
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 setCurrentTime1(int hour,int minute,int second){
this.hour = hour;
this.minute = minute;
this.second = second;
paintClock();
}
//方法setCurrentTime()设置获取当前时间
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();
}
//创建paintClock()显示时间
public 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);//圆形边缘色为黑色
//创建四个文本对象用于将12,9,6,3填入圆形中,注意不要压在圆形上面,需要计算坐标
Text text1 = new Text(centerX-5,centerY-clockRadius+12,"12");
Text text2 = new Text(centerX-clockRadius+3,centerY+5,"9");
Text text3 = new Text(centerX+clockRadius-10,centerY+3,"3");
Text text4 = new Text(centerX-3,centerY+clockRadius-3,"6");
//分别绘制时针,分针,秒针
//秒针
double secLength = clockRadius*0.8;//秒针长度
double secondX = centerX + secLength*Math.sin(second*(2*Math.PI/60));//因为一分钟有60秒,故求出当前秒针的角度,利用三角函数公式即可计算出秒针的端点x坐标
double secondY = centerY - secLength*Math.cos(second*(2*Math.PI/60));//同理求出秒针的端点Y坐标
Line secline = new Line(centerX,centerY,secondX,secondY);//创建线段对象实现秒针
secline.setStroke(Color.RED);//将秒针定义为红色
//分针
double minLength = clockRadius*0.65;//分针长度
double minuteX = centerX + minLength*Math.sin((minute )*(2*Math.PI/60));//因为一小时有六十分钟,利用分针的时间加上秒针的时间,利用三角函数对应的角度,即可计算出分针的端点x坐标
double minuteY = centerY - minLength*Math.cos((minute )*(2*Math.PI/60));//同理求出分针的端点Y坐标
Line minline = new Line(centerX,centerY,minuteX,minuteY);//创建线段对象实现秒针
minline.setStroke(Color.GREEN);//将秒针定义为绿色
//时针
double houLength = clockRadius*0.5;//时针长度
double hourX = centerX + houLength*Math.sin((hour%12 + minute/60.0 )*(2*Math.PI/12));//因为一天有十二小时,一小时有六十分钟,利用小时的时间加上分针的时间再加上秒针的时间,利用三角函数对应的角度,即可计算出分针的端点x坐标
double hourY = centerY - houLength*Math.cos((hour%12 + minute/60.0 )*(2*Math.PI/12));//同理求出时针的端点Y坐标
Line houline = new Line(centerX,centerY,hourX,hourY);//创建线段对象实现时针
houline.setStroke(Color.BLUE);//将秒针定义为蓝色
getChildren().clear();//每调用执行一次paintClock()方法就会清空面板
getChildren().addAll(circle,text1,text2,text3,text4,secline,minline,houline);//将几个控件添加到面板中
}
}
2、然后编写一个测试类,用于通过多线程创建呈现时钟的动画效果
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package javaclock;
import java.util.*;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import javafx.scene.layout.BorderPane;
import javafx.animation.Timeline;
import javafx.scene.control.Label;
import javafx.animation.KeyFrame;
import javafx.geometry.Pos;
import javafx.util.Duration;
import javafx.scene.layout.HBox;
import javafx.scene.layout.VBox;
/**
*
* @author admin
*/
public class JavaClock extends Application {
//JavaClock jc = new JavaClock();
ClockPane clock = new ClockPane();//
BorderPane borderPane = new BorderPane();//
@Override
public void start(Stage primaryStage) throws Exception {
// TODO 自动生成的方法存根
//绑定事件源
EventHandler<ActionEvent> eventHandler = e ->{
clock.setCurrentTime();
String timeString = clock.getHour()+":"+clock.getMinute()+":"+clock.getSecond();
Label labelCurrentTime = new Label(timeString);
borderPane.setCenter(clock);
borderPane.setBottom(labelCurrentTime);
BorderPane.setAlignment(labelCurrentTime, Pos.TOP_CENTER);
};
Timeline animation = new Timeline(new KeyFrame(Duration.millis(1000),eventHandler));//设定时钟动画每1秒变一次,关键帧时间间隔
animation.setCycleCount(Timeline.INDEFINITE);
animation.play();
//Scene
Scene scene = new Scene(borderPane,250,250);
primaryStage.setTitle("JavaClock");
primaryStage.setScene(scene);
primaryStage.show();//展示场景
borderPane.widthProperty().addListener(o->
clock.setW(borderPane.getWidth()));//保持时间面板与场景同步
borderPane.heightProperty().addListener(o->
clock.setH(borderPane.getHeight()));
//设置一个按钮,用于调整时间
}
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
launch(args);
}
}
利用javafx编写一个时钟制作程序的更多相关文章
- Java基础-接口中国特色社会主义的体制中有这样的现象:地方省政府要坚持党的领导和按 照国务院的指示进行安全生产。请编写一个java应用程序描述上述的体制现象。 要求如下: (1)该应用程序中有一个“党中央”接口:CentralPartyCommittee,该接口中 有个“坚持党的领导”方法:void partyLeader() (2)该应用程序中有一个“国务院”抽象类:StateCouncil,
36.中国特色社会主义的体制中有这样的现象:地方省政府要坚持党的领导和按 照国务院的指示进行安全生产.请编写一个java应用程序描述上述的体制现象. 要求如下: (1)该应用程序中有一个“党中央”接口 ...
- Java基础-继承-编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight。小车类Car是Vehicle的子类,其中包含的属性有载人数 loader。卡车类Truck是Car类的子类,其中包含的属性有载重量payload。每个 类都有构造方法和输出相关数据的方法。最后,写一个测试类来测试这些类的功 能。
#29.编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight.小车类Car是Vehicle的子类,其中包含的属性有载人数 loader.卡车类T ...
- java基础,继承类题目:编写一个Java应用程序,该程序包括3个类:Monkey类、People类和主类 E
21.编写一个Java应用程序,该程序包括3个类:Monkey类.People类和主类 E.要求: (1) Monkey类中有个构造方法:Monkey (String s),并且有个public vo ...
- C#编写一个控制台应用程序,输入正方形边长或者半径,计算其周长和面积并输出
编写一个控制台应用程序,输入正方形边长或者半径,计算其周长和面积并输出 (1) 编写两个接口,接口 IShape 包含三个方法:initialize, getPerimeter, getArea.分别 ...
- C#编写一个控制台应用程序,可根据输入的月份判断所在季节
编写一个控制台应用程序,可根据输入的月份判断所在季节 代码: using System; using System.Collections.Generic; using System.Linq; us ...
- C#编写一个控制台应用程序,输入三角形或者长方形边长,计算其周长和面积并输出
编写一个控制台应用程序,输入三角形或者长方形边长,计算其周长和面积并输出. 代码: using System; using System.Collections.Generic; using Syst ...
- SpringMVC入门--编写一个SpringMVC小程序
一.SpringMVC的优势 Spring 为展现层提供的基于 MVC 设计理念的优秀的Web 框架,是目前最主流的 MVC 框架之一.Spring3.0 后全面超越 Struts2,成为最优秀的 M ...
- 编写一个JAVA小程序取得IP地址
在TCP/IP 互联网时,经常会需要查询自己主机的IP地址和www服务器的IP地址.虽然,我们可以使用IPCONFIG 和PING 进行IP地址查询,但是如果在应用程序或APPLET中使用此命令会破坏 ...
- 编写一个小Servlet程序
1.编写一个java类,此类继承HttpServlet 创建完工程(见上一篇随笔:使用eclipse创建在myeclipse中运行的web工程),在src中新建一个包,包名字叫servlet:再新建一 ...
随机推荐
- C++构造与析构函数中调用虚函数的问题
前些天想把以前写的内存池算法重写一遍,跨平台是第一目标,当时突发奇想,因为不愿意做成一大堆#if..#end,所以想利用C++的多态性,但是怎么让内存池完好退出却没想到自认为完美的方案.但是一个很偶然 ...
- session过期跳转到登陆页面并跳出iframe框架的两个方法
最近在做拦截器,判断用户登录后操作超时,失去权限然后要重新登录,但是用的iframe,返回的登陆页总是在框架中显示,我百度了下,总是只有其中一个方法,现在分享下两种解决方法,希望对你们有帮助: 方法一 ...
- 数据库存含中文的json 时避免存成中文的ascii
使用json.dumps将dict转换为json时 如果包含中文 会将中文变成中文对应的ascii编码 当把这样的json存进数据库再取出之后反斜杠没有了会变成: 使用 json.dumps(x,en ...
- 条件渲染v-if
<!DOCTYPE html> <html lang="zh"> <head> <title></title> < ...
- An invalid property 'jdbcType ' was found in mapping
大概2种原因: 1 放进去的类型与字段的类型不匹配 2 比较变态,xml中=两边不能有空格! 错误示例如下: #{plat,jdbcType = INTEGER}, 去掉空格后: #{plat,jd ...
- Chapter 6 排序
Chapter 6 排序 1- 直接插入排序 O(n2) O(1) 2- 折半插入排序 O(n2) O(1) 适合关键字较多 3- 希尔排序O(nlogn) O(1) 又名,缩小增量排序 ...
- [转]深入WPF--Style
Style 用来在类型的不同实例之间共享属性.资源和事件处理程序,您可以将 Style 看作是将一组属性值应用到多个元素的捷径. 这是MSDN上对Style的描述,翻译的还算中规中矩.Style(样式 ...
- java虚拟机(十)--性能监控工具测试内存溢出和死锁基本思路
在之前就曾经简单介绍过jdk自带的性能检测工具,但是只是很入门的内容.没有真正的用过都是白扯了,面试的时候也说不过去,更别提真正 在生产环境去解决问题,所以这里我们学习一下真正解决问题的过程,最起码面 ...
- HZOI20190803 A,C题
题目链接:https://www.cnblogs.com/Juve/articles/11295333.html A: 考场上只有70分... 发现几个性质:特殊性质1:在两条链上,看它是fib第几项 ...
- svn里update以后还是有红色的感叹号怎么办
不用那么麻烦,直接还原就行了,客户端是TortoiseSVN的话,在该文件或文件夹上点右键,选择TortoiseSVN——revert有时还原之后系统反应没那么快,还是显示红色感叹号,刷新几下就正常了 ...