当前位置: 首页 > news >正文

JavaFX DatePicker

JavaFX DatePicker允许从给定日历中选择一天。DatePicker控件包含一个带有日期字段和日期选择器的组合框。JavaFX DatePicker控件使用JDK8日期时间API。

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.DatePicker;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;public class Main extends Application {public static void main(String[] args) {launch(args);}@Overridepublic void start(Stage stage) {VBox vbox = new VBox(20);Scene scene = new Scene(vbox, 400, 400);stage.setScene(scene);DatePicker checkInDatePicker = new DatePicker();vbox.getChildren().add(checkInDatePicker);stage.show();}
}

DatePicker创建

我们可以创建一个DatePicker并在类构造函数中设置一个特定的日期值。

dateP = new DatePicker(LocalDate.of(2018, 10, 8));

还可以使用setValue()方法设置日期值。

checkInDatePicker.setValue(LocalDate.of(2014, 10, 8));
checkInDatePicker.setValue(LocalDate.now());

以下代码使用setValue()向结束DatePicker添加更多时间。

import java.time.LocalDate;import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.DatePicker;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;public class Main extends Application {public static void main(String[] args) {launch(args);}@Overridepublic void start(Stage stage) {VBox vbox = new VBox(20);Scene scene = new Scene(vbox, 400, 400);stage.setScene(scene);DatePicker startDatePicker = new DatePicker();DatePicker endDatePicker = new DatePicker();startDatePicker.setValue(LocalDate.now());endDatePicker.setValue(startDatePicker.getValue().plusDays(1));vbox.getChildren().add(new Label("Start Date:"));vbox.getChildren().add(startDatePicker);vbox.getChildren().add(new Label("End Date:"));vbox.getChildren().add(endDatePicker);stage.show();}
}

自定义日期选择器

可以通过使用setShowWeekNumbers()方法来启用和禁用在DatePicker中显示ISO周数。

dateP.setShowWeekNumbers(true);

默认情况下,DatePicker使用系统区域设置和ISO日历系统定义的日期格式

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.DatePicker;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.util.StringConverter;public class Main extends Application {public static void main(String[] args) {launch(args);}@Overridepublic void start(Stage stage) {String pattern = "yyyy-MM-dd";VBox vbox = new VBox(20);Scene scene = new Scene(vbox, 400, 400);stage.setScene(scene);DatePicker checkInDatePicker = new DatePicker();StringConverter<LocalDate> converter = new StringConverter<LocalDate>() {DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern(pattern);@Overridepublic String toString(LocalDate date) {if (date != null) {return dateFormatter.format(date);} else {return "";}}@Overridepublic LocalDate fromString(String string) {if (string != null && !string.isEmpty()) {return LocalDate.parse(string, dateFormatter);} else {return null;}}};checkInDatePicker.setConverter(converter);checkInDatePicker.setPromptText(pattern.toLowerCase());vbox.getChildren().add(checkInDatePicker);checkInDatePicker.requestFocus();stage.show();}
}

DateCell

默认情况下,日历元素中的所有单元格都可供选择。可以使用日期单元工厂禁用单元格。

import java.time.LocalDate;import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.DateCell;
import javafx.scene.control.DatePicker;
import javafx.scene.control.Label;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.util.Callback;public class Main extends Application {public static void main(String[] args) {launch(args);}@Overridepublic void start(Stage stage) {VBox vbox = new VBox(20);Scene scene = new Scene(vbox, 400, 400);stage.setScene(scene);DatePicker startDatePicker = new DatePicker();DatePicker endDatePicker = new DatePicker();startDatePicker.setValue(LocalDate.now());final Callback<DatePicker, DateCell> dayCellFactory = new Callback<DatePicker, DateCell>() {@Overridepublic DateCell call(final DatePicker datePicker) {return new DateCell() {@Overridepublic void updateItem(LocalDate item, boolean empty) {super.updateItem(item, empty);if (item.isBefore(startDatePicker.getValue().plusDays(1))) {setDisable(true);setStyle("-fx-background-color: #EEEEEE;");}}};}};endDatePicker.setDayCellFactory(dayCellFactory);endDatePicker.setValue(startDatePicker.getValue().plusDays(1));vbox.getChildren().add(new Label("Start Date:"));vbox.getChildren().add(startDatePicker);vbox.getChildren().add(new Label("End Date:"));vbox.getChildren().add(endDatePicker);stage.show();}
}

