J'utilise JFXDatePicker étend DatePicker et je souhaite modifier la date par défaut lorsque je clique sur l'icône du calendrier.
.setvalue ()
car il affichera cette date lorsque
le formulaire a été appelé. J'ai utilisé ce code mais je n'ai pas fonctionné.
birthday = new JFXDatePicker (LocalDate.of (1980, Month.MARCH, 11));
[ http://i228.photobucket.com/albums/ee83 /ThamVanTam/JFXDatePicker_zpscdgns2b6.png]
3 Réponses :
Voici ma solution, elle n'est pas parfaite mais toujours bonne pour mon problème:
//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);
Vous pouvez simplifier le code de @ KirantosTera en écoutant les sélecteurs showingProperty
puis en effaçant l'éditeur en utilisant Platform.runLater()
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(); }); } });
p >
fonctionne et bon comme un hack :) Notez cependant que le contenu de l'éditeur et la valeur du sélecteur sont désynchronisés - la plupart du temps, ce n'est pas un problème car les utilisateurs sélectionneront une date différente de la fausse valeur, mais si par hasard ils veulent sélectionner cette fausse valeur, l'éditeur reste effacé.
Malheureusement, il n'y a pas d'API publique pour naviguer dans le contenu de la popup. Cela est pris en charge par une classe interne DatePickerContent, qui a une méthode goToDate (LocalDate, boolean)
. Si vous êtes autorisé (et assez audacieux :) à utiliser des composants internes, vous pouvez le faire dans un gestionnaire onShown (pour vous assurer que l'écouteur onShowing du skin n'interfère pas):
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); } });
Notez que ceci nécessite d'ouvrir com.sun.javafx.scene.control.DatePickerContent
Cette méthode ne fonctionne que sur le DatePicker par défaut, pouvez-vous fournir un échantillon aux jars externes comme JFoenix?