我正在使用 JFXDatePicker 扩展 DatePicker ,并想在单击“日历图标”时更改默认日期。
.setvalue()
,因为它将在
该表格被称为。我已经使用了这段代码,但是没有用。
birthday = new JFXDatePicker(LocalDate.of(1980, Month.MARCH, 11));
[http://i228.photobucket.com/albums/ee83/ThamVanTam/JFXDatePicker_zpscdgns2b6.png]
答案 0 :(得分:3)
您可以通过聆听选择器 showingProperty
然后使用 Platform.runLater()
清除编辑器来简化 @KirantosTera 的代码
JFXDatePicker jfxDatePicker = new JFXDatePicker();
jfxDatePicker.showingProperty().addListener((observableValue, wasFocused, isNowFocus) -> {
if (isNowFocus && jfxDatePicker.getValue() == null) {
jfxDatePicker.setValue(LocalDate.now().minusYears(18));
Platform.runLater(()->{
jfxDatePicker.getEditor().clear();
});
}
});
答案 1 :(得分:1)
不幸的是,在弹出内容中没有可导航的公共 API。这由具有方法 goToDate(LocalDate, boolean)
的内部类 DatePickerContent 支持。如果您被允许(并且足够大胆:) 使用内部结构,您可以在 onShown 处理程序中这样做(以确保皮肤的 onShowing 侦听器不会干扰):
datePicker.setOnShown(e -> {
if (datePicker.getValue() == null && datePicker.getSkin() instanceof DatePickerSkin) {
DatePickerSkin skin = (DatePickerSkin) datePicker.getSkin();
DatePickerContent popupContent = (DatePickerContent) skin.getPopupContent();
popupContent.goToDate(LocalDate.now().minusYears(18), true);
}
});
请注意,这需要打开 com.sun.javafx.scene.control.DatePickerContent
答案 2 :(得分:0)
这是我的解决方案,虽然不完美,但仍然可以解决我的问题:
//Setting datepicker :
birthday.setDayCellFactory(picker -> new DateCell() {
@Override
public void updateItem(LocalDate date, boolean empty) {
super.updateItem(date, empty);
//Setting date 18 years ago
LocalDate today = LocalDate.ofYearDay(LocalDate.now().getYear() - 18, LocalDate.now().getDayOfYear());
//Disable future date
setDisable(empty || date.compareTo(today) > 0);
}
});
//Setting actual value
birthday.setValue(LocalDate.ofYearDay(LocalDate.now().getYear() - 18, LocalDate.now().getDayOfYear()));
//Cover the value by text
String pattern = "dd-MM-yyyy";
formatCalender.format(pattern, birthday);
birthday.getEditor().setText("Date Of Birth");
birthday.setPromptText(null);