我想在屏幕中央制作一个JFXpopup,动态宽度为&高度。这就是我目前所拥有的:
这是应用程序的第一眼。要打开弹出窗口,我必须单击上下文菜单中的项目:
弹出窗口以x轴为中心,但显然不在y轴上。此外,当我调整舞台大小并重新打开弹出窗口时,大小不会改变。
现在有些代码:
contextMenu.getNewLeaf().setOnAction(event -> {
popup.setPopupContent(createRegistrationFormPane());
popup.setAutoFix(true);
double width = globals.getPrimaryStage().getWidth() / 1.5;
double height = globals.getPrimaryStage().getHeight() / 1.5;
System.out.println("stage - width: " + globals.getPrimaryStage().getWidth() + "height: " + globals.getPrimaryStage().getHeight());
System.out.println("width: " + width + " height: " + height);
popup.getPopupContent().setPrefWidth(width);
popup.getPopupContent().setPrefHeight(height);
double anchorX = (globals.getPrimaryStage().getWidth() - width) / 2;
double anchorY = (globals.getPrimaryStage().getHeight() - height) / 2;
popup.show(rootPane, JFXPopup.PopupVPosition.TOP, JFXPopup.PopupHPosition.LEFT, anchorX, anchorY);
item.getChildren().add(new TreeItem<>(new Twitter()));
contextMenu.freeActionListeners();
});
globals.getPrimaryStage()
返回舞台
rootPane
是......第一个窗格。
以下是system.out.println()
:
stage - width: 800.0height: 550.4000244140625
width: 533.3333333333334 height: 366.933349609375
stage - width: 1339.199951171875height: 684.7999877929688
width: 892.7999674479166 height: 456.5333251953125
正如您所看到的,这些值会发生变化,但弹出窗口的大小不会改变。
任何帮助将不胜感激。
答案 0 :(得分:0)
您可以使用initOwner()
方法将弹出窗口置于其父窗口中心,假设popup
是一个阶段:
popup.initOwner(globals.getPrimaryStage())
看起来每次调用操作时都会创建一个新的popup
,并根据primaryStage
大小设置大小。如果您希望它记住您自己的尺寸,则需要在popup
关闭时保留这些尺寸。
答案 1 :(得分:0)
首先,我注意到获得载物台高度包括顶栏(-[] X)。这就是为什么弹出窗口无法正确垂直居中的原因。为了解决这个问题,我添加了.getScene()
,然后添加了.getHeight()
。
第二,我现在将更改添加到以下内容: 我这样做是为了在单击按钮时创建弹出窗口。因此,除了制作1个jfxpopup之外,我只是重写指向弹出窗口的指针,然后让垃圾回收器完成其余的工作。
// Option add new leaf
CONTEXT_MENU.getNewLeaf().setOnAction(event -> {
popup = new JFXPopup();
try {
popup.setPopupContent((Region) UTIL
.getPopupView(UTIL.getView("view/application/popup/FormTest.fxml"), popup));
} catch (IOException e) {
e.printStackTrace();
}
popup.setAutoFix(true);
// Width & height of the popup
double width = GLOBALS.getPrimaryStage().getScene().getWidth() / 1.5;
double height = GLOBALS.getPrimaryStage().getScene().getHeight() / 1.5;
popup.getPopupContent().setPrefWidth(width);
popup.getPopupContent().setPrefHeight(height);
// X & y axis of the popup
double anchorX = (GLOBALS.getPrimaryStage().getScene().getWidth() - width) / 2;
double anchorY = (GLOBALS.getPrimaryStage().getScene().getHeight() - height) / 2;
popup.show(ROOT_PANE, JFXPopup.PopupVPosition.TOP, JFXPopup.PopupHPosition.LEFT, anchorX,
anchorY);
item.getChildren().add(new TreeItem<>(new Twitter()));
CONTEXT_MENU.freeActionListeners();
});
1个问题:当我说popup.hide()
时,是否删除该弹出窗口的实例?现在,我只是让垃圾收集器执行其操作。只是好奇。