日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Swing应用程序中的JavaFX 8 DatePicker

發布時間:2023/12/3 java 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Swing应用程序中的JavaFX 8 DatePicker 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.概述

本文顯示了一個使用JavaFX 8 DatePicker控件的Java SE 8 Swing應用程序的示例。

DatePicker控件允許用戶以文本形式輸入日期或從日歷彈出窗口中選擇日期。 本示例使用其中帶有FX控件的Swing JFrame 。 為了將FX內容嵌入Swing應用程序中, javafx.embed.swing包提供了JFXPanel類。

該應用程序從日期選擇器中獲取一個輸入日期,并檢查它是否在用戶選擇的兩個日期選擇器中的日期范圍內(從和到日期)。 日期選擇器的日期驗證包括:

  • 起始日期小于起始日期
  • 日期不是將來的日期
  • 輸入日期在開始和結束日期(包括)之內

無效或有效消息顯示在“ FX Alert對話框中。

以下兩個屏幕截圖顯示了具有JFrame以及嵌入式FX控件(帶有Label , DatePicker和Button FXPanel )和DatePicker的日歷彈出窗口的應用程序。

Swing JFrame中的FX控件

帶有日歷彈出的FX DatePicker

源代碼

可從本文末尾提供的鏈接下載此示例FXDatePickerInSwingExample.java的源代碼。 請注意,編譯和運行代碼需要Java SE 8。 Java SE 8包含JavaFX 8。

2.應用說明

從事件調度線程中的Java SE程序的main()方法啟動Java Swing應用程序FXDatePickerInSwingExample ,如下所示:

SwingUtilities.invokeLater(() -> {new FXDatePickerInSwingExample().initAndShowGUI(); });

initAndShowGUI()方法顯示一個嵌入了JavaFX控件的Swing JFrame 。 以下代碼段顯示了JFrame構造:

JFrame frame = new JFrame("JavaFX DatePicker in Swing App"); JFXPanel fxPanel = new JFXPanel(); frame.add(fxPanel); frame.setVisible(true);

javafx.embed.swing.JFXPanel是將JavaFX內容嵌入到Swing應用程序中的組件,并提供JavaFX和Swing的互操作性。 JFXPanel擴展了javax.swing.JComponent 。 用JFXPanel的setScene()方法指定要顯示的內容,該方法接受javafx.scene.Scene的實例。 在FX應用程序事件分配線程上調用此方法,如下所示:

Platform.runLater(() -> {fxPanel.setScene(createScene()); });

應用程序的createScene()方法返回帶有FX控件的Scene實例。 上面顯示的屏幕快照具有完整的GUI。 以下代碼段顯示了帶代碼片段的createScene()方法:

