java - 如何在javafx中定位窗口舞台?
问题描述
我做了一个简单的游戏,当它结束时,它会显示一个Stage
带有一些信息的新游戏:
public static void d(String m){
Stage stage = new Stage();
stage.setTitle("GAME FINISHED");
Label label = new Label(m);
label.setTextFill(Color.PURPLE);
label.setFont(new Font("Cambria",14));
Button button = new Button("Close");
VBox vb = new VBox();
button.setOnAction(e-> p.close());
vb.getChildren().addAll(label,button);
vb.setSpacing(50);
vb.setPadding(new Insets(5,0,0,12));
Scene scene = new Scene(v,200,300);
stage.setScene(scene);
stage.setResizable(false);
stage.showAndWait();
}
我不希望这个窗口显示在屏幕中间,因为它隐藏了一些游戏内容。是否可以显示不在屏幕中间的舞台?
解决方案
您可以使用stage.setX()和stage.setY()方法手动设置窗口位置:
// create and init stage
stage.setX(200);
stage.setY(200);
stage.showAndWait();
如果要根据屏幕尺寸计算位置,可以使用以下方法获取尺寸:
Rectangle2D bounds = Screen.getPrimary().getVisualBounds();
如果你想使用stage.getWidth()
或stage.getHeight()
计算你必须展示舞台之前的位置:
stage.show();
Rectangle2D bounds = Screen.getPrimary().getVisualBounds();
double x = bounds.getMinX() + (bounds.getWidth() - scene.getWidth()) * 0.3;
double y = bounds.getMinY() + (bounds.getHeight() - scene.getHeight()) * 0.7;
stage.setX(x);
stage.setY(y);
在这种情况下,您应该使用stage.show()
而不是stage.showAndWait()
.
推荐阅读
- c - 如何从数字末尾截断 0?
- c# - 在这种情况下如何选择 IFRAME 2。C# 硒?
- c++ - MS Visual Studio 可以使用 C++/CLI 或 MFC 来创建 Windows GUI 应用程序,C++ Builder (RAD Studio) 使用什么?
- haskell - 如何在 Haskell 中找到两个列表的交集?
- java - 如何保留 Android Keystore 的主密钥的备份或从用户输入创建?
- c# - 如何按顺序而不是并行等待 C# 任务?
- browserify - 使用 fs.mkdir 创建后端文件
- python - 如何在 python 虚拟环境中安装非 python 软件?
- outlook - Microsoft Flow + 将电子邮件发送到共享邮箱时代表用户获取姓名
- c++ - 为什么“If GetAsyncKeyState”会无限发送 Button?