JavaFX JFXDatePicker 为特定日期设置颜色
JavaFX JFXDatePicker set color for specific dates
我可以通过以下代码在某些日期从 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
很难定制。它不是使用 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);
}
}
});
我可以通过以下代码在某些日期从 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
很难定制。它不是使用 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);
}
}
});