DatePicker setEditable为false仍允许单击日历

时间:2015-05-15 14:20:48

标签: java javafx datepicker calendar

我目前正在尝试将DatePicker的setEditable设置为false,因此无法更改该值。使用以下内容仅禁用文本字段,但仍允许通过单击日历按钮更改日期(setEditable用于权限,因此我可以根据登录启用/禁用):

exampleDatePicker.setEditable(user.getGroup().equals(admin));

有没有办法在DatePicker上禁用日历按钮?我不想使用setDisable,因为我仍然希望该字段可读,我可以'更改CSS为禁用,因为我有其他DatePickers被禁用,我想要显示为灰色。

5 个答案:

答案 0 :(得分:4)

要禁用它(即使其行为被禁用),请致电setDisable(...)

exampleDatePicker.setDisable(! user.getGroup().equals(admin));

要更改默认禁用外观(我同意很难阅读)的外观,您仍然可以使用CSS,但请专门选择此DatePicker。最简单的方法可能是使用CSS伪类:

PseudoClass notAuthenticated = PseudoClass.getPseudoClass("not-authenticated");
exampleDatePicker.setDisable(! user.getGroup().equals(admin));
exampleDatePicker.pseudoClassStateChanged(notAuthenticated, ! user.getGroup().equals(admin));

然后在外部CSS中,您可以为.date-picker:not-authenticated设置样式,例如:

.date-picker:not-authenticated, .date-picker:not-authenticated > .text-field {
    -fx-opacity: 0.85 ;
}

我建议让日期选择器看起来与真正有效(未禁用)的日期选择器略有不同,否则可能会让用户感到困惑。

答案 1 :(得分:4)

对于将来的搜索,这是我做的:

dtpDate.setDisable(true);
dtpDate.setStyle("-fx-opacity: 1");
dtpDate.getEditor().setStyle("-fx-opacity: 1");

答案 2 :(得分:1)

更好的方法:

yourDatepicker.setOnMouseClicked(e -> {
        if(yourDatepicker.isDisabled && yourDatepicker.isShowing())
            yourDatepicker.hide();
    });

这样当你点击它时,弹出窗口不会显示;) 干杯

答案 3 :(得分:0)

我对这个问题很困惑。最后我找到了优雅的解决方法:

yourDatepicker.getEditor().setDisable(true);

好吧,只需获取日期选择器的编辑器并禁用它!

答案 4 :(得分:0)

datePicker.setEditable(false);

datePicker.setOnMouseClicked(e -> {
        if(!datePicker.isEditable())
            datePicker.hide();
    });