【发布时间】:2019-05-16 05:45:33
【问题描述】:
我正在尝试创建一个 ContextMenu,只要按下键盘的退出按钮,它就会出现在屏幕中间。我想用它来处理我的游戏中的加载、保存和退出。它将从 Main 之外的类中调用。
问题是我不确定如何找出 ContextMenu 的高度和宽度(以像素为单位)。所以,我不知道如何在窗口中居中。我正在尝试使用 Rectangle2D 来找到中心,但它仍然有点偏离。
如何在屏幕中间显示我的 ContextMenu?
显示我的 ContextMenu:
/**
* Returns the Pane object so it can be made into a Scene object.
* Each Scene has it's own class
* Each class uses this method to create a Pane object for it.
* @return Pane
*/
public Pane getPane() {
// create a GridPane object
grid = new GridPane();
// create ContextMenu and set anchor points.
ContextMenu cm = Main.Org.createPopUpMenu();
cm.setOnShowing(event -> {
event.consume();
cm.setAnchorX(cm.getAnchorX() - cm.getWidth() / 2.0);
cm.setAnchorY(cm.getAnchorY() - cm.getHeight() / 2.0);
});
Rectangle2D bounds = Screen.getPrimary().getVisualBounds();
// show ContextMenu if escape key is pressed.
grid.setOnKeyReleased( event -> {
if(event.getCode() == KeyCode.ESCAPE) {
cm.show(grid, bounds.getWidth() / 2.0, bounds.getHeight() / 2.0);
}
});
return grid;
}
组织者类createPopUpMenu()方法:
/**
* Creates a pop-up menu for saving, loading, and exiting the game
* @return ContextMenu
*/
public ContextMenu createPopUpMenu() {
ContextMenu contextMenu = new ContextMenu();
MenuItem menuItem = new MenuItem();
//create ImageViews
image = new ImageView("/images/PopUpMenu_Exit.png");
// add ImageViews to MenuItems
menuItem.setGraphic(image);
contextMenu.getItems().add(menuItem);
menuItem.setOnAction( a -> {
// quit the game
Platform.exit();
System.exit(0);
});
return contextMenu;
}
【问题讨论】:
-
请提供一个minimal reproducible example 来说明问题。
-
@kleopatra 你觉得可以添加什么来增强这个问题?我可以提供一个无需修改即可运行的代码示例,但它会是几百行代码。
-
几百行并不是“最少的” ;) 没有人愿意涉足大量不相关的代码,将精髓减少到 50 左右——这总是足以证明你所追求的要点和为什么结果不是你所期望的。
-
写完这样的例子你会更有经验:)
-
@kleopatra 我已经减少了我的示例,同时仍然使方法本身可以运行,尽管只要它们周围有其他代码。我还修改了 Slaw 建议的代码版本。如果我还能做些什么来改善这个问题,请告诉我。
标签: java javafx javafx-8 contextmenu gridpane