private Scene createScene() {GridPane grid = new GridPane();// TitleLabel title1 = new Label("Enter and check if the input date is");Label title2 = new Label("within the selected date range.");VBox titleVb = new VBox();titleVb.setAlignment(Pos.CENTER);titleVb.getChildren().addAll(title1, title2);// Input date pickerLabel inPickLabel = new Label("Input date:");inPicker = new DatePicker();inPicker.setPromptText(pattern);DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern);StringConverter converter = new LocalDateStringConverter(formatter, null);inPicker.setConverter(converter);grid.add(inPickLabel, 0, 0);grid.add(inPicker, 1, 0);// From and to date pickersLabel pickLabel1 = new Label("From date:");fmPicker = new DatePicker(LocalDate.now());fmPicker.setEditable(false);grid.add(pickLabel1, 0, 1);grid.add(fmPicker, 1, 1);...// Button...// Vbox and sceneVBox vbox = new VBox(20);vbox.setPadding(new Insets(15, 15, 15, 15));vbox.getChildren().addAll(titleVb, grid, btnHb);return new Scene(vbox); }

DatePicker控制

javafx.scene.control.DatePicker控件允許用戶以文本形式輸入日期或從日歷彈出窗口中選擇日期。 DatePicker的value屬性表示當前選擇的LocalDate 。 此屬性可以與構造函數一起使用,并且具有方法getValue()和setValue() 。

下面的代碼片段構造一個日期選擇器對象,并將其值設置為今天的日期: DatePicker picker = new DatePicker(LocalDate.now());

日期驗證

這個應用程序中有三個日期選擇器。 所有這些都配置為捕獲有效日期:

  • 日期值不能大于今天。
  • 起始日期永遠不能在起始日期之后。

為了完成這些約束,使用了DatePicker的dayCellFactoryProperty 。 可以提供自定義單元工廠,以自定義日期選擇器彈出窗口中的各個日單元。 日期選擇器具有一種用于設置自定義單元格工廠的方法: setDayCellFactory() 。

這些API用于創建自定義單元格工廠:日期選擇器使用DateCell類在日歷月中呈現各個網格單元格。 應用程序可以覆蓋DateCell的update方法來更改每個單元格的屬性,例如文本,背景色等。

以下代碼段顯示了返回自定義dayCellFactory的方法。 請注意,此單一方法返回三個日期選擇器的單元格工廠。

private Callback getCustomDateCellFactory(DateParameterType dateParamType) {Callback dayCellFactory = new Callback() {@Overridepublic DateCell call(DatePicker datePicker) {return new DateCell() {@Overridepublic void updateItem(LocalDate select, boolean b) {super.updateItem(select, empty);// Date cannot be after today.// This applies for all the date pickers.if (select.isAfter(LocalDate.now())) {setDisable(true);return;}// From-date cannot be greater than to-date.if ((dateParamType == DateParameterType.FROM_DATE)&&(select.isAfter(toPicker.getValue()))) {setDisable(true);}// To-date cannot be less than from-date,// and cannot be greater than today.if (dateParamType == DateParameterType.TO_DATE) {if ((select.isBefore(fmPicker.getValue())) ||(select.isAfter(LocalDate.now()))) {setDisable(true);}}...};return dayCellFactory; }

將此自定義dayCellFactory應用于createScene()方法中的日期選擇器,如下所示:

inPicker.setDayCellFactory(getCustomDateCellFactory(null)); fmPicker.setDayCellFactory(getCustomDateCellFactory(DateParameterType.FROM_DATE)); toPicker.setDayCellFactory(getCustomDateCellFactory(DateParameterType.TO_DATE));

應用程序的getCustomDateCellFactory()方法返回上面已詳細說明的自定義單元工廠。 方法參數DateParameterType enum標識要應用單元格工廠的日期選擇器。 例如,“起始日期”選擇器需要一個“日期”選擇器日期才能獲取要禁用的單元。 因此DateParameterType.FROM用于標識代碼的相關片段(請參見以下代碼段)。

// From-date cannot be greater than to-date. if ((dateParamType == DateParameterType.FROM_DATE) &&(select.isAfter(toPicker.getValue()))) {setDisable(true); }

自定義輸入日期轉換器

默認情況下,日期選擇器按照默認轉換器的格式顯示日期字符串(例如,dd / mm / yyyy)。 通過為DatePicker的setConverter()方法提供自定義轉換器,可以覆蓋此方法。 輸入日期選擇器使用自定義轉換器接受并以不同于默認格式(dd-MMM-yy)的格式顯示日期。 以下說明顯示了自定義轉換器的用法。

在以下示例中,這些API用于創建自定義轉換器:

  • javafx.util.StringConverter :此抽象類定義字符串和對象之間的轉換行為。
  • javafx.util.converter.LocalDateStringConverter :此類是LocalDate值的StringConverter實現。
  • java.time.format.DateTimeFormatter :這是用于打印和解析日期時間對象的格式化程序。

使用提供的格式化程序和解析器為LocalDate值創建一個StringConverter 。 格式化程序用于使用指定的模式將日期轉換為格式化的字符串。 請注意,解析器被指定為null。 該轉換器應用于dd-MMM-yy格式的輸入DatePicker 。 從彈出窗口中選擇日期時,使用轉換器將日期顯示為dd-MMM-yy格式。

以下代碼段顯示了轉換器的創建和用法:

String pattern = "dd-MMM-yy"; DateTimeFormatter formatter = DateTimeFormatter.ofPattern(pattern); StringConverter converter = new LocalDateStringConverter(formatter, null); picker.setConverter(converter);

本地日期

Java.time.LocalDate是ISO- Java.time.LocalDate (當今世界上大多數地方使用的現代民用日歷系統)中的日期,例如2007-12-03。 此類中沒有存儲任何時間或時區信息。 可以使用靜態方法LocalDate.of(int year, int month, int dayOfMonth)從年,月和日創建實例。

以下是此應用中使用的API:

  • LocalDate.now()從系統時鐘獲取默認時區的當前日期。 這是一種靜態方法。
  • isAfter(ChronoLocalDate localDate)檢查此日期是否在指定的日期之后。 這將檢查該日期是否代表另一個日期之后的本地時間軸上的一個點。 LocalDate實現java.time.chrono.ChronoLocalDate接口。
  • isBefore(ChronoLocalDate localDate)檢查此日期是否在指定日期之前。
  • isEqual(ChronoLocalDate localDate)檢查此日期是否等于指定的日期。

示例中使用以下例程檢查輸入日期是否在所選日期范圍內。 從DatePicker控件獲取輸入以及從日期中選擇的日期。 DatePicker的getValue()方法返回LocalDate對象。

private boolean validDate(LocalDate start, LocalDate end, LocalDate input) {if ((input.isEqual(start)) || (input.isEqual(end))) {return true;}else if ((input.isAfter(start)) && (input.isBefore(end))) {return true;}else {return false;} }

3.警報

這是指向描述此示例中使用的javafx.scene.control.Alert對話框的文章的鏈接 。

4.用法示例

Java Swing沒有日期選擇器組件。 使用此示例中顯示的技術,Swing應用程序可以在Swing JFrame窗口中使用FX的DatePicker控件。 例如,此JFrame可以是“按日期搜索”功能對話框窗口,在其中可以選擇日期范圍,并且可以按輸入日期(例如發票的集合)在所選日期范圍內的日期來搜索輸入數據。

當用戶單擊“按日期搜索” JButton時,Swing應用程序的窗口可以作為非模式窗口打開此JFrame對話框(按鈕ActionListener的actionPerformed()方法創建此“按日期搜索”對話框的實例)。

5.下載源代碼

這是JavaFX 8 DatePicker in Swing Application中JavaFX 8 DatePicker in Swing Application的示例

下載
您可以在此處下載此示例的完整源代碼: FXDatePickerInSwingExample.zip

*

翻譯自: https://www.javacodegeeks.com/2016/05/javafx-8-datepicker-swing-application.html

總結

以上是生活随笔為你收集整理的Swing应用程序中的JavaFX 8 DatePicker的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。