在我的Java桌面应用程序中,我有一个TableView,其中我想要一个带有CheckBox的列。
我确实发现这已经完成了http://www.jonathangiles.net/javafx/2.0/CellFactories/,但由于下载不可用,因为我不知道Jonathan Giles将如何回答我的电子邮件,我以为我会问…
如何将CheckBox放在TableView的单元格中?
解决方法
您需要在TableColumn上设置一个CellFactory。
例如:
Callback<TableColumn<TableData,Boolean>,TableCell<TableData,Boolean>> booleanCellFactory = new Callback<TableColumn<TableData,Boolean>>() { @Override public TableCell<TableData,Boolean> call(TableColumn<TableData,Boolean> p) { return new BooleanCell(); } }; active.setCellValueFactory(new PropertyValueFactory<TableData,Boolean>("active")); active.setCellFactory(booleanCellFactory); class BooleanCell extends TableCell<TableData,Boolean> { private CheckBox checkBox; public BooleanCell() { checkBox = new CheckBox(); checkBox.setDisable(true); checkBox.selectedProperty().addListener(new ChangeListener<Boolean> () { public void changed(ObservableValue<? extends Boolean> observable,Boolean oldValue,Boolean newValue) { if(isEditing()) commitEdit(newValue == null ? false : newValue); } }); this.setGraphic(checkBox); this.setContentDisplay(ContentDisplay.GRAPHIC_ONLY); this.setEditable(true); } @Override public void startEdit() { super.startEdit(); if (isEmpty()) { return; } checkBox.setDisable(false); checkBox.requestFocus(); } @Override public void cancelEdit() { super.cancelEdit(); checkBox.setDisable(true); } public void commitEdit(Boolean value) { super.commitEdit(value); checkBox.setDisable(true); } @Override public void updateItem(Boolean item,boolean empty) { super.updateItem(item,empty); if (!isEmpty()) { checkBox.setSelected(item); } } }