【JavaFx】1.JavaFx实现闹钟小程序

这篇具有很好参考价值的文章主要介绍了【JavaFx】1.JavaFx实现闹钟小程序。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

专栏目录
1.JavaFx实现闹钟小程序

2.银行账户管理员

3.大数字

4.购物车

5.文本编辑器

6.乌龟图


所有程序皆使用JDK8

JavaFX

JavaFx菜鸟教程
JavaFx哔哩哔哩教程

JavaFx是什么

JavaFx是java实现图形界面的一种方式,其他还有java的awt、swing,但是逐渐被淘汰。

awt --> swing --> JavaFx

javafx可以实现逻辑和样式的分离,可以使用xml和css来编写样式。

在学习之前请确保你已经熟练掌握面向对象、包装类、枚举、注解、匿名对象等内容的概念和使用

JavaFx使用注意事项

自从java11以后,jdk已经不内置javafx库,已交给开源社区管理,所以我们需要自己导入

可以到网站去下载 jar 包。注意下载的类型是sdk

若无法访问建议使用科学上网,或自行选取其他方式下载

或者使用maven引入依赖

<dependency>
       <groupId>org.openjfx</groupId>
       <artifactId>javafx-controls</artifactId>
       <version>19-ea+8</version>
 </dependency>

JavaFx实现闹钟小程序

项目描述

Create a program which shows the current time using a label. Allow the user to select a given time and specify a message. When the clock reaches that time, have it pop up a message to the user reminding them of their message and/or play a specific sound file.

项目目录

– src
-------- image
------------sound
-------- AlarmMain.java

gitee地址

程序代码

/**
 * @projectName: Alarm
 * @package: javaFx
 * @className: AlarmMain
 * @author: Jiabao Yu
 * @date: 2023/1/7 16:29
 */

import javafx.animation.KeyFrame;
import javafx.animation.Timeline;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.control.*;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.Pane;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
import javafx.stage.Stage;
import javafx.util.Duration;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

public class AlarmMain extends Application {
    private Group group = new Group();
    private Scene scene = new Scene(group, 540, 410);
    //声明
    protected int event = 0;
    protected BackGround backGround = new BackGround();
    protected SetTime setTime = new SetTime();
    protected SetNode setNode = new SetNode();
    protected SetButton setButton = new SetButton();
    protected OutputTime outputTime = new OutputTime();
    protected ArrayList<GetAlarm> saveEvent = new ArrayList<>();
    protected CheckAlarm checkAlarm = new CheckAlarm();

    @Override
    public void start(Stage AlarmClock) {
        //BackGround
        group.getChildren().add(backGround);
        //setTime
        group.getChildren().addAll(setTime.setHour, setTime.setMinute, setTime.setSecond);
        //setNode
        group.getChildren().add(setNode);
        //setButton
        group.getChildren().addAll(setButton.bt1, setButton.bt2);
        //outputTime
        group.getChildren().addAll(outputTime, outputTime.warnTime, outputTime.attentionNode,
                outputTime.h, outputTime.m, outputTime.s);
        //检查
        checkAlarm.Run();
        //执行
        AlarmClock.setTitle("AlarmClock");
        AlarmClock.setScene(scene);
        AlarmClock.show();
    }

    //背景设置
    public class BackGround extends ImageView {
        private Image backGround = new Image("file:src/image/Clock.png");

        public BackGround() {
            this.setImage(backGround);
        }
    }

    //时间设置
    public class SetTime {
        ComboBox setHour = new ComboBox();
        ComboBox setMinute = new ComboBox();
        ComboBox setSecond = new ComboBox();

        public SetTime() {
            SetPoint();
            SetChoose();
        }

