DatePicker setEditable 为 false 仍然允许点击日历
DatePicker setEditable to false still allows for clicking of Calendar
我目前正在尝试将 DatePicker 的 setEditable 设置为 false,以便无法更改该值。使用以下仅禁用文本字段,但仍允许通过单击日历按钮更改日期(setEditable 用于权限,因此我可以 enable/disable 取决于登录):
exampleDatePicker.setEditable(user.getGroup().equals(admin));
有没有办法禁用 DatePicker 上的日历按钮?我不想使用 setDisable,因为我仍然希望该字段可读,我可以不要将 CSS 更改为已禁用,因为我有其他已禁用的 DatePickers,我希望它们显示为灰色。
要禁用它(即使其表现得像被禁用一样),请调用 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 ;
}
我建议让日期选择器看起来与真正活跃(未禁用)的日期选择器稍有不同,否则可能会让用户感到困惑。
对于以后的搜索,我是这样做的:
dtpDate.setDisable(true);
dtpDate.setStyle("-fx-opacity: 1");
dtpDate.getEditor().setStyle("-fx-opacity: 1");
更好的方法:
yourDatepicker.setOnMouseClicked(e -> {
if(yourDatepicker.isDisabled && yourDatepicker.isShowing())
yourDatepicker.hide();
});
这样当你点击它的时候,弹窗就不会显示了;)
干杯
我对这个问题很困惑。最后我找到了解决问题的优雅方法:
yourDatepicker.getEditor().setDisable(true);
好吧,只需获取日期选择器的编辑器并将其禁用!
datePicker.setEditable(false);
datePicker.setOnMouseClicked(e -> {
if(!datePicker.isEditable())
datePicker.hide();
});
我目前正在尝试将 DatePicker 的 setEditable 设置为 false,以便无法更改该值。使用以下仅禁用文本字段,但仍允许通过单击日历按钮更改日期(setEditable 用于权限,因此我可以 enable/disable 取决于登录):
exampleDatePicker.setEditable(user.getGroup().equals(admin));
有没有办法禁用 DatePicker 上的日历按钮?我不想使用 setDisable,因为我仍然希望该字段可读,我可以不要将 CSS 更改为已禁用,因为我有其他已禁用的 DatePickers,我希望它们显示为灰色。
要禁用它(即使其表现得像被禁用一样),请调用 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 ;
}
我建议让日期选择器看起来与真正活跃(未禁用)的日期选择器稍有不同,否则可能会让用户感到困惑。
对于以后的搜索,我是这样做的:
dtpDate.setDisable(true);
dtpDate.setStyle("-fx-opacity: 1");
dtpDate.getEditor().setStyle("-fx-opacity: 1");
更好的方法:
yourDatepicker.setOnMouseClicked(e -> {
if(yourDatepicker.isDisabled && yourDatepicker.isShowing())
yourDatepicker.hide();
});
这样当你点击它的时候,弹窗就不会显示了;) 干杯
我对这个问题很困惑。最后我找到了解决问题的优雅方法:
yourDatepicker.getEditor().setDisable(true);
好吧,只需获取日期选择器的编辑器并将其禁用!
datePicker.setEditable(false);
datePicker.setOnMouseClicked(e -> {
if(!datePicker.isEditable())
datePicker.hide();
});