[英]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.