最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaFX實(shí)現(xiàn)簡(jiǎn)易時(shí)鐘效果(一)

 更新時(shí)間:2020年11月15日 11:20:41   作者:酸甜梅子  
這篇文章主要為大家詳細(xì)介紹了JavaFX實(shí)現(xiàn)簡(jiǎn)易時(shí)鐘效果的第一篇,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了JavaFX實(shí)現(xiàn)簡(jiǎn)易時(shí)鐘效果的具體代碼,供大家參考,具體內(nèi)容如下

效果圖

用當(dāng)前時(shí)間創(chuàng)建時(shí)鐘,繪制表盤(pán)。
鐘表是靜止的。讓指針動(dòng)起來(lái),請(qǐng)參照:繪制簡(jiǎn)易時(shí)鐘(二)

主函數(shù)文件 ShowClock:

package primier;

import javafx.application.Application;
import javafx.geometry.Insets;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.paint.Color;
import javafx.scene.layout.*;
import javafx.scene.control.*;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.shape.Line;

public class ShowClock extends Application {
 @Override //Override the start method in the Application class
 public void start(Stage primaryStage) {
  // 創(chuàng)建時(shí)鐘面板
  ClockPane clock = new ClockPane();
  // 當(dāng)前時(shí)間整理為字符串
  String timeString = clock.getHour() + ":" + clock.getMinute()
    + ":" + clock.getSecond();
  Label lbCurrentTime = new Label(timeString);

  BorderPane pane = new BorderPane();
  pane.setCenter(clock);
  pane.setBottom(lbCurrentTime);
  // 將時(shí)鐘字符串設(shè)為靠上居中
  BorderPane.setAlignment(lbCurrentTime, Pos.TOP_CENTER);

  Scene scene = new Scene(pane, 250,250);
  primaryStage.setTitle("Display Clock");
  primaryStage.setScene(scene);
  primaryStage.show();
 }
 public static void main (String[] args) {
  Application.launch(args);
 }
}

ClockPane 類(lèi)

