首页>代码>javaFX实现简单的时钟—fxml>/时间/src/sample/Controller.java
package sample;

import javafx.fxml.FXML;
import javafx.scene.control.Button;
import javafx.scene.shape.Line;
import javafx.scene.text.Text;

import java.text.SimpleDateFormat;
import java.util.Calendar;

import static java.lang.Math.*;

public class Controller {
    @FXML //关联Fxml
    private Line line_hour;
    @FXML
    private Line line_minute;
    @FXML
    private Line line_second;
    @FXML
    private Text text_date;
    @FXML
    private Text text_time;
    @FXML
    private Button btn_start;
    @FXML
    private Button btn_close;
    private boolean clockState = false;//时钟状态
    //当前的时间
    private Calendar dateTime;
    private int hours;
    private int minutes;
    private int seconds;

    //格式化时间日期
    private static SimpleDateFormat dateDF = new SimpleDateFormat("yyyy-MM-dd");
    private static SimpleDateFormat timeDF = new SimpleDateFormat("HH:mm:ss");
    //计算三个指针位置
    private static double centerX = 0;
    private static double centerY = 0;
    private static double hourLength = 150;
    private static double minuteLength = 200;
    private static double secondLength = 240;
    //设一个全局变量p2i
    private static double p2i = 6.28;

    //时钟的点击事件
    public void startClock() {
        clockState = true;
        clock1();
    }

    public void closeClock() {
        clockState = false;
        clock1();
    }

    //获取时间
    private void setTime() {
        this.dateTime = Calendar.getInstance();
        this.hours = this.dateTime.get(Calendar.HOUR);
        this.minutes = this.dateTime.get(Calendar.MINUTE);
        this.seconds = this.dateTime.get(Calendar.SECOND);
    }

    //显示start、close按钮交叉显示
    //即点击start按钮后,start按钮看不见,而close看得见
    // 点击close按钮后,close按钮看不见,而start看得见
    private void showButton() {
        btn_close.setVisible(clockState);
        btn_start.setVisible(!clockState);
    }

    //改变时钟指针的结束坐标(时钟指针移动算法),导入java.lang.math包
    private void setClockPointer() {
        double hourX = centerX + hourLength * sin((hours + minutes / 60) * p2i / 12);
        double hourY = centerY - hourLength * cos((hours + minutes / 60) * p2i / 12);
        double minuteX = centerX + minuteLength * sin(minutes * p2i / 60);
        double minuteY = centerY - minuteLength * cos(minutes * p2i / 60);
        double secondX = centerX + secondLength * sin(seconds * p2i / 60);
        double secondY = centerY - secondLength * cos(seconds * p2i / 60);
        line_hour.setEndX(hourX);
        line_hour.setEndY(hourY);
        line_minute.setEndX(minuteX);
        line_minute.setEndY(minuteY);
        line_second.setEndX(secondX);
        line_second.setEndY(secondY);
    }
    //更新Text文本框的日期时间
    private void setTextDateTime() {
        text_time.setText("时间: " + timeDF.format(dateTime.getTime()));
        text_date.setText("日期: " + dateDF.format(dateTime.getTime()));
    }

    /**private void clock() {
        showButton();

        if (clockState)
            new Thread(() -> {
                try {
                    while (clockState) {
                        setTime();//刷新当前时间
                        setTextDateTime();//刷新文本框内容
                        setClockPointer();//刷新指针的位置
                        Thread.sleep(1000);
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }).start();
    }**/
    //对clock的重写
    private void clock1(){
        showButton();
        if (clockState)
            new Thread(
                    new Runnable() {
                        @Override
                        public void run() {
                            try{
                                while (clockState){
                                    setTime();
                                    setClockPointer();
                                    setTextDateTime();
                                    Thread.sleep(1000);
                                }
                            }catch (InterruptedException e){
                                e.printStackTrace();
                            }
                        }
                    }
            ).start();
    }
}
最近下载更多
段朝洪  LV15 2023年12月7日
29723247  LV8 2023年9月4日
ass1111111111  LV1 2022年12月13日
peach0607  LV1 2022年3月1日
Harry233  LV1 2020年8月14日
823333  LV1 2019年12月24日
wodezui6  LV9 2019年12月5日
asdb大sad  LV1 2019年12月1日
x794991366  LV2 2018年12月1日
734239366  LV8 2018年11月1日
最近浏览更多
飞梦ff  LV8 2月26日
shiaomon 2023年12月14日
暂无贡献等级
段朝洪  LV15 2023年12月7日
29723247  LV8 2023年9月4日
微信网友_6425728903319552  LV1 2023年4月9日
Dominick  LV14 2023年4月3日
xxbvcsudk 2023年2月15日
暂无贡献等级
zyf4728890 2023年1月3日
暂无贡献等级
ass1111111111  LV1 2022年12月13日
微信网友_6248713511227392  LV11 2022年12月5日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友