JavaFX Treeview 返回选定的项目

标签 javafx treeview selection

我想在 TreeView 中获取选择并返回相应的模型对象。所有关于这个的答案都表明这是用内部类或 lambda 表达式完成的。但是,当我这样做时,编译器提醒我变量必须(有效地)是最终的。我明白,为什么会这样,但我不知道解决问题。

注意:我实际上不确定,为什么这种情况首先需要一个监听器,因为我什至不想一直监听但在调用方法时得到结果。

    private CampaignObject getLeadSelect(){
    CampaignObject co = null;

    campTree.getSelectionModel().selectedItemProperty().addListener(
        new ChangeListener<TreeItem <CampaignObject>>() {
            @Override
            public void changed(ObservableValue<? extends TreeItem<CampaignObject>> observableValue, 
                    TreeItem<CampaignObject> oldItem, TreeItem<CampaignObject> newItem) {
                    co = newItem.getValue());
        }
    });

    return co;
}

最佳答案

如果您不需要监听器,请不要定义监听器。听起来你只需要

private CampaignObject getLeadSelect(){
    TreeItem<CampaignObject> selectedItem = campTree.getSelectionModel().getSelectedItem();
    return selectedItem == null ? null : selectedItem.getValue() ;
}

如果您启用了多项选择并且想要一个被选择的模型对象的列表,做

private List<CampaignObject> getAllSelected() {
    return campTree.getSelectionModel().getSelectedItems()
           .stream()
           .map(TreeItem::getValue)
           .collect(Collectors.toList());
}

如果你想观察选中的item作为模型对象,你可以这样做:

ObjectProperty<CampaignObject> selectedCampaign = new SimpleObjectProperty<>();
selectedCampaign.bind(Bindings.createObjectBinding(() -> {
    TreeItem<CampaignObject> selectedItem = campTree.getSelectionModel().getSelectedItem();
    return selectedItem == null ?  null : selectedItem.getValue();
}, campTree.getSelectionModel().selectedItemProperty()));

然后你可以做类似的事情

selectedCampaign.addListener((obs, oldCampaign, newCampaign) -> {
    // ...
});

关于JavaFX Treeview 返回选定的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37531533/

相关文章:

java - 使用 JavaFX8 3D 将两个球体与一个圆柱体连接起来

css - 如何使用钟形图标自定义 Angular Treeview 节点

javascript - 有什么方法可以获取文档选择的 x、y、w、h(JavaScript)?

JavaFX 视频在反复播放同一视频几个小时后出现卡顿

java - 在 JavaFX 中使用 Web 字体

JavaFX 正确缩放

c# - 识别TreeView中的所有父节点

c# - 文件系统 TreeView

javascript - 如何使用 Rangy 选择文本节点?

javascript - 在内容丰富的中设置选择开始和结束