最後,TableView.setRowFactory()
正常工作。我newed了這個類作爲參數來setRowFactory
(爲簡潔起見省略泛型):
public class LockableRow implements Callback {
@Override
public TableRow call(TableView tableView) {
return new TableRow() {
@Override
protected void updateItem(LockableModel item, boolean empty) {
super.updateItem(item, empty);
if (!isEmpty()) {
if (isRowDisabled(tableView, getIndex())) {
setDisable(true);
} else {
setDisable(false);
}
}
}
};
}
private boolean isRowDisabled(TableView tableView, int thisRow) {
ObservableList rows = tableView.getItems();
return (thisRow< rows.size() && rows.get(thisRow).isDisabled());
}
}
在這裏,模型背襯表視圖是LockableModel
它實現isDisabled()
。
我第一次嘗試在http://stackoverflow.com/questions/10925882/disable-tablerow-based-on-data的頂部答案中提到的策略,但無法讓這些工作。現在我有一個基於表格模型中的自定義cellFactory和BooleanProperty的工作解決方案,但認爲我應該再次嘗試使用rowFactory,這似乎是更好的解決方案。 – user2929292