gpt4 book ai didi

JavaFX 8 日期选择器功能

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:01:58 30 4
gpt4 key购买 nike

我刚刚开始使用新的 JavaFX 8 控件 DatePicker。在 DatePicker User Experience Documentation ,据说它有几个我想在我的 GUI 应用程序中拥有的很酷的特性:

  1. 我想将格式从 mm/dd/yyyy 更改为 dd/mm/yyyy
  2. 我想限制可以选择的日期。用户只能选择从今天到明年的同一天。
  3. 显示除原始日期之外的回历日期:

enter image description here

如何实现这些功能? JavaDoc 对它们的描述不多。

最佳答案

这里是完整的实现:

import java.net.URL;
import java.time.LocalDate;
import java.time.chrono.HijrahChronology;
import java.time.format.DateTimeFormatter;
import java.util.ResourceBundle;
import javafx.application.Platform;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.control.DateCell;
import javafx.scene.control.DatePicker;
import javafx.scene.control.Label;
import javafx.scene.input.MouseEvent;
import javafx.util.Callback;
import javafx.util.StringConverter;

/**
*
* @author Fouad
*/
public class FXMLDocumentController implements Initializable
{
@FXML
private DatePicker dpDate;

@Override
public void initialize(URL url, ResourceBundle rb)
{
dpDate.setValue(LocalDate.now());
dpDate.setChronology(HijrahChronology.INSTANCE);

Callback<DatePicker, DateCell> dayCellFactory = dp -> new DateCell()
{
@Override
public void updateItem(LocalDate item, boolean empty)
{
super.updateItem(item, empty);

if(item.isBefore(LocalDate.now()) || item.isAfter(LocalDate.now().plusYears(1)))
{
setStyle("-fx-background-color: #ffc0cb;");
Platform.runLater(() -> setDisable(true));

/* When Hijri Dates are shown, setDisable() doesn't work. Here is a workaround */
//addEventFilter(MouseEvent.MOUSE_CLICKED, e -> e.consume());
}
}
};

StringConverter<LocalDate> converter = new StringConverter<LocalDate>()
{
final DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("dd/MM/yyyy");

@Override
public String toString(LocalDate date)
{
if(date != null) return dateFormatter.format(date);
else return "";
}

@Override
public LocalDate fromString(String string)
{
if(string != null && !string.isEmpty())
{
LocalDate date = LocalDate.parse(string, dateFormatter);

if(date.isBefore(LocalDate.now()) || date.isAfter(LocalDate.now().plusYears(1)))
{
return dpDate.getValue();
}
else return date;
}
else return null;
}
};

dpDate.setDayCellFactory(dayCellFactory);
dpDate.setConverter(converter);
dpDate.setPromptText("dd/MM/yyyy");
}

}

关于JavaFX 8 日期选择器功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22940371/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com