当用户移动 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/