JavaFX JFXDatePicker为特定日期设置颜色
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaFX JFXDatePicker为特定日期设置颜色相关的知识,希望对你有一定的参考价值。
我可以通过下面的代码在某些日期从JFoenix库中更改JFXDatePicker
的颜色。
final Callback<DatePicker, DateCell> dayCellFactory = new Callback<DatePicker, DateCell>() {
@Override
public DateCell call(final DatePicker datePicker) {
return new DateCell() {
@Override
public void updateItem(LocalDate item, boolean empty) {
super.updateItem(item, empty);
if(!empty) {
if(listRegisteredTOTDays.contains(item)) {
setStyle("-fx-background-color: #99e699;");
}
}
}
};
}
};
当我在具有更改背景的项目上盘旋时,会出现问题。它在悬停后将背景颜色更改为默认颜色,而不是通过上面的代码设置的背景颜色。我不想禁用该单元格,因为用户仍然必须能够单击它!练习是告知用户哪些日期已有数据。所以什么都不能被禁用。怎么克服这个?我只是想在悬停后回到上面的颜色设置。
答案
虽然JFXDatePicker
看起来很漂亮,但需要一些自由才能让DateCell
s难以定制。它不是使用CSS来设置单元格样式,而是从代码中设置背景,该代码具有比任何CSS更高的优先级,甚至是内联CSS样式。
你可以在createDayCells()
method of com.jfoenix.skins.JFXDatePickerContent
看到这个。
这意味着在不修改皮肤的情况下,解决这个问题的唯一机会就是添加自己的事件处理程序并使用Platform.runLater
来确保它在createDayCells()
中添加事件处理程序之后运行:
final Background markedBackground = new Background(new BackgroundFill(Color.rgb(0x99, 0xE6, 0x99),
CornerRadii.EMPTY,
Insets.EMPTY));
picker.setDayCellFactory(dp -> new DateCell() {
{
addEventHandler(MouseEvent.MOUSE_EXITED, evt -> {
if (listRegisteredTOTDays.contains(getItem())) {
// override background property of marked cells after
// JFXDatePicker modifies it
Platform.runLater(() -> {
setBackground(markedBackground);
});
}
});
}
@Override
public void updateItem(LocalDate item, boolean empty) {
super.updateItem(item, empty);
if (!empty && listRegisteredTOTDays.contains(item)) {
setBackground(markedBackground);
}
}
});
以上是关于JavaFX JFXDatePicker为特定日期设置颜色的主要内容,如果未能解决你的问题,请参考以下文章