Я получаю строку из tableView.Я использую setRowFactory, чтобы получить строку и позже я использую ее.
Мне нужно переопределить метод updateItem, чтобы получить каждую строку, и если элемент внутри этой строки имеет ошибку, тогда используйте красный цвет, в противном случае используйте зеленый.
Элемент внутри строки является объектом «истории», потому что строки являются частями истории - истории, которая была создана после выполнения каких-либо действий в приложении.
Итак, у меня есть что-то вроде этого:
@Override
protected void updateItem(History history, boolean empty) {
super.updateItem(history, empty);
if (empty) {
setStyle("");
} else if (history.isHasError() == true) {
getStyleClass().clear();
getStyleClass().add("errorHistoryRow");
} else if (history.isHasError() == false){
getStyleClass().clear();
getStyleClass().add("");
}
}
Но мне нужно добавить этот updateItem в уже определенную строку в этом методе.
private void openErrorMessageAfterHoveringOverRow() {
historyTableView.setRowFactory(tableView -> {
final TableRow<History> row = new TableRow<>();
for (History history : model.getAllHistoryObservableArrayList()) {
***I NEED TO PUT IT HERE***
}
for (History his : model.getAllHistoryObservableArrayList()) {
row.hoverProperty().addListener((observable) -> {
History historyRow = row.getItem();
Point p = MouseInfo.getPointerInfo().getLocation();
int x = p.x;
int y = p.y;
Popup popup = new Popup();
popup.setX(x - 300);
popup.setY(y - 200);
TextArea ta = new TextArea();
AnchorPane layout = new AnchorPane();
Scene scene = new Scene(layout);
stageSingleton().setScene(scene);
if (row.isHover() && his.equals(historyRow)) {
ta.setText(row.getItem().getErrorMessage());
popup.getContent().addAll(ta);
stageSingleton().show();
popup.show(stageSingleton());
} else if (!row.isHover() && his.equals(historyRow)) {
popup.hide();
stageSingleton().close();
}
});
}
return row;
});
}
Итак, как я могу реализовать метод updateItem для уже определенной строки в этом методе?Потому что методы ниже работают, но у меня не может быть 2 разных методов "setRowFactory" в моем проекте.Поэтому мне нужно объединить их одним способом.
public void test() {
historyTableView.setRowFactory(tableView -> new TableRow<History>() {
@Override
protected void updateItem(History history, boolean empty) {
super.updateItem(history, empty);
if (empty) {
setStyle("");
} else if (history.isHasError() == true) {
getStyleClass().clear();
getStyleClass().add("errorHistoryRow");
} else if (history.isHasError() == false){
getStyleClass().clear();
getStyleClass().add("");
}
}
});
}