[英]Show ContextMenu via ENTER key on selected row 2nd column in TableView (JavaFX)
直到现在,我只用该代码按ENTER按钮后,就使contextMenu出现在TableView的框架中了; contextMenu.show(tableView, Side.RIGHT, 0, 0);
。 但是这样,上下文菜单仅在静态位置弹出。
我希望contextmenu动态显示,也就是说,每当用户在选定的行上按ENTER键时,contextmenu就会在第二行的选定行中显示:请查看下面的图片。
有这样的东西吗
contextMenu.show(tableView,x-SelectedRow2ndCol,y-SelectedRow2ndCol);
例如,如果选定的行是TableView的最后一行,因此其位置在屏幕的最下部,则contextmenu仍将在最后一行的上方弹出其所有项目。
lookupAll
可用于从TableView
获取所有TableRow
。 找到选定的一个,并获得一个tableColumn
与该列匹配的子TableCell
。 这将为您提供TableCell
。 使用show(Node anchor, Side side, double dx, double dy)
方法显示ContextMenu
。 这也可以使菜单保持在屏幕上。
从javadoc:
如果没有足够的空间,则将菜单移到另一侧,并且不应用偏移。
TableView
上的键侦听器的示例:
ContextMenu contextMenu = ...
TableColumn secondColumn = tableView.getColumns().get(1);
tableView.setOnKeyReleased(evt -> {
if (evt.getCode() == KeyCode.ENTER) {
Set<Node> rows = tableView.lookupAll(".table-row-cell");
Optional<Cell> n = rows.stream().map(r -> (Cell) r).filter(Cell::isSelected).findFirst();
if (n.isPresent()) {
Optional<Node> node = n.get().getChildrenUnmodifiable().stream()
.filter(c -> c instanceof TableCell && ((TableCell) c).getTableColumn() == secondColumn)
.findFirst();
if (node.isPresent()) {
Node cell = node.get();
Bounds b = cell.getLayoutBounds();
contextMenu.show(cell, Side.BOTTOM, b.getWidth() / 2, b.getHeight() / -2);
}
}
}
});
请注意,如果没有可见的选定表行,则此操作无效。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.