如何在TableView中禁用某些行

时间:2013-10-28 18:50:01

标签: javafx tableview

我有以下TableView(JavaFX 2.2.45):

Period   Number   Number   Number
---------------------------------
1          x         x       x
2          x         x       x
3          x         x       x
.
.
24         x         x       x

句点列表示一天中的小时。数字列是可编辑的。我希望能够在当前小时之前和之前禁用行。因此,例如,如果是10:15我想禁用第1行到第11行。如何使用当前小时(易于计算并放入变量)来完成此操作?

1 个答案:

答案 0 :(得分:0)

最后,TableView.setRowFactory()可以正常使用。我将这个类作为参数添加到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()