Ste*_*her 2 treeview javafx 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;
}
Run Code Online (Sandbox Code Playgroud)
如果您不需要监听器,请不要定义监听器.听起来你只是需要
private CampaignObject getLeadSelect(){
TreeItem<CampaignObject> selectedItem = campTree.getSelectionModel().getSelectedItem();
return selectedItem == null ? null : selectedItem.getValue() ;
}
Run Code Online (Sandbox Code Playgroud)
如果您启用了多个选择并想要选择的模型对象列表,请执行此操作
private List<CampaignObject> getAllSelected() {
return campTree.getSelectionModel().getSelectedItems()
.stream()
.map(TreeItem::getValue)
.collect(Collectors.toList());
}
Run Code Online (Sandbox Code Playgroud)
如果要将所选项目视为模型对象,可以执行以下操作:
ObjectProperty<CampaignObject> selectedCampaign = new SimpleObjectProperty<>();
selectedCampaign.bind(Bindings.createObjectBinding(() -> {
TreeItem<CampaignObject> selectedItem = campTree.getSelectionModel().getSelectedItem();
return selectedItem == null ? null : selectedItem.getValue();
}, campTree.getSelectionModel().selectedItemProperty()));
Run Code Online (Sandbox Code Playgroud)
然后你可以做的事情
selectedCampaign.addListener((obs, oldCampaign, newCampaign) -> {
// ...
});
Run Code Online (Sandbox Code Playgroud)