Datepicker должен отображаться только календарь [дубликат]

Деструктурирование по умолчанию имеет значение только при передаче объекта, который не имеет соответствующих свойств. = {} по умолчанию для всего параметра позволяет вообще не пропускать (пустой) объект.

Он делает drawES6Chart() эквивалентным drawES6Chart({}).

1
задан Fabian Ochmann 8 January 2016 в 17:44
поделиться

2 ответа

Вы можете получить всплывающее содержимое DatePicker из DatePickerSkin. См. Эту демонстрацию для реализации:

public class DatePickerPopupDemo extends Application {
    @Override
    public void start(Stage primaryStage) {
        try {
            BorderPane root = new BorderPane();
            Scene scene = new Scene(root, 400, 400);
            scene.getStylesheets().add(getClass().getResource("application.css").toExternalForm());

            DatePickerSkin datePickerSkin = new DatePickerSkin(new DatePicker(LocalDate.now()));
            Node popupContent = datePickerSkin.getPopupContent();

            root.setCenter(popupContent);

            primaryStage.setScene(scene);
            primaryStage.show();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        launch(args);
    }
}


Если верхняя панель не нужна, вы можете посмотреть ее и скрыть .

DatePickerSkin datePickerSkin = new DatePickerSkin(new DatePicker(LocalDate.now()));
Node popupContent = datePickerSkin.getPopupContent();

// force a css layout pass to ensure that lookup calls work
popupContent.applyCss();
popupContent.lookup(".month-year-pane").setVisible(false);

root.setCenter(popupContent);

Обновление:

Начиная с JDK 9 DatePickerSkin является частью открытого API и использует закрытая реализация com.sun.[...] больше не требуется. (См. JavaDoc )

Кроме того, , как указано в комментариях , чтобы получить выбранное значение, вам нужно получить доступ к DatePicker, из которого вы извлекли (например, сохраняя его как переменную).

DatePicker datePicker = new DatePicker(LocalDate.now());
DatePickerSkin datePickerSkin = new DatePickerSkin(datePicker);
Node popupContent = datePickerSkin.getPopupContent();
//[...]
LocalDate selectedDate = datePicker.getValue();

Вы также можете прослушать изменения значений, добавив ChangeListener к соответствующему свойству:

datePicker.valueProperty().addListener(new ChangeListener<LocalDate>() {
    @Override
    public void changed(ObservableValue<? extends LocalDate> observable, LocalDate oldValue, LocalDate newValue) {
        System.out.println("New Value: " + newValue);
    }
});
//Or using neat lambda
datePicker.valueProperty().addListener((observable, oldValue, newValue) -> {
    System.out.println("New Value: " + newValue);
});
5
ответ дан Fabian Ochmann 19 August 2018 в 02:03
поделиться
  • 1
    Начиная с JavaFX 8, обратите внимание, что DatePickerSkin не является общедоступным классом API. (Это будет публичный класс API в JavaFX 9 , хотя имя пакета будет изменено и, возможно, API.) довольно просто , чтобы реализовать это непосредственно с любым API-интерфейсом нужно (и опустить, что вам не нужно). – James_D 8 January 2016 в 20:47
  • 2
    @Modus Tollens извините за глупый вопрос, но как я могу добавить & quot; eventlistener & quot; в этот календарь, чтобы я мог получить тот день, который был нажат ...? (выход из android и новый для javafx, так немного запутался): S – pb4now 6 February 2017 в 11:37
  • 3
    @ pb4now сохранить DatePicker в переменной, например, "myDatePicker". Затем вы можете прочитать «myDatePicker.getValue () & quot; – negste 11 May 2017 в 12:03

Чтобы удалить «месяц-год», используйте:

DatePickerSkin datePickerSkin = new DatePickerSkin(date_picker);
Node popupContent = datePickerSkin.getPopupContent();
((DatePickerContent) popupContent).getChildren().remove(popupContent.lookup(".month-year-pane"));
0
ответ дан Ismael Altenhofen 19 August 2018 в 02:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: