0
votes

JavaFX - Comment changer la date par défaut de DatePicker en cliquant sur l'icône du calendrier?

J'utilise JFXDatePicker étend DatePicker et je souhaite modifier la date par défaut lorsque je clique sur l'icône du calendrier.

  • La valeur par défaut est la date actuelle et je souhaite la remplacer par une date spécifique par code (Cela vous fera gagner un peu de temps lors du choix d'une date en 195x pour Exemple. Je désactive le modifiable donc je ne peux pas taper dans le champ de texte) Et je ne souhaite pas utiliser .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]


0 commentaires

3 Réponses :


0
votes

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);            


0 commentaires

3
votes

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 >


1 commentaires

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é.



0
votes

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


1 commentaires

Cette méthode ne fonctionne que sur le DatePicker par défaut, pouvez-vous fournir un échantillon aux jars externes comme JFoenix?