JavaFX setCellFactory 没有设置我的项目
JavaFX setCellFactory doesn't set my item
我的 cellFactory 有问题。
我希望如果在 FX TableView 中将日期设置为我的对象,则 updateItem 方法会检查它是否是有效日期。如果不是,则单元格应为红色。
_availableCol.setCellFactory(column -> {
return new TableCell<SimpleReservationUnit, LocalDate>() {
@Override
protected void updateItem(LocalDate date, boolean empty) {
super.updateItem(date, empty);
if (empty || date == null) {
setText(null);
}else {
if (date.compareTo(_newDeparture.getValue()) < 0) {
setStyle("-fx-background-color: red");
}else{
setStyle("");
}
}
}
};
});
着色有效,但 LocalDate 从未设置到单元格。据我了解,这应该发生在 super() 调用中。
为此列实现了 CellValueFactory:
_availableCol.setCellValueFactory(new PropertyValueFactory<>("Available"));
知道我做错了什么吗?
您需要设置节点的文本。当你检测到它为空时你确实清除它,但当它不是时你不设置它。如果单元格为空,您也会忘记清除样式。
if (empty || date == null) {
setText(null);
setStyle(""); // can this be null?
} else {
LocalDate departureDate = _newDeparture.getValue();
String text = departureDate.toString(); // or format it for user locale
setText(text);
String style = date.isBefore(departureDate) ? "-fx-background-color: red" : "";
setStyle(style);
}
我的 cellFactory 有问题。 我希望如果在 FX TableView 中将日期设置为我的对象,则 updateItem 方法会检查它是否是有效日期。如果不是,则单元格应为红色。
_availableCol.setCellFactory(column -> {
return new TableCell<SimpleReservationUnit, LocalDate>() {
@Override
protected void updateItem(LocalDate date, boolean empty) {
super.updateItem(date, empty);
if (empty || date == null) {
setText(null);
}else {
if (date.compareTo(_newDeparture.getValue()) < 0) {
setStyle("-fx-background-color: red");
}else{
setStyle("");
}
}
}
};
});
着色有效,但 LocalDate 从未设置到单元格。据我了解,这应该发生在 super() 调用中。 为此列实现了 CellValueFactory:
_availableCol.setCellValueFactory(new PropertyValueFactory<>("Available"));
知道我做错了什么吗?
您需要设置节点的文本。当你检测到它为空时你确实清除它,但当它不是时你不设置它。如果单元格为空,您也会忘记清除样式。
if (empty || date == null) {
setText(null);
setStyle(""); // can this be null?
} else {
LocalDate departureDate = _newDeparture.getValue();
String text = departureDate.toString(); // or format it for user locale
setText(text);
String style = date.isBefore(departureDate) ? "-fx-background-color: red" : "";
setStyle(style);
}