Javafx 简明教程

JavaFX - DatePicker

Date picker 控件允许用户从图形化日历中选择日期。它可以自定义以显示不同的日期格式,限制可选日期的范围,并且处理与日期选择相关的各种事件。下图显示了典型的日期选择器 −

sample datepicker

Creating DatePicker in JavaFX

在 JavaFX 中,日期选择器由名为 DatePicker 的类表示。此类属于包 javafx.scene.control 。通过实例化此类,我们可以创建 JavaFX 中的日期选择器。DatePicker 类的构造函数列出如下 −

  1. DatePicker() − 这是默认构造函数,构造未经任何预定义日期的日期选择器。

  2. DatePicker(LocalDate date) − 它使用指定日期创建新的日期选择器。

我们可以使用上述任何构造函数在 JavaFX 应用程序内嵌入 DatePicker。最常用的DatePicker类的默认构造函数不接受任何参数。一旦我们实例化此类,我们的下一步将设置初始日期值。之后,实例化任何布局窗格以容纳 DatePicker。最后,设置场景和舞台,以在屏幕上显示日期选择器。

Example

以下 JavaFX 程序演示如何在 JavaFX 应用程序中创建日期选择器。将此代码保存在名为 DatepickerDemo.java 的文件中。

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.DatePicker;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import java.time.LocalDate;
import javafx.scene.control.Label;
import javafx.scene.paint.Color;
import javafx.geometry.Pos;
public class DatepickerDemo extends Application {
   @Override
   public void start(Stage stage) {
      // Creating a Label
      Label label = new Label("Please Enter preferred Date: ");
      // Create a DatePicker and set its initial value
      DatePicker datePicker = new DatePicker();
      datePicker.setValue(LocalDate.of(2020, 1, 1));
      // Create a Label to display the selection
      Label selectLabel = new Label();
      selectLabel.setTextFill(Color.RED);
      // Add a listener to the value property of the DatePicker
      datePicker.valueProperty().addListener((observable, oldValue, newValue) -> {
         // Print the selected date
         selectLabel.setText("You selected: " + newValue);
      });
      // Creating a VBox to hold all controls
      VBox root = new VBox();
      root.setAlignment(Pos.CENTER);
      root.setSpacing(10);
      root.getChildren().addAll(label, datePicker, selectLabel);
      // Create a Scene and set it to the Stage
      Scene scene = new Scene(root, 400, 300);
      stage.setTitle("DatePicker in JavaFX");
      stage.setScene(scene);
      stage.show();
   }
   public static void main(String[] args) {
      launch(args);
   }
}

要从命令提示符编译并执行已保存的 Java 文件,请使用以下命令−

javac --module-path %PATH_TO_FX% --add-modules javafx.controls DatepickerDemo.java
java --module-path %PATH_TO_FX% --add-modules javafx.controls DatepickerDemo

当我们执行上述代码时,它将生成以下输出。

datepicker output

Showing week numbers in the Date Picker

默认情况下, DatePicker 不会在日历中显示星期数。但是,如果需要显示星期数和日期,我们可以将 setShowWeekNumbers() 方法设置为 true ,如下一个示例所示。将此代码保存在名为 DatepickerDemo.java 的文件中。

Example

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.DatePicker;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import java.time.LocalDate;
import javafx.scene.control.Label;
import javafx.scene.paint.Color;
import javafx.geometry.Pos;
public class DatepickerDemo extends Application {
   @Override
   public void start(Stage stage) {
      // Creating a Label
      Label label = new Label("Please Enter preferred Date: ");
      // Create a DatePicker and set its initial value
      DatePicker datePicker = new DatePicker();
      datePicker.setValue(LocalDate.of(2024, 1, 1));
      datePicker.setShowWeekNumbers(true);
      // Create a Label to display the selection
      Label selectLabel = new Label();
      selectLabel.setTextFill(Color.RED);
      // Add a listener to the value property of the DatePicker
      datePicker.valueProperty().addListener((observable, oldValue, newValue) -> {
         // Print the selected date
         selectLabel.setText("You selected: " + newValue);
      });
      // Creating a VBox to hold all controls
      VBox root = new VBox();
      root.setAlignment( Pos.BASELINE_CENTER);
      root.setSpacing(10);
      root.getChildren().addAll(label, datePicker, selectLabel);
      // Create a Scene and set it to the Stage
      Scene scene = new Scene(root, 400, 300);
      stage.setTitle("DatePicker in JavaFX");
      stage.setScene(scene);
      stage.show();
   }
   public static void main(String[] args) {
      launch(args);
   }
}

使用以下命令从命令提示符编译并执行已保存的 Java 文件 −

javac --module-path %PATH_TO_FX% --add-modules javafx.controls DatepickerDemo.java
java --module-path %PATH_TO_FX% --add-modules javafx.controls DatepickerDemo

执行时,以上程序将生成一个 JavaFX 窗口,其中显示带星期数的 DatePicker,如下所示 −

datepicker output2