我正在使用 JavaFX,我的应用程序有一个表,我可以向该表添加元素,但我想创建一个上下文菜单,当我右键单击该行时,它会显示在该行上。
我有什么...
在 Scene Builder 中,我有一个在激活上下文菜单时运行的方法,但这并不是我想要的。这真的很好,因为我可以随时以编程方式从表中获取所选项目。如果我保留当前拥有的内容,问题是让上下文菜单在所选元素处弹出。
contextMenu 是带有菜单项的上下文菜单。 connectedUsers 是 TableView
以下是我能得到的最接近的,但这显示了 TableView 底部的上下文菜单
contextMenu.show(connectedUsers, Side.BOTTOM, 0, 0);
最佳答案
我相信最好的解决方案是在 here 中讨论的.
table.setRowFactory(
new Callback<TableView<Person>, TableRow<Person>>() {
@Override
public TableRow<Person> call(TableView<Person> tableView) {
final TableRow<Person> row = new TableRow<>();
final ContextMenu rowMenu = new ContextMenu();
MenuItem editItem = new MenuItem("Edit");
editItem.setOnAction(...);
MenuItem removeItem = new MenuItem("Delete");
removeItem.setOnAction(new EventHandler<ActionEvent>() {
@Override
public void handle(ActionEvent event) {
table.getItems().remove(row.getItem());
}
});
rowMenu.getItems().addAll(editItem, removeItem);
// only display context menu for non-empty rows:
row.contextMenuProperty().bind(
Bindings.when(row.emptyProperty())
.then((ContextMenu) null)
.otherwise(rowMenu);
return row;
}
});
关于java - 一行 TableView 上的上下文菜单?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21009377/