0
我正在开发自定义TreeView对象。 我正在使用自定义cellFactory来提供我的TreeView的TreeCell对象。 这使我可以在各种单元上安装自定义上下文菜单,具体取决于它们显示的项目。防止从右键单击树视图单元格选择树单元格
但我对这种行为并不完全满意。
当左键点击单元格时,它被选中(OK) 但是,当右键点击单元格时,会显示上下文菜单(确定),但是单元格也会被选中。 (NOK)
我该如何改变这种行为?
我试图在树视图上实现一个eventFilter,以消耗该事件,如果它是一个右键单击但这不会改变任何东西,上述行为仍然适用。
addEventFilter(MouseEvent.MOUSE_CLICKED,
new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent event) {
if (event.getButton() == MouseButton.SECONDARY) {
event.consume();
}
}
});
setCellFactory(new Callback<TreeView<TreeDisplayable>, TreeCell<TreeDisplayable>>() {
@Override
public TreeCell<TreeDisplayable> call(
final TreeView<TreeDisplayable> treeView) {
return new TreeDisplayableTreeCell(owner, javaModel);
}
});
public class TreeDisplayableTreeCell extends TreeCell<TreeDisplayable> {
...
@Override
public void updateItem(TreeDisplayable item, boolean empty) {
super.updateItem(item, empty);
if (empty) {
setText(null);
setGraphic(null);
} else {
setText(getItem().treeViewString());
setGraphic(item.getPic());
if (getTreeItem().getParent() == null) {
// it means it's the root node
setContextMenu(new RootItemContextMenu(javaModel, owner));
} else {
setContextMenu(new TreeItemContextMenu(javaModel, owner,getTreeItem().getValue()));
}
}
}
}
在标准的Windows控件中,有一个属性用于启用右键单击选择,默认为false。看起来你的事件过滤器在这个过程中已经太晚了,你需要走上组件层次结构并找到执行选择的代码。 –