Итак, сначала я пытаюсь закрасить ячейку красным, или обвести ячейку красным, основываясь на значении другого столбца, той же строки.Например, есть столбец «Дата регистрации» и столбец «Дата DeadlineToEnrollBy».Это общий пример.
Таким образом, если дата Крайнего срока наступит завтра, ячейка не будет выделена красным, потому что у студента еще есть время, но если Крайний срок был вчера, а у студента по-прежнему нет зачисления, то ячейка Даты зачисления будетбыть красным, указывая на немедленное внимание к этому ученику.Я на самом деле могу это сделать, но таблица иногда действует "фанки".
Если я прокручиваю быстро до конца, я получаю ошибку.И иногда при прокрутке вверх и вниз красные ячейки будут в других местах, или все ячейки в столбце будут красными, даже если это не должно быть.Я полагаю, что даже загрузка новых данных, следовательно, обновление таблицы также приводит к отключению красных ячеек.
Я получаю ошибку
Exception in thread "JavaFX Application Thread"
java.lang.IndexOutOfBoundsException
в этой строке кода
Person student= ClassPanelView.retrieveTable().getItems.get(getIndex());
Вот поток кода, который имеет отношение
В ClassPanelView
createTable(){
.
.
TableColumn<Person, Date> enrolledBy = new TableColumn<>("Enrolled");
enrolledBy.setCellValueFactory(new PropertyValueFactory<>("dateEnrolled"));
enrolledBy.setCellFactory(column -> {
return new util.EditEnrolledDateCell<Person, Date>();
});
table.getColumns().addAll(enrolledBy, ..etc);
}
public static TableView<Person> retrieveTable() {
return table;
}
Другой класс / Ячейка, которую вызывает / возвращает столбец
public class EditEnrolledDateCell<S,T> extends TextFieldTableCell<Person, Date> {
private Date now = new Date();
...
...
@Override
public void updateItem(Date item, boolean empty) {
super.updateItem(item, empty);
if (item == null || empty) {
if(this.getIndex() > -1) {
/*int currentIndex = indexProperty().getValue() < 0 ? 0
: indexProperty().getValue(); */
Person student = ClassPanelView.retrieveTable().getItems().get(getIndex()); //<==== This line is the problem
if(student.getDeadline != null && student.getDeadline.before(now)) {
setStyle("-fx-border-color: #f40404;\n"
+ "-fx-border-width: 1 1 1 1;\n");
}
}
}
else { //if there is something here, format it
setStyle("");
setText(GuiUtils.monthFirstDateFormat.format(item));
}
}
}
Любойсоветы / знания будут с благодарностью!Спасибо
Редактировать: