1

JavaFX 2で、エディションの列の一部のセルを無効にします。の線に沿った何か

TableModel.isCellEditable(row, col)

スイングで。セルが編集可能かどうかを判断するには、行の項目が必要です。セルの値が十分ではありません。

私がなんとか書いたコードは次のとおりです。

TableView<FilterItem> localTableView = new TableView<FilterItem>() {
    public void edit(int paramInt, TableColumn<FilterItem, ?> paramTableColumn) {
        if (paramInt >= 0) {
            FilterItem item = getItems().get(paramInt); //get item in the row
                if (!item.isPropagated()) {             //condition
                    return;
                }
        }
        super.edit(paramInt, paramTableColumn);
    }

};

問題は、特定のアイテムが編集に対して無効になっているという視覚的な手がかりがないことです。

セルファクトリの設定は私が試した最初のことでしたが、セルの更新メソッドで行データにアクセスできません。

localValueCol.setCellFactory(
    new Callback<TableColumn<FilterItem, String>, TableCell<FilterItem, String>>() {

        @Override
        public TableCell<FilterItem, String> call(TableColumn<FilterItem, String> paramTableColumn) {
            return new TextFieldTableCell<FilterItem, String>() {
                @Override
                public void updateItem(String s, boolean b) {
                    super.updateItem(s, b);
                    // it is possible set editable property here, 
                    // but other cells are not available to make a decision
                }


            };
        }

    });
4

1 に答える 1

2

のようだ

TableRow row = getTableRow();
FilterItem item = (FilterItem) row.getItem();

セルで利用可能は仕事をします。完全な方法は次のとおりです。

@Override
public void updateItem(T t, boolean empty) {
    super.updateItem(t, empty);
    TableRow row = getTableRow();
    if (row != null) {
        FilterItem item = (FilterItem) row.getItem();
        //Test for disable condition
        if (item != null && item.getRating() < 10) {
            setDisable(true);
            setEditable(false);
            this.setStyle("-fx-text-fill: grey");
        }
    }
}
于 2013-04-12T12:41:35.440 に答える