我无法获取布尔值(布尔值),即是否选中了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());
答案 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()
返回一个ObservableValue
。 CheckBox
不是ObservableValue
。如果您没有收到null
,则会得到ClassCastException
。