这期内容当中小编将会给大家带来有关利用JavaFX制作一个简单的时钟,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。
首先要在面板中显示一个时钟,我们可以设计一个ClockPane类来显示一个时钟。
<强>最终效果:强>
若要绘制一个时钟,需要绘制一个圆并为秒钟,分钟和小时绘制三个指针。为了画一个指针,需要确定一条直线的两端:一端是时钟的中央,位于(centerX centerY);另外一端位于(endX,恩迪),由一下公式来确定:
<强> 强>(其中θ是指针和竖直方向12点的夹角)
因为一分钟有60秒,所以第2个指针的角度是:第二次×(2π/60)
分钟的位置由分钟和秒钟来决定。包含秒数的确切分钟数是minu +第二/60例。如,如时间是3分30秒,那么总的分钟数就是3.5。由于一小时有60分钟,因此分针的角度是:
由于一个圆被分为12个小时,所以时针的角度是:<强> 强>
为了简化计算,在计算分针和时针角度的时候,可以忽略秒针,因为它们数字太小,基本可以忽略。因此,秒针,分针以及时针的端点可以如下计算:
secondX=centerX + secondHandLength×罪(第二×(2π/60)
secondY=centerY - secondHandLength×cos(第二×(2π/60)
minuteX=centerX + minuteHandLength×罪(分钟×(2π/60)
minuteY=centerY - minuteHandLength×cos(分钟×(2π/60)
hourX=centerX + hourHandLength×罪((小时+分钟/60)×(2π/12))
hourX=centerX + hourHandLength×罪((小时+分钟/60)×(2π/12))
这样就得到了ClockPane类的实现程序:
包com.company; 进口javafx.scene.layout.Pane; 进口javafx.scene.paint.Color; 进口javafx.scene.shape.Circle; 进口javafx.scene.shape.Line; 进口javafx.scene.text.Text; 进口java.util.Calendar; 进口java.util.GregorianCalendar; 公开课ClockPane扩展面板{ 私人int小时; 私人int分钟; 私人int第二; 私人双w=250 h=250; 公共ClockPane () { setCurrentTime (); } 公共ClockPane (int, int, int二){ this.hour=小时; this.minute=分钟; this.second=第二; paintClock (); } 公共int getHour () { 返回时间; } 公共空间setHour (int小时){ this.hour=小时; paintClock (); } 公共int getMinute () { 返回时间; } 公共空间setMinute (int分钟){ this.minute=分钟; paintClock (); } 公共int getSecond () { 返回第二; } 公共空间setSecond (int二){ this.second=第二; paintClock (); } 公共双getW () { 返回w; } 公共空间环境运输及工务局局长(双w) { this.w=w; paintClock (); } 公共双getH () { 返回h; } 公共空间setH(双h) { this.h=h; paintClock (); } 公共空间setCurrentTime () { 日历日历=new GregorianCalendar (); this.hour=calendar.get (Calendar.HOUR_OF_DAY); this.minute=calendar.get (Calendar.MINUTE); this.second=calendar.get (Calendar.SECOND); paintClock (); } 保护无效paintClock () { 双clockRadius=Math.min (w h) * 0.8 * 0.5; 双centerX=w/2; 双centerY=h/2; 圈圆=new圆(centerX, centerY clockRadius); circle.setFill (Color.WHITE); circle.setStroke (Color.BLACK); 文本t1=新的文本(centerX-5 centerY-clockRadius + 12,“12“); 文本t2=新的文本(centerX-clockRadius + 3, centerY + 5,“9”); 文本t3=新的文本(centerX + clockRadius-10 centerY + 3,“3”); 文本t4=new文本(centerX-3 centerY + clockRadius-3,“6“); 双sLength=clockRadius * 0.8; 双scondX=centerX + sLength * sin(第二* (2 * Math.PI/60)); 双scondY=centerY-sLength * Math.cos(第二* (2 * Math.PI/60)); 样条曲线=new线(centerX, centerY, scondX scondY); sline.setStroke (Color.RED); 双mLength=clockRadius * 0.65; 双minuteX=centerX + mLength * sin(分钟* (2 * Math.PI/60)); 双minuteY=centerY-mLength * Math.cos(分钟* (2 * Math.PI)/60); 行mline=新行(centerX、centerY minuteX, minuteY); mline.setStroke (Color.BLUE); 双hLength=clockRadius * 0.5; 双hourX=centerX + hLength * sin(% 12 +分钟/60.0(小时)* (2 * Math.PI/12)); 双胡瑞=centerY-hLength * Math.cos((% 12 + 60分钟/小时)* (2 * Math.PI/12)); 线=new线(centerX, centerY hourX,胡瑞); hline.setStroke (Color.GREEN); .clear getChildren () (); 调用getChildren () .addAll(圆,t1、t2、t3、t4样条曲线,mline,线); } }利用JavaFX制作一个简单的时钟