我有一个位于GridPane内的TreeView。某个功能要求用户选择TreeItem并单击屏幕上的按钮。完成与按钮关联的功能后,我希望焦点返回到先前在TreeView中选择的TreeItem。
在按钮操作结束时,我有:
TreeItem<String> selectedItem = [TreeItem that was last selected]
如何突出显示selectedItem
突出显示的TreeView?
TreeView或TreeItem都没有我可以使用的setSelected
方法。
答案 0 :(得分:5)
答案 1 :(得分:5)
选择项目:
TreeView treeView = ... ; // initialize this
TreeItem treeItem = ... ; // initialize this, too
MultipleSelectionModel msm = treeView.getSelectionModel();
// This line is the not-so-clearly documented magic.
int row = treeView.getRow( treeItem );
// Now the row can be selected.
msm.select( row );
即,从treeItem
获取treeView
的行,然后将行传递到treeView
'选择模型。
除此之外,可以改进TreeView
API以委托单个树项:
treeView.select( treeItem );
不幸的是,没有这样的方法。
答案 2 :(得分:0)
只需将(...)扩展到由马拉穆特(Malamut)对所选答案的评论,并加以澄清:
实际上,您不必执行两项操作(查找行,然后选择行)。效果很好:
tableView.getSelectionModel().select( treeItem );
但是,使用此方法或任何其他以编程方式设置选择的方法,如果树项未显示 ,这将只会失败。 “显示”与 visible 不同:一个节点可以显示但不可见,例如使用ScrollPane
,其中所涉及的树的一部分已被滚动出视图。
“显示”是指所讨论的TreeItem
的所有祖先,直到并包括根TreeItem
。目前似乎没有内置方法可以完成此操作(JavaFX 11)。因此,在尝试进行程序选择之前,通常需要执行以下操作:
for( TreeItem ti = treeItemToBeSelected; ti.getParent() != null; ti = ti.getParent() ){
ti.getParent().setExpanded( true );
}