【问题标题】:JavaFX: Have TilePane use full window width when switching scenesJavaFX:切换场景时让 TilePane 使用全窗口宽度
【发布时间】:2017-02-10 20:26:28
【问题描述】:

我想要一个跨越整个窗口宽度的TilePane。在没有任何特定设置的情况下设置我的StageSceneTilePane 窗口时,这将按预期工作。即使我设置tilePane.setPrefColumns(100) 时也是这种情况,即使我的屏幕宽度仅足以容纳 9 个图块。我没有手动为舞台设置任何大小。

当我的应用程序启动时,场景首先设置为宽度 1,然后是 320,然后是 1920(在 1920x1080 屏幕上启动时)。我正在运行 XMonad(平铺窗口管理器),这可能会导致窗口全屏显示之前的宽度为 320。

但是,在切换到另一个场景 (stage.setScene) 并再次切换回来后 - 重新使用旧场景或使用最初使用的相同代码构建新场景 - TilePane 的首选宽度(方式超过1920)用于设置场景和舞台的宽度。因此,上面提到的100 列是“显示的”,尽管屏幕的宽度仅足以容纳 9 列。

当手动调整窗口大小时,一切都会“迅速”恢复到预期值(在我的例子中是 1920)。

如何确保(重新)附加到舞台的场景以屏幕宽度呈现?如何触发虚假的“窗口大小调整”事件?如何使场景/窗格宽度取决于舞台宽度而不是相反?

我更喜欢也适用于多屏幕设置的解决方案。

【问题讨论】:

    标签: java user-interface javafx javafx-8


    【解决方案1】:

    假设所有场景都在同一个舞台上,你可以做的是

    GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
    
    stage.sceneProperty().addListener(e -> {        
        if(stage.getScene() == EnterSceneYouWantHere)
        {
            tilePane.setMaxWidth(gd.getDisplayMode().getWidth());                                                                                                                                 
            tilePane.setMaxHeight(gd.getDisplayMode().getHeight());
            tilePane.setMinWidth(gd.getDisplayMode().getWidth());                                                                                                                                 
            tilePane.setMinHeight(gd.getDisplayMode().getHeight());
        }
    });
    

    应该可以工作,但如果确实可以,但尚未测试它应该适用于多台显示器。

    【讨论】:

    • GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice(); 抛出 HeadlessException,即使在 stage.show() 之后(不改变场景)。
    • 这应该可以正常工作,我以前使用过那行特定的代码。试试这个Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); 并将gd 替换为screenSize
    【解决方案2】:

    对我来说真正有帮助的是为舞台分配初始 widthheight 值:

    stage.setWidth(800);
    stage.setHeight(600);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-11
      • 2020-03-23
      • 2023-03-31
      • 2016-04-13
      • 1970-01-01
      相关资源
      最近更新 更多