        public void SetPoint() {
            setHour.setLayoutX(178.5);
            setHour.setLayoutY(276.0);
            setHour.setPrefWidth(62.0);
            setMinute.setLayoutX(262.5);
            setMinute.setLayoutY(276.0);
            setMinute.setPrefWidth(62.0);
            setSecond.setLayoutX(346.5);
            setSecond.setLayoutY(276.0);
            setSecond.setPrefWidth(62.0);
        }

        public void SetChoose() {
            setHour.setValue("00");
            setMinute.setValue("00");
            setSecond.setValue("00");
            for (int i = 1; i < 24; i++) {
                if (i < 10) setHour.getItems().add("0" + "" + i);
                else setHour.getItems().add("" + i);
            }
            for (int i = 1; i < 60; i++) {
                if (i < 10) setMinute.getItems().add("0" + "" + i);
                else setMinute.getItems().add("" + i);
            }
            for (int i = 1; i < 60; i++) {
                if (i < 10) setSecond.getItems().add("0" + "" + i);
                else setSecond.getItems().add("" + i);
            }
        }
    }

    //备注时间设置
    public class SetNode extends TextField {
        public SetNode() {
            SetPoint();
        }

        public void SetPoint() {
            this.setLayoutX(178.5);
            this.setLayoutY(305.5);
            this.setPrefWidth(252.0);
        }
    }

    //时间文字显示
    public class OutputTime extends Label {
        private SimpleDateFormat ruleDate = new SimpleDateFormat("HH:mm:ss");
        protected Label warnTime = new Label("响铃时间:"),
                attentionNode = new Label("备注事件:");
        protected Label h = new Label("时"),
                m = new Label("分"),
                s = new Label("秒");

        public OutputTime() {
            SetFont();
            SetPoint();
            TimeLine();
        }

        public void TimeLine() {
            EventHandler<ActionEvent> runTime = e -> {
                this.setText(ruleDate.format(new Date()));
            };
            Timeline time = new Timeline(new KeyFrame(Duration.seconds(1), runTime));
            time.setCycleCount(Timeline.INDEFINITE);
            time.play();
        }

        public void SetFont() {
            this.setFont(Font.font(72));
            warnTime.setFont(Font.font(20));
            attentionNode.setFont(Font.font(20));
            h.setFont(Font.font(20));
            m.setFont(Font.font(20));
            s.setFont(Font.font(20));
        }

        public void SetPoint() {
            this.setLayoutX(123.5);
            this.setLayoutY(137.5);
            warnTime.setLayoutX(81.5);
            warnTime.setLayoutY(273.5);
            attentionNode.setLayoutX(81.5);
            attentionNode.setLayoutY(302.5);
            h.setLayoutX(240.5);
            h.setLayoutY(274.75);
            m.setLayoutX(324.5);
            m.setLayoutY(274.75);
            s.setLayoutX(408.5);
            s.setLayoutY(274.75);
        }
    }

    //功能按钮
    public class SetButton {
        protected Button bt1 = new Button("查看闹钟");
        protected Button bt2 = new Button("设置闹钟");

        public SetButton() {
            SetPoint();
            ActionBt1();
            ActionBt2();
        }

        public void SetPoint() {
            //
            bt1.setLayoutX(101.5);
            bt1.setLayoutY(331.5);
            bt1.setPrefWidth(141.5);
            //
            bt2.setLayoutX(265.0);
            bt2.setLayoutY(331.5);
            bt2.setPrefWidth(141.5);
        }

        public void ActionBt1() {
            bt1.setOnAction(e -> {
                ViewEvent();
            });
        }

        public void ActionBt2() {
            bt2.setOnAction(e -> {
                SaveEvent();
                event++;
            });
        }
    }

    //获取设置时间
    public class GetAlarm {
        private final String EventNum = "" + (event + 1);
        private String getTime = "";
        private String getNode = "";

        public GetAlarm() {
            getTime();
            getNode();
        }

        public String getTime() {
            getTime += setTime.setHour.getValue() + ":";
            getTime += setTime.setMinute.getValue() + ":";
            getTime += setTime.setSecond.getValue();
            return getTime;
        }

