我有一个 DatePicker 并添加此监听器。
datePicker.showingProperty().addListener((observable, oldValue, showing) -> {
if(showing) {
//Get the content
DatePickerContent content = (DatePickerContent)((DatePickerSkin)datePicker.getSkin()).getPopupContent();
content.lookupAll(".day-cell").forEach(cell -> {
cell.getStyleClass().add("selected");
System.out.println(cell.getStyleClass() + " Day: " + ((DateCell) cell).getItem());
});
}
});
但是在显示 DatePicker 并选择日期后,只有一个单元格显示为被选中。
即使控制台中打印出的样式都已“选定”,但让我一直想知道的是,真正选定的 Cell 有 2 个“选定”样式。 这是控制台输出(部分):
cell date-cell day-cell selected Day: 2017-07-11
cell date-cell day-cell selected Day: 2017-07-12
cell date-cell day-cell selected selected Day: 2017-07-13
cell date-cell day-cell selected Day: 2017-07-14
cell date-cell day-cell selected Day: 2017-07-15
那么为什么只有一个单元格显示为选中状态?
不要向属性添加监听器,只需设置
datePicker.onShown
。
//Get the content
datePicker.onShown(e -> {
DatePickerContent content = (DatePickerContent)((DatePickerSkin)datePicker.getSkin()).getPopupContent();
content.lookupAll(".day-cell").forEach(cell -> {
cell.getStyleClass().add("selected");
});
}