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/

10-08 22:28