        public String getNode() {
            getNode += setNode.getText();
            return getNode;
        }
    }

    //保存闹钟
    public void SaveEvent() {
        saveEvent.add(new GetAlarm());
        //
        Stage pre = new Stage();
        Group pr = new Group();
        Label att = new Label("!!设置成功!!");
        att.setFont(Font.font(48));
        pr.getChildren().add(att);
        pre.setScene(new Scene(pr));
        pre.show();
    }

    //查看闹钟
    public void ViewEvent() {
        Group viewGroup = new Group();
        double startX = 6, startY = 25, jump = 25;
        Stage viewStage = new Stage();
        if (event == 0) {
            Label l = new Label("!!你没有定闹钟!!");
            l.setFont(Font.font(48));
            viewGroup.getChildren().add(l);
            viewStage.setScene(new Scene(viewGroup));
        } else {
            for (int i = 0; i < event; i++) {
                viewGroup.getChildren().add(new ForViewEvent(startX, startY + i * jump, i));
            }
            viewStage.setScene(new Scene(viewGroup, 360, 205));
        }
        viewStage.setTitle("已定闹钟");
        viewStage.show();
    }

    //查看闹钟的信息
    public class ForViewEvent extends Text {
        public ForViewEvent(double x, double y, int num) {
            setFont(Font.font(24));
            setLayoutX(x);
            setLayoutY(y);
            setText(saveEvent.get(num).EventNum + ". " + saveEvent.get(num).getTime + " " + saveEvent.get(num).getNode);
        }
    }

    //对比闹钟时间
    public class CheckAlarm {
        public int check() {
            int num = -1;
            for (int i = 0; i < event; i++) {
                if (saveEvent.get(i).getTime.equals(outputTime.ruleDate.format(new Date()))) {
                    num = i;
                    break;
                }
            }
            return num;
        }

        public void Run() {
            EventHandler<ActionEvent> check = e -> {
                if (check() != -1) Ring(check());
            };
            Timeline time = new Timeline(new KeyFrame(Duration.seconds(1), check));
            time.setCycleCount(Timeline.INDEFINITE);
            time.play();
        }

        public void Ring(int x) {
            Group ringGroup = new Group();
            Stage ringStage = new Stage();
            ringStage.setScene(new Scene(ringGroup));
            ringGroup.getChildren().add(new ForRing(x));
            ringStage.setTitle("Ring!Ring!Ring!" + " " + saveEvent.get(x).getTime);
            saveEvent.remove(x);
            event--;
            ringStage.show();
        }

        public class ForRing extends Label {
            public ForRing(int num) {
                setFont(Font.font(48));
                setText(saveEvent.get(num).getNode);
            }
        }
    }
}

运行截图

【JavaFx】1.JavaFx实现闹钟小程序,JavaFX,javafx
【JavaFx】1.JavaFx实现闹钟小程序,JavaFX,javafx
【JavaFx】1.JavaFx实现闹钟小程序,JavaFX,javafx
【JavaFx】1.JavaFx实现闹钟小程序,JavaFX,javafx
【JavaFx】1.JavaFx实现闹钟小程序,JavaFX,javafx
【JavaFx】1.JavaFx实现闹钟小程序,JavaFX,javafx文章来源地址https://www.toymoban.com/news/detail-830587.html

