是否有一种简单的方法可以保留已被隐藏的JavaFX Stage
的位置?在Swing中,当Frame
被隐藏并再次显示时,它将保留隐藏时的位置和尺寸。有没有一种简单的方法可以在JavaFX中实现这种行为?
在我的应用程序中,我有一个带切换按钮的主窗口,它们与显示/隐藏辅助窗口有关。不幸的是,每次用户隐藏其中一个辅助窗口(使用切换按钮)时,如果用户试图再次显示它们,它们会再次在屏幕中央打开。
有什么简单的方法吗?
public static void main(final String[] args) {
Platform.startup(() -> {});
Platform.runLater(() -> testStagePos());
}
protected static void testStagePos() {
final BorderPane p = new BorderPane();
p.setCenter(new Label("Random label"));
p.setPadding(new Insets(100)); // Just so window isn't too small
final Stage popup = new Stage();
popup.setScene(new Scene(p));
final BorderPane cp = new BorderPane();
final ToggleButton b = new ToggleButton("Show popup");
b.setOnAction(e -> {
if (b.isSelected())
popup.show();
else
popup.hide();
});
cp.setPadding(new Insets(50));
cp.setCenter(b);
final Stage control = new Stage();
control.setScene(new Scene(cp));
control.show();
}
答案 0 :(得分:3)
如果您将任何初始位置设置为弹出窗口,则会在隐藏时保留其最后位置。
您必须更改的全部是在定义popup
后添加此内容:
popup.setX(50);popup.setY(50);
通过以下方式测试:
private static void testStagePos() {
final BorderPane p = new BorderPane();
p.setCenter(new Label("Random label"));
p.setPadding(new Insets(100)); // Just so window isn't too small
final Stage popup = new Stage();
popup.setScene(new Scene(p));
popup.setX(50);popup.setY(50); //set initial position
final BorderPane cp = new BorderPane();
final ToggleButton b = new ToggleButton("Show popup");
b.setOnAction(e -> {
if (b.isSelected()) {
popup.show();
b.setText("Hide popup");
} else {
System.out.println(popup == null );
popup.hide();
b.setText("Show popup");
}
});
cp.setPadding(new Insets(50));
cp.setCenter(b);
final Stage control = new Stage();
control.setScene(new Scene(cp));
control.show();
}
答案 1 :(得分:3)
在创建弹出窗口后立即添加。
popup.setOnShown((e) -> {
popup.setX(popup.getX());
popup.setY(popup.getY());
});