示例

为每个日期单元格安装工具提示。

import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.DateCell;
import javafx.scene.control.DatePicker;
import javafx.scene.control.Label;
import javafx.scene.control.Tooltip;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.util.Callback;public class Main extends Application {public static void main(String[] args) {launch(args);}@Overridepublic void start(Stage stage) {VBox vbox = new VBox(20);Scene scene = new Scene(vbox, 400, 400);stage.setScene(scene);final DatePicker startDatePicker = new DatePicker();DatePicker endDatePicker = new DatePicker();startDatePicker.setValue(LocalDate.now());final Callback<DatePicker, DateCell> dayCellFactory = new Callback<DatePicker, DateCell>() {@Overridepublic DateCell call(final DatePicker datePicker) {return new DateCell() {@Overridepublic void updateItem(LocalDate item, boolean empty) {super.updateItem(item, empty);long p = ChronoUnit.DAYS.between(startDatePicker.getValue(), item);setTooltip(new Tooltip("You're about to stay for " + p + " days"));}};}};endDatePicker.setDayCellFactory(dayCellFactory);endDatePicker.setValue(startDatePicker.getValue().plusDays(1));vbox.getChildren().add(new Label("Start Date:"));vbox.getChildren().add(startDatePicker);vbox.getChildren().add(new Label("End Date:"));vbox.getChildren().add(endDatePicker);stage.show();}
}

相关文章:

  • 待学习记录清单
  • 移植案例与原理 - build lite配置目录全梳理
  • 代码随想录刷题经历
  • 接口自动化Requests+Pytest基础实现
  • 三、网络服务协议
  • 数据库面试题-MySQL
  • webpack打包gz文件,nginx开启gzip压缩
  • 【RK3588/算能/Nvidia智能盒子】AI“值守”,规范新能源汽车充电站停车、烟火及充电乱象
  • Java每日作业day6.18
  • 操作系统分区的时候/boot和/boot/efi有什么区别?
  • shell脚本之函数
  • 持续总结中!2024年面试必问 20 道设计模式面试题(四)
  • CP AUTOSAR标准之FlashDriver(AUTOSAR_CP_SWS_FlashDriver)(更新中……)
  • Web前端开发UL:探索与解构列表的奥秘
  • 事实证明:企业级中后台框架,大厂还是主角,小厂打酱油。
  • [笔记] php常见简单功能及函数
  • Codepen 每日精选(2018-3-25)
  • express.js的介绍及使用
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • Java多线程(4):使用线程池执行定时任务
  • opencv python Meanshift 和 Camshift
  • React Native移动开发实战-3-实现页面间的数据传递
  • spark本地环境的搭建到运行第一个spark程序
  • STAR法则
  • 阿里云Kubernetes容器服务上体验Knative
  • 编写符合Python风格的对象
  • 利用阿里云 OSS 搭建私有 Docker 仓库
  • 漂亮刷新控件-iOS
  • 小程序测试方案初探
  • 应用生命周期终极 DevOps 工具包
  • 鱼骨图 - 如何绘制?
  • 《天龙八部3D》Unity技术方案揭秘
  • 通过调用文摘列表API获取文摘
  • ​queue --- 一个同步的队列类​
  • ​你们这样子,耽误我的工作进度怎么办?
  • # .NET Framework中使用命名管道进行进程间通信
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (pojstep1.3.1)1017(构造法模拟)
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (机器学习-深度学习快速入门)第三章机器学习-第二节:机器学习模型之线性回归
  • (离散数学)逻辑连接词
  • (七)Activiti-modeler中文支持
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • . ./ bash dash source 这五种执行shell脚本方式 区别
  • .net dataexcel winform控件 更新 日志
  • .NET 材料检测系统崩溃分析
  • .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换
  • .NET企业级应用架构设计系列之应用服务器
  • .NET应用架构设计:原则、模式与实践 目录预览
  • @antv/x6 利用interacting方法来设置禁止结点移动的方法实现。
  • [AAuto]给百宝箱增加娱乐功能
  • [AHK V2]鼠标悬停展开窗口,鼠标离开折叠窗口
  • [AHK] WinHttpRequest.5.1报错 0x80092004 找不到对象或属性
  • [AIGC] 使用Curl进行网络请求的常见用法
  • [android] 练习PopupWindow实现对话框