到了这里,关于【JavaFx】1.JavaFx实现闹钟小程序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • javafx实现桌面录屏录音软件

    目录    一、实现的效果

    2024年02月01日
    浏览(27)
  • JavaFx 实现水平滚动文本(跑马灯效果)

    原文地址: JavaFx 实现水平滚动文本(跑马灯效果) - Stars-One的杂货小窝 本文是以TornadoFx框架进行编写,各位使用JavaFx可以参考 代码已经封装在common-controls库中 实现原理就是利用了JavaFx里的动画效果去修改scrollpane的translateX属性,原本想在text上改造的,发现文字过多就不行了,最终还

    2023年04月27日
    浏览(39)
  • 基于JavaFX的扫雷游戏实现(三)——交互逻辑

      相信阅读过上期文章,动手能力强的朋友们已经自己跑出来界面了。所以这期我要讲的是交互部分,也就是对于鼠标点击事件的响应,包括计时计数对点击事件以及一些状态量的影响。   回忆下第一期介绍的扫雷规则和操作,游戏从开局到结束可能会涉及到哪些情况呢

    2024年02月12日
    浏览(38)
  • 基于JavaFX的扫雷游戏实现(一)——整体概述

      我在不要更新挑战中坚持了一年 🎉🎉🎉 ,你也来试试吧( 咕咕咕 )!   好言归正传,本次更新带来的是经典游戏扫雷,基于JavaFX实现。篇幅有限, 文章主要介绍核心操作实现,不会 列出 所有代码。需要 完整源码或是想预览最终效果,可以点击下方链接。后续会逐

    2024年02月11日
    浏览(22)
  • 基于JavaFX的扫雷游戏实现(二)——游戏界面

      废话环节:看过上期文章的小伙伴现在可能还是一头雾水,怎么就完成了核心内容,界面呢?哎我说别急让我先急,博主这不夜以继日地肝出了界面部分嘛。还是老规矩,不会把所有地方都照顾到,只挑一些有代表性的内容介绍,您各位多担待🙏。另外博主的JavaFX是跟着

    2024年02月12日
    浏览(33)
  • JavaFx程序使用Gloun打包成Android平台App教程

    !!! 适合有Maven基础,对JavaFx或JavaFX移动端感兴趣的朋友 提示必须在Linux环境下进行,可以使用虚拟机 推荐使用CentOS系统进行,虚拟机硬盘大小推荐最少给30G 不要像我一样,搞一半又去给文件系统根目录扩大容量 如果容量不够可以看篇博客: https://blog.csdn.net/m0_58042817/article/detai

    2024年02月05日
    浏览(73)
  • JavaFx实现倒计时按钮组件(类似发送激活码)

    原文地址: JavaFx实现倒计时按钮组件(类似发送激活码) - Stars-One的杂货小窝 本文基于TornadoFx框架进行编写,封装工具代码是kotlin版本 然后也是顺便把这个封装成了stars-one/common-controls 里的 xCountDownBtn 点击按钮的时候,将当前按钮设置为禁用状态,之后开启一个线程去倒计时,间隔

    2024年02月04日
    浏览(33)
  • 详解Java实现2048小游戏(JavaFX,完整源码+注释说明)

    刚刚完成的一个小游戏,写文章记录一下,如果有任何错误或者可以改进的代码请提出 另一方面也是方便自己几个月或几年后忘记时,来这里翻一翻回顾思路 目录 基本界面: 类的组织: _CardPane: _CardMatrixPane: _CardColor: _GameMenuBar: _2048Demo: 基本思路: 卡片: 卡片矩阵:

    2024年02月03日
    浏览(38)
  • 基于JavaFX的扫雷游戏实现(五)——设置和自定义控件

      它来了它来了,最后一期终于来了。理论上该讲的全都讲完了,只剩下那个拖了好几期的自定义控件和一个比较没有存在感的设置功能没有讲。所以这次就重点介绍它们俩吧。   首先我们快速浏览下设置的实现,上图:   然后是控制器代码: SettingsController.java   

    2024年02月13日
    浏览(25)
  • 错误: 缺少 JavaFX 运行时组件, 需要使用该组件来运行此应用程序

    这种情况一般是jdk11以上会出现,最简单直接的解决办法就是新建一个启动类来引导你的application类的运行。 在java8里这段代码可以直接运行,但是11以上会报错,此时新建一个启动类: 运行这个启动类就行了。

    2024年02月11日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包