gpt4 book ai didi

java - TableView JavaFX 中的上下文菜单可见性

转载 作者:搜寻专家 更新时间:2023-11-01 03:54:06 26 4
gpt4 key购买 nike

我正在用 JavaFX 创建 TableView。我想在 tableView 中右键单击鼠标显示 Context Menu。所以我在表上添加了一个 EventHandler,如下所示:

    TableView tableView=new TableView();

EventHandler event = new EventHandler<MouseEvent>() {
@Override
public void handle(MouseEvent me) {
if (me.getButton() == MouseButton.SECONDARY) {
tableView.getContextMenu().show(tableView, me.getSceneX(), me.getSceneY());
}
}
};
tableView.addEventHandler(MouseEvent.MOUSE_CLICKED, event);

但我的问题是,无论我右键单击表格的任何部分,上下文菜单 都是可见的。

我想做的是,只有当我点击 TableView 中的任何行时,Context Menu 才应该可见。

即如果我单击 TableView 的任何行,我将如何在特定点获取 TableView 中的行号,以便我的 Context Menu 应该只可见。

最佳答案

我找到的最佳解决方案是检查 y 坐标是否在列标题的边界之外,然后明确显示菜单。

ContextMenu visibleMenu = null;
tableView.setOnMouseClicked((MouseEvent e) -> {
if (visibleMenu !=null) {
visibleMenu.hide();
visibleMenu = null;
}
if (e.getButton()==MouseButton.SECONDARY) {
double columnHeaderHeight = tableView.lookup(".column-header-background").getBoundsInLocal().getHeight();
if (e.getY()>columnHeaderHeight) {
visibleMenu = getContextMenu(); // build on the fly or use a prebuild menu
visibleMenu.show(tableView, e.getScreenX(), e.getScreenY());
} else {
// you could show a header specific context menu here
}
}
});

额外的好处是您可以使用上下文相关的项目即时构建上下文菜单(例如,只有在选择了某种类型的单元格时才会出现),或者像 setContextMenu 那样重复使用预构建的上下文菜单,由您决定.

关于java - TableView JavaFX 中的上下文菜单可见性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13984466/

26 4 0