java - 为什么重新开放后舞台大小和位置没有保持?

标签 java user-interface javafx javafx-2

当用户移动 Stage 并关闭它时,我想在屏幕上保留 Stage 的最后位置。在 Swing 中,如果我保留同一个窗口实例,它在移动、关闭和重新打开后将显示在相同的位置。为什么 Stage 总是显示在 JavaFX 中的相同位置?

检查下面我的代码示例:

aboutStage = new Stage();
aboutStage.setTitle("About " + Constants.APP_TITLE);
aboutStage.setResizable(false);
aboutStage.initModality(Modality.APPLICATION_MODAL);
aboutStage.initOwner(primaryStage);
aboutStage.initStyle(StageStyle.UTILITY);

Parent page = (Parent) FXMLLoader.load(
        AboutWindowController.class.getResource("about.fxml"));
Scene scene = new Scene(page);
aboutStage.setScene(scene);



miAbout.setOnAction(new EventHandler<ActionEvent>() {
    @Override
    public void handle(ActionEvent t) {
        Stage about = mainClass.getAboutStage();
        about.show();
    }
});

Swing代码示例:

public class SwingTest {

    public static void main(String[] args) {
        JFrame f = new JFrame();
        JButton b = new JButton("Show Dialog");
        final JDialog d = new JDialog(f);
        d.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
        d.setSize(300, 300);
        b.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                d.setVisible(true);
            }
        });
        JPanel p = new JPanel();
        p.add(b);
        f.add(p);
        f.pack();
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.setLocationRelativeTo(null);
        f.setVisible(true);
    }

}

如果您测试此代码,请打开对话框并移动它,然后关闭并重新打开它。您将看到对话框在重新打开时处于相同的状态。

最佳答案

在您的 SWING 实现中,您正在处理标记为不可显示的窗口。当您重新显示 JDialog 时,Swing API 会以与处理它时相同的状态创建它。查看Documentation

对于JavaFX,无论是用hide()方法隐藏窗口还是用close()方法关闭窗口,都无法重现舞台的状态(当然除非你手动编程)。查看Discussion 不幸的是,这就是创建 API 的方式。

关于java - 为什么重新开放后舞台大小和位置没有保持?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14176006/

相关文章:

Java 集合和映射

java - 3 个 JButton 无法触发 3 个绘制图像

java - 用 Java 创建简单的漫游人工智能?

java - 如何立即更换背景?

java - 是否可以在 Hibernate/JPA 中使用不可变字段?

python - 如何允许 Tkinter 从列表输入生成列表框

python - 用于 python 源的 Windows GUI 应用程序?

java - 如何将输入从 GUI 传递到客户端而不是服务器?

javafx - 如何在 JavaFX 中将 Pane 与另一个 Pane 绑定(bind)

JavaFX16 警告 : Unsupported JavaFX configuration: classes were loaded from 'unnamed module @***'