在JavaFX中以125%的比例更改场景时出现布局问题
当监视器缩放设置为125%时,我在更改场景为JavaFX后遇到布局问题 当缩放设置为100%时,一切正常 我正在使用JavaFX11.0.2 这是我的密码:在JavaFX中以125%的比例更改场景时出现布局问题,javafx,scale,Javafx,Scale,当监视器缩放设置为125%时,我在更改场景为JavaFX后遇到布局问题 当缩放设置为100%时,一切正常 我正在使用JavaFX11.0.2 这是我的密码: import javafx.application.Application; import javafx.geometry.Rectangle2D; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.image.Image;
import javafx.application.Application;
import javafx.geometry.Rectangle2D;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.StackPane;
import javafx.stage.Screen;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
public class App extends Application {
private Scene firstScene;
private Scene secondScene;
private Rectangle2D screenBounds = Screen.getPrimary().getBounds();
private final int backButtonSize = (int) (screenBounds.getWidth() / 50);
private Image image = new Image("https://imgur.com/download/uDlKu6Y");
@Override
public void start(Stage stage) {
Button forwardButton = new Button("Forward");
forwardButton.setOnAction(actionEvent -> stage.setScene(secondScene));
firstScene = new Scene(new StackPane(forwardButton));
Button backButton = new Button("Back");
backButton.setOnAction(actionEvent -> stage.setScene(firstScene));
backButton.setMinWidth(backButtonSize);
ImageView imageView = new ImageView(image);
imageView.setFitWidth(screenBounds.getWidth() - backButtonSize);
imageView.setFitHeight(screenBounds.getHeight());
imageView.setPreserveRatio(true);
secondScene = new Scene(new BorderPane(imageView, null, null, null, backButton));
stage.setX(screenBounds.getMinX());
stage.setY(screenBounds.getMinY());
stage.setWidth(screenBounds.getWidth());
stage.setHeight(screenBounds.getHeight());
stage.initStyle(StageStyle.UNDECORATED);
stage.setScene(firstScene);
stage.show();
}
}
我在stage中设置的第一个场景(stage.setScene(firstScene)
或stage.setScene(secondScene)
)看起来不错
但在单击按钮并更改场景(从forwardButton.setOnAction(…)
或backButton.setOnAction(…)
调用事件处理程序)后,布局被破坏
正常第一场景:
正常第二场景:
第一幕:
第二幕:
我将感谢任何帮助
另外,如果有人能建议一种方法,让ImageView
占据整个垂直空间,我也会非常感激。但现在它被认为是一个小得多的问题 编辑1: 我通过改变窗格而不是场景来解决问题。
但我仍然想知道为什么第一次尝试没有成功 以下是更新的代码:
import javafx.application.Application;
import javafx.geometry.Rectangle2D;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.Pane;
import javafx.scene.layout.StackPane;
import javafx.stage.Screen;
import javafx.stage.Stage;
import javafx.stage.StageStyle;
public class App extends Application {
private Scene scene;
private Pane firstPane;
private Pane secondPane;
private Rectangle2D screenBounds = Screen.getPrimary().getBounds();
private final int backButtonSize = (int) (screenBounds.getWidth() / 50);
private Image image = new Image("https://imgur.com/download/uDlKu6Y");
@Override
public void start(Stage stage) {
Button forwardButton = new Button("Forward");
forwardButton.setOnAction(actionEvent -> scene.setRoot(secondPane));
firstPane = new StackPane(forwardButton);
Button backButton = new Button("Back");
backButton.setOnAction(actionEvent -> scene.setRoot(firstPane));
backButton.setMinWidth(backButtonSize);
ImageView imageView = new ImageView(image);
imageView.setFitWidth(screenBounds.getWidth() - backButtonSize);
imageView.setFitHeight(screenBounds.getHeight());
imageView.setPreserveRatio(true);
secondPane = new BorderPane(imageView, null, null, null, backButton);
scene = new Scene(firstPane);
stage.setX(screenBounds.getMinX());
stage.setY(screenBounds.getMinY());
stage.setWidth(screenBounds.getWidth());
stage.setHeight(screenBounds.getHeight());
stage.initStyle(StageStyle.UNDECORATED);
stage.setScene(scene);
stage.show();
}
}
要将您的应用程序设置为未涂层全屏,请使用: 要测试它,请使用问题中发布的mre。
按125%的比例,它看起来像:
要将应用程序设置为未涂层全屏使用: 要测试它,请使用问题中发布的mre。
按125%的比例,它看起来像:
1。对于全屏模式,使用
stage.setMaximized(真)代码>。2.要使您的代码可供他人使用,请使用web资源。参见示例3。如何更改监视器刻度?@c0der 1。如果我使用setMaximized()
而不是setX()
,setY()
,setWidth()
和setHeight()
,我会得到一些奇怪的结果(任务栏显示在第二个场景中,第一个场景变得非常小)-请参见。2.固定的。3.它是由操作系统(在我的例子中是Windows)设置的,我不会在Java方面做任何更改。对于全屏模式,使用stage.setMaximized(真)代码>。2.要使您的代码可供他人使用,请使用web资源。参见示例3。如何更改监视器刻度?@c0der 1。如果我使用setMaximized()
而不是setX()
,setY()
,setWidth()
和setHeight()
,我会得到一些奇怪的结果(任务栏显示在第二个场景中,第一个场景变得非常小)-请参见。2.固定的。3.它是由操作系统(在我的例子中是Windows)设置的,我在Java方面没有做任何更改。这并不能修复第一个代码版本。我得到一些奇怪的结果:。这并不能修复第一个代码版本。我得到了一些奇怪的结果:。
//stage.setX(screenBounds.getMinX());
//stage.setY(screenBounds.getMinY());
//stage.setWidth(screenBounds.getWidth());
//stage.setHeight(screenBounds.getHeight());
//stage.initStyle(StageStyle.UNDECORATED);
stage.setFullScreen(true);