【问题标题】:How to set a JavaFX Stage/Frame to Maximized如何将 JavaFX 阶段/框架设置为最大化
【发布时间】:2011-10-15 10:12:42
【问题描述】:

我正在使用 JavaFX 2。我希望我的框架以最大化方式打开,但我没有看到任何方法。我在互联网上搜索了一下没有成功。对于舞台,我看到了setFullScreen()setIconified(),但我没有看到像setMaximized() 这样的东西。

【问题讨论】:

    标签: frame stage javafx-2 maximize-window


    【解决方案1】:

    Stage类的Java 8实现提供了一个最大化属性,可以设置如下:

    primaryStage.setMaximized(true);
    

    【讨论】:

    • 如果上面的代码仍然不起作用的情况下的一个小补充 - 在调用 show() 之后调用 setMaximized()。
    • @AramParonikyan 我对上面的代码有疑问。但是,就像您提到的那样,单独调用 show() 并不能解决问题。我首先尝试使用stage.hide(); 隐藏舞台,然后使用stage.setMaximized(true); 隐藏舞台,然后我致电stage.show(); 并解决了它。但无论如何感谢您的提示! :)
    • @Kami :) 非常奇怪的做法,Kami,也许问题出在操作系统环境中?我的是带有最新 Oracle Java8 的 Ubuntu
    • @AramParonikyan 我也在使用 Ubuntu,问题只发生在 ubuntu 上。 JavaFX 在 Windows 上运行没有问题。也许 Oracle 的下一次更新可以解决这个问题。 :)
    • 嘿,这不是一个答案,因为如果舞台的样式设置为 DECORATED 和 UTIL 以外的其他值,这将不起作用
    【解决方案2】:

    在评估JavaFX 2.0 SDK示例提供的Ensemble.jar的源代码时,目前实现窗口最大化的有效方法是

    Screen screen = Screen.getPrimary();
    Rectangle2D bounds = screen.getVisualBounds();
    
    primaryStage.setX(bounds.getMinX());
    primaryStage.setY(bounds.getMinY());
    primaryStage.setWidth(bounds.getWidth());
    primaryStage.setHeight(bounds.getHeight());
    

    (您可以在 WindowButtons.java 中找到类似的代码)

    “最大化”按钮仍处于启用状态,单击它时,窗口会变大一点(Windows 操作系统)。在此之后,“最大化”按钮被禁用。在提供的示例中,标准按钮被替换。也许这仍然是一个问题。

    【讨论】:

    • 我同意。这看起来像一个问题。但是谢谢。这暂时可以使用。
    • 有一个针对 javafx-jira.kenai.com/browse/RT-10376 的功能请求——您可能想投票支持它,以便尽快完成它。
    • 虽然这似乎是我们目前能做的最好的事情,但这种方法存在很多问题。例如,它缺乏可靠地判断窗口是否最大化的能力(因此它可以在会话管理中保存/恢复),并且它也不能轻松地与多个屏幕一起工作。您必须遍历Screen.getScreens() 并找到窗口所在的那个。 JavaFX 在很多方面都像 Swing 一样 :-)
    • PS:撤消最大化也不容易,因为它似乎很难跟踪它何时发生(我唯一能想到的就是听宽度和高度的变化并检查它是否似乎是全尺寸——加上减去 Windows 喜欢添加的部分。买家要小心。
    • 这在技术上也不是最大化模式。它只是一个未最大化的窗口,即屏幕大小。
    【解决方案3】:

    更好地使用多屏兼容最大化逻辑:

    // Get current screen of the stage      
    ObservableList<Screen> screens = Screen.getScreensForRectangle(new Rectangle2D(stage.getX(), stage.getY(), stage.getWidth(), stage.getHeight()));
    
    // Change stage properties
    Rectangle2D bounds = screens.get(0).getVisualBounds();
    stage.setX(bounds.getMinX());
    stage.setY(bounds.getMinY());
    stage.setWidth(bounds.getWidth());
    stage.setHeight(bounds.getHeight());
    

    【讨论】:

    • 与另一个答案一样,这不是最大化的;它与屏幕大小相同。
    【解决方案4】:

    试试这个更简单的代码 primaryStage.setMaximized(true); 它填满了整个屏幕 .请注意,如果您删除最大化/最小化按钮,该应用程序将填满整个屏幕并删除任务栏,因此请记住您的 initStyles(如果有)

    【讨论】:

    • 将此与兼容多屏的最大化逻辑结合起来解决全屏问题。先setMaximized,再用getVisualBounds设置舞台的X、Y、宽高。
    【解决方案5】:

    使用它来删除最小化、最大化按钮:

    primaryStage.initStyle(StageStyle.UTILITY);
    

    primaryStage 是您的 Stage 对象。

    【讨论】:

      猜你喜欢
      • 2015-01-14
      • 2021-03-15
      • 1970-01-01
      • 2016-11-09
      • 2023-04-11
      • 2017-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多