thisColumn.setCellFactory(new Callback<TreeTableColumn<Obj, String>, TreeTableCell<Obj, String>>() {
@Override
public TreeTableCell<Task, String> call(final TreeTableColumn<Task, String> param) {
JFXComboBox<String> jfxComboBox = new JFXComboBox<>();
jfxComboBox.setMinWidth(100.0);
jfxComboBox.setPrefWidth(100.0);
jfxComboBox.setItems(Class.profiles);
jfxComboBox.getSelectionModel().selectedItemProperty().addListener(new ChangeListener<String>() {
@Override
public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) {
/** N/A **/
}
});
final TreeTableCell<Task, Void> cell = new TreeTableCell<Task, Void>() {
HBox hBox = new HBox();
Boolean result = hBox.getChildren().addAll(jfxComboBox);
@Override
public void updateItem(Void item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setGraphic(null);
} else {
setGraphic(hBox);
}
}
};
return cell;
}
});
我目前正在尝试在TreeTableView中显示一个JFXComboBox(ComboBox),并使用当前代码对其进行添加。但是,在回调中,无法访问
jfxComboBox
所在的行。我注意到,如果我使用
TreeTableColumn.CellDataFeatures
而不是TreeTableColumn,它将使我可以访问所需的param.getValue()。getValue(),但是我无法返回TreeTableCell来显示我的jfxComboBox。关于如何实现此目标的任何建议?
PS:
我试图避免使用
.getSelectionModel().getSelectedItem()
,因为当我单击ComboBox时,我尚未选择当前行/可能不会在单击组合框之前选择任何行。但是我很想看看是否有一种方法可以触发jfxComboBox所在的父行的选择。 最佳答案
可以解决您的问题的示例:
myColumn.setCellFactory(factory -> new TreeTableCell<MyModel, String>(){
@Override
protected void updateItem(String item, boolean empty) {
super.updateItem(item, empty);
if(empty){
setText(null);
setGraphic(null);
return;
}
// if empty is false, then these references should not be null
MyModel myModel = getTreeTableRow().getItem();
TreeItem<MyModel> treeItem = getTreeTableRow().getTreeItem();
}
});
关于java - 从单元格内部获取TreeTableView行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48439543/