隐藏时保留JavaFX阶段位置

时间:2018-02-16 01:53:18

标签: java javafx

是否有一种简单的方法可以保留已被隐藏的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();
}

2 个答案:

答案 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());
    });

建立https://stackoverflow.com/a/48822302/600379