Я пытаюсь создать ContextMenu, который появляется в середине экрана всякий раз, когда нажимается кнопка выхода на клавиатуре. Я хочу использовать его для обработки загрузки, сохранения и выхода из моей игры. Он будет вызываться из классов за пределами Main.
Проблема в том, что я не знаю, как узнать высоту и ширину ContextMenu в пикселях. поэтому я не понимаю, как центрировать его в окне. Я пытаюсь использовать Rectangle2D, чтобы найти центр, но он все еще немного смещен.
Как мне отобразить контекстное меню в центре экрана?
Отображает мое 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;
}
Метод класса Organizer 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;
}
Node
в качестве привязки и иметь изображение в качестве изображенияMenuItem
, как и вы. Может быть, это поможет, если вы опубликуете скриншот проблемы; бонус, если вы включите графику, показывающую, где вы хотите, чтобыContextMenu
был на самом деле. Возможно, то, что я считаю центрированным, не совсем то же самое, что вы считаете центрированным. - person Slaw   schedule 16.12.2018