我一直在通过 GXT3 的 Tree
API 寻找某种方式来执行操作,当我单击或双击树中的节点时,我似乎找不到任何可行的方法。
我知道TreeGrid
有一个CellClickHandler
和CellDoubleClick
处理程序,但似乎没有类似的东西Tree
.从Widget
继承了通用addHandler
方法,但这似乎适用于整个树,而不是特定节点。
我是否忽略了什么,或者有不同/更好的方法来做到这一点?
使用TreePanel
的选择模型:
treePanel.getSelectionModel().addSelectionChangedListener(
new SelectionChangedListener<BaseTreeModel>() {
@Override
public void selectionChanged(SelectionChangedEvent<BaseTreeModel> se) {
BaseTreeModel selectedItem = se.getSelectedItem();
// implement functionality
}
}
);
有关参考,请参阅 TreePanel
API。
将其用于单选
tree.getSelectionModel().setSelectionMode(SelectionMode.SINGLE);
tree.getSelectionModel().addSelectionHandler(new SelectionHandler<MenuView.MenuDto>() {
public void onSelection(SelectionEvent<MenuDto> event) {
MenuDto mnu = event.getSelectedItem();
Info.display("Tree Handler", mnu.getDescripcion());
}
});
用于多个选择
tree.getSelectionModel().addSelectionChangedHandler(new SelectionChangedHandler<MenuView.MenuDto>() {
public void onSelectionChanged(SelectionChangedEvent<MenuDto> event) {
List<MenuDto> mnus = event.getSelection();
Info.display("Tree Handler", mnus.get(0).getDescripcion());
}
});
另一种选择是覆盖 Tree 的 onDoubleClick(或 onClick)方法:
Tree tree = new Tree<MyModel, String>(store, valueProvider){
@Override
protected void onDoubleClick(Event event) {
TreeNode<MyModel> node = findNode(event.getEventTarget().<Element> cast());
Info.display("Double Click", "You double clicked this node!");
super.onDoubleClick(event);
}
};
通了。这可以通过使用单元格操作树来实现,其实现可以在此处找到:http://www.sencha.com/examples/#ExamplePlace:cellactiontree