2015-05-15 97 views
1

我目前正在尝试将DatePicker的可编辑设置为false,因此无法更改该值。使用下面只禁用文本字段,但仍允许日期的变化通过点击日历按钮(setEditable是权限,这样我就可以启用/禁用取决于登录):DatePicker setEditable为false仍然允许点击日历

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

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

回答

3

要禁用它(即使其行为就像是禁用),拨打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 ; 
} 

我建议制作日期选择器看起来有点不同于真正活跃(未禁用)的日期选择器,否则可能会让用户感到困惑。

+0

感谢回复,但是,如上所述,我想避免禁用整个字段,因为我希望它仍然可以读取,尽管用户无法编辑它。 –

+0

你想让它像禁用一样,但看起来没有被禁用? –

+1

查看更新。你仍然可以使用'setDisable(...)'和CSS,你只需要用CSS选择器来处理。 –

3

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

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

其他答案很好,但这个答案很好,很甜! – Sedrick

1

更好的方式来做到这一点:

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

,当你点击它通过这种方式,在弹出的将不显示;) 干杯

0

我在这个问题上感到困惑。最后,我发现,优雅的方式来解决:

yourDatepicker.getEditor().setDisable(true); 

那么,只是得到你的datepicker的编辑器,并禁用它!

0
datePicker.setEditable(false); 

datePicker.setOnMouseClicked(e -> { 
     if(!datePicker.isEditable()) 
      datePicker.hide(); 
    }); 
相关问题