我在这里的第一个问题,希望我能正确描述我的问题。
我现在面对的是我想为JFXTreeTableView的某些条目显示一个上下文菜单。因此,我创建了一个名为“ ProjectTreeItemWithContextMenuTreeTableTableFactory”的新cellFactory,该工厂处理基于mouseReleasedEvent的contextMenu的创建并显示它。
由于我没有10个声誉,因此我无法发布图片,但作为示例,我尝试描述一下它不起作用。如果我打开上下文菜单,它将显示在正确的位置。将鼠标悬停在菜单项上时,会显示菜单项,但不会在菜单旁边显示。 在菜单项和被悬停的菜单之间有时可能会有巨大的差异。 我注意到的是,仅当第一次将鼠标悬停在菜单上时才会出现此问题。如果在contextMenu保持打开状态下第二次悬停在菜单上,则所有内容都会正确显示。
private class TreeTableCallback extends TreeTableCell<T, ProjectTreeParentItemFX> {
@Override
protected void updateItem(ProjectTreeParentItemFX item, boolean empty) {
super.updateItem(item, empty);
if (item == null || empty) {
setText(null);
setGraphic(null);
setContextMenu(null);
} else {
this.setOnMouseReleased(evt -> handleMouseReleased(evt, item));
setText(item.getDisplayText());
}
}
将菜单和menuItem添加到contextMenu并显示菜单。
private void handleMouseReleased(MouseEvent evt, ProjectTreeParentItemFX item) {
if (evt.getButton().equals(MouseButton.SECONDARY)) {
setContentOfContextMenuBasedOnType(item);
contextMenu.show(getTreeTableRow(), evt.getScreenX(), evt.getScreenY());
}
}