在TableView中访问CheckBox的值

时间:2019-07-11 20:06:42

标签: javafx

我无法获取布尔值(布尔值),即是否选中了JavaFX的tableView中的复选框。

(链接到图像) https://i.imgur.com/pIWDcfI.png

由于某种原因,当我getCellObservableValue()以获取索引1处的CheckBox时,结果为null。

//From SceneBuilder/JavaFX file
<TableColumn fx:id="labelColumn" prefWidth="112.57145690917969" text="Use 
as Label" />


//Setting Up Table, which displays everything correctly 
TableColumn<Integer,CheckBox>  labelColumn = (TableColumn<Integer, 
CheckBox>) elements.get("labelColumn");
labelColumn.setCellFactory(data -> new CheckBoxTableCell<>());
monitorTable.setEditable(true);



//Trying to Access, which gives null pointer exception
CheckBox cb = (CheckBox) labelColumn.getCellObservableValue(1);
System.out.println(cb.isSelected());

1 个答案:

答案 0 :(得分:3)

如果未设置null,则

That method返回cellValueFactory。此外,您确实应该有一个模型来保持这种状态-TableView只是一个视图。与TableViewSelectionModel(表示仅在TableView本身的上下文中选择哪些项)不同,包含CheckBox es的列表示该属性的“布尔状态” 型号。例如:

public class ToDoTask {

    private final StringProperty name = new SimpleStringProperty(this, "name");
    private final BooleanProperty complete = new SimpleBooleanProperty(this, "complete");

    // constructors, getters, setters, and property-getters omitted for brevity
}

用于显示该类的TableView可以如下配置:

TableView<ToDoTask> table = new TableView<>();
table.setItems(...);

TableColumn<ToDoTask, String> nameCol = new TableColumn<>("Name");
nameCol.setCellValueFactory(features -> features.getValue().nameProperty());
table.getColumns().add(nameCol);

TableColumn<ToDoTask, Boolean> completeCol = new TableColumn<>("Complete");
completeCol.setCellValueFactory(features -> features.getValue().completeProperty());
completeCol.setCellFactory(CheckBoxTableCell.forTableColumn(completeCol));
table.getColumns().add(completeCol);

然后您将通过访问模型查询任务是否完成:

table.getItems().get(...).isComplete();

设置cellValueFactory的另一种方法是向Callback本身注册CheckBoxTableCell。参见CheckBoxTableCell#forTableColumn(Callback)


还要注意,getCellObservableValue()返回一个ObservableValueCheckBox不是ObservableValue。如果您没有收到null,则会得到ClassCastException