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);
    }

}

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

4

2 回答 2

1

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

在 JavaFX 的情况下,无论是用 hide() 方法隐藏窗口还是用 close() 方法关闭窗口,都无法再现 stage 的状态(当然除非你手动编程)。查看讨论 不幸的是,这就是 API 的创建方式。

于 2013-01-06T15:01:38.013 回答
0

无法完全理解问题。您能否更准确地说明您如何在秋千的同一位置显示窗口。

据我了解,关闭窗口后窗口出现在同一位置的唯一方法是使用 JFrame 的默认行为,即隐藏窗口(不退出)。而在 JavaFX 场景的情况下,您正在加载一个新资源,这就像从头开始打开一个新窗口一样。

另请注意,您可以将 Swing 与 JavaFX 集成。点击这里了解更多

于 2013-01-05T21:28:33.497 回答