【问题标题】:AnchorPane shows a white border when setResizable is false (JavaFX)当 setResizable 为 false (JavaFX) 时,AnchorPane 显示白色边框
【发布时间】:2013-01-23 10:17:16
【问题描述】:

我的问题是,当我使用 setResizable(false) 时,我的场景中会显示一个白色边框。 当我不将其设置为 false 时可以正常工作,但我需要将其设置为 false。

代码:

 Scene scene = new Scene(new StackPane());  

        LoginManager loginManager = new LoginManager(scene);
        loginManager.showLoginScreen();
        primaryStage.setResizable(false);
        primaryStage.setScene(scene);
        primaryStage.show();

我的 ImageView 在我的 AnchorPane 内

<AnchorPane id="AnchorPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="600.0" prefWidth="900.0" xmlns:fx="http://javafx.com/fxml" fx:controller="br.com.facilit.target.app.desktop.view.MainViewController">
  <children>
    <ImageView id="background" fitHeight="600.0" fitWidth="900.0" pickOnBounds="true">
      <image>
        <Image url="@../images/background.jpg" preserveRatio="true" smooth="true" />
      </image>

【问题讨论】:

  • 你的根节点是 FXML 中的 Anchorpane,那么为什么你在代码中创建 StackPane 作为 root 呢?
  • 没关系,我还是一样的问题
  • 嗨,我也有同样的问题,它记得我滚动条所需的空间。

标签: java javafx-2 javafx


【解决方案1】:

在尝试了太多东西之后,我发现了如何解决它。

我不知道为什么,但是当您将 resible 设置为 false 时,屏幕会自动在下方和右侧获得额外的空间。要解决此问题,您应该将图像背景设置为大于屏幕宽度和高度,例如,如果您在锚窗格中使用 900x600,则应将图像设置为 920x620。

还有一次,我不知道为什么会这样,但这是我发现的唯一一种不使用 css 修复它的方法。

【讨论】:

  • 我找到了更好的解决方案。检查我的答案。
【解决方案2】:

我遇到了同样的问题,我是这样解决的:

primaryStage.setScene(scene);

primaryStage.setWidth(900);
primaryStage.setHeight(600);
primaryStage.setResizable(false);

primaryStage.show();

您必须在设置可调整大小属性之前设置场景并手动设置宽度/高度。这解决了我的问题。

【讨论】:

    【解决方案3】:
    1. 将 maxSize() 和 minSize 设置为图像的大小:

      Scene scene = new Scene(new StackPane());  
      
      private final static double IMG_WIDTH = 900d;
      private final static double IMG_HEIGHT = 600d;
      
      LoginManager loginManager = new LoginManager(scene);
      loginManager.showLoginScreen();
      
      primaryStage.setResizable(false);
      primaryStage.setMaxWidth(IMG_WIDTH);
      primaryStage.setMaxHeight(IMG_HEIGHT);
      primaryStage.setMinWidth(IMG_WIDTH);
      primaryStage.setMinHeight(IMG_HEIGHT);
      
      primaryStage.setScene(scene);
      primaryStage.show();
      
    2. 检查图像的大小,如果它真的是 900x600。

    【讨论】:

    • 我照你说的做了,但还是一样。
    【解决方案4】:

    使用这个解决方案,但它只适用于 jdk8

      Stage.sizeToScene();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      相关资源
      最近更新 更多