package primier;

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;

 // 時(shí)鐘面板的寬度和高度
 private double w = 250, h = 250;

 /** 用當(dāng)前時(shí)間創(chuàng)建時(shí)鐘 */
 public ClockPane() {
  setCurrentTime();
 }
 
 /** Return hour */
 public int getHour() { return hour; }
 
 /** Return minute */
 public int getMinute() { return minute; }

 /** Return second */
 public int getSecond() { return second; }

 /** Set the current time for the clock */
 public void setCurrentTime() {
  // 用當(dāng)前時(shí)間創(chuàng)建Calendar類(lèi)
  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();
 }

 /** 繪制時(shí)鐘 */
 protected void paintClock() {
  double clockRadius = Math.min(w,h)*0.4; // 時(shí)鐘半徑
  // 時(shí)鐘中心x, y坐標(biāo)
  double centerX = w/2;
  double centerY = h/2;

 // 繪制鐘表
  Circle circle = new Circle(centerX, centerY, clockRadius);
  circle.setFill(Color.WHITE); // 填充顏色
  circle.setStroke(Color.BLACK); // 筆畫(huà)顏色
  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.GRAY);

  // 分針
  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);

  // 時(shí)針
  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.0) * (2 * Math.PI / 12));
  Line hLine = new Line(centerX, centerY, hourX, hourY);
  sLine.setStroke(Color.GREEN);
 
 // 將之前的結(jié)點(diǎn)清空,繪制新創(chuàng)建的結(jié)點(diǎn)
  getChildren().clear();
  getChildren().addAll(circle, t1, t2, t3, t4, sLine, mLine, hLine);
 }
}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringSecurity在分布式環(huán)境下的使用流程分析

    SpringSecurity在分布式環(huán)境下的使用流程分析

    文章介紹了Spring?Security在分布式環(huán)境下的使用,包括單點(diǎn)登錄(SSO)的概念、流程圖以及JWT(JSON?Web?Token)的生成和校驗(yàn),通過(guò)使用JWT和RSA非對(duì)稱(chēng)加密,可以實(shí)現(xiàn)安全的分布式認(rèn)證,感興趣的朋友一起看看吧
    2025-02-02
  • zookeeper的Leader選舉機(jī)制源碼解析

    zookeeper的Leader選舉機(jī)制源碼解析

    這篇文章主要為大家介紹了zookeeper的Leader選舉源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-03-03
  • HashMap確定key的存儲(chǔ)位置的源碼分析

    HashMap確定key的存儲(chǔ)位置的源碼分析

    HashMap 作為 Java 中最常用的數(shù)據(jù)結(jié)構(gòu)之一,用于存儲(chǔ)和管理鍵值對(duì),HashMap 基于哈希函數(shù)實(shí)現(xiàn),能通過(guò)將 key 映射到特定的位置來(lái)實(shí)現(xiàn)快速存儲(chǔ)、查找和刪除數(shù)據(jù),接下來(lái)將從源碼角度分析以通俗易懂的方式向大家講解一下 HashMap 如何確定 key 的存儲(chǔ)位置的
    2023-07-07
  • 通俗講解JVM的類(lèi)加載機(jī)制

    通俗講解JVM的類(lèi)加載機(jī)制

    這篇文章主要介紹了JVM的類(lèi)加載機(jī)制的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)Java,感興趣的朋友可以了解下
    2020-09-09
  • java實(shí)現(xiàn)微信H5支付方法詳解

    java實(shí)現(xiàn)微信H5支付方法詳解

    本篇文章主要介紹了java實(shí)現(xiàn)微信H5支付方法詳解,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2017-04-04
  • JFinal極速開(kāi)發(fā)框架使用筆記分享

    JFinal極速開(kāi)發(fā)框架使用筆記分享

    下面小編就為大家分享一篇JFinal極速開(kāi)發(fā)框架使用筆記,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • springboot切面添加日志功能實(shí)例詳解

    springboot切面添加日志功能實(shí)例詳解

    在本篇文章里小編給大家整理的是關(guān)于springboot 切面添加日志功能的相關(guān)知識(shí)點(diǎn)內(nèi)容,有需要的朋友們可以參考下。
    2019-09-09
  • 使用Spring AntPathMatcher的doMatch方法

    使用Spring AntPathMatcher的doMatch方法

    這篇文章主要介紹了使用Spring AntPathMatcher的doMatch方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Mybatis?selectKey 如何返回新增用戶的id值

    Mybatis?selectKey 如何返回新增用戶的id值

    這篇文章主要介紹了Mybatis?selectKey 如何返回新增用戶的id值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • SpringBoot實(shí)現(xiàn)AOP切面的三種方式

    SpringBoot實(shí)現(xiàn)AOP切面的三種方式

    Spring,SpringBoot框架憑借多種高效機(jī)制,顯著增強(qiáng)了代碼的功能性,并實(shí)現(xiàn)了切面編程(AOP)的精髓,其核心亮點(diǎn)之一,是運(yùn)用動(dòng)態(tài)代理技術(shù),無(wú)需觸動(dòng)源代碼即可在Bean的運(yùn)行時(shí)為其動(dòng)態(tài)織入額外功能,本文給大家介紹了SpringBoot通過(guò)3種方式實(shí)現(xiàn)AOP切面,需要的朋友可以參考下
    2024-08-08

最新評(píng)論

静宁县| 新巴尔虎右旗| 西城区| 平顶山市| 麦盖提县| 天水市| 鸡泽县| 鹰潭市| 晋宁县| 图片| 商水县| 禄丰县| 洪雅县| 德令哈市| 启东市| 马龙县| 涿州市| 班玛县| 光山县| 黄平县| 沾益县| 榆林市| 广州市| 稷山县| 彭泽县| 磐石市| 崇州市| 和顺县| 恩施市| 介休市| 塔城市| 五大连池市| 九台市| 阿拉善盟| 阳朔县| 酒泉市| 平潭县| 东乡县| 图片| 揭东县| 闽侯县|