如何将JavaFX的舞台/框架设置为最大化

44
我正在使用JavaFX 2。我希望我的窗体在打开时是最大化的,但我没找到该怎么做。我在网上搜索了一下但没有成功。对于舞台(Stage),我看到有setFullScreen()setIconified(),但我没有看到像setMaximized()这样的函数。
5个回答

156

Java 8版的Stage类提供了一个maximized属性,可以按以下方式设置:

primaryStage.setMaximized(true);

2
如果上面的代码仍然无法正常工作,可以进行一个小的修改 - 在调用show()之后调用setMaximized()。 - Aram Paronikyan
1
@AramParonikyan,我之前遇到了代码问题。但是像你提到的那样仅调用show()并不能解决这个问题。我先尝试使用stage.hide();隐藏舞台,然后使用stage.setMaximized(true);,最后再调用stage.show();,这样就解决了问题。不管怎样,还是谢谢你的提示! :) - Kami
@Kami :) Kami,这是非常奇怪的做法,也许问题出在操作系统环境上?我的是使用最新的Oracle Java8的Ubuntu。 - Aram Paronikyan
@AramParonikyan 我也在使用Ubuntu,问题只出现在Ubuntu上。JavaFX在Windows上没有问题。也许Oracle的下一个更新可以解决这个问题。 :) - Kami
嘿,这不是一个答案,因为如果舞台的样式设置为除了DECORATED和UTIL之外的其他值,它将无法工作。 - Amin
显示剩余2条评论

36

当评估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操作系统)。此后,'最大化'按钮将被禁用。 在提供的示例中,标准按钮被替换。也许这仍然是一个问题。


1
我同意。这似乎是一个问题。但感谢您。现在这样可以工作。 - Dorothy
有一个功能请求 http://javafx-jira.kenai.com/browse/RT-10376 -- 你可能想投票支持它,以便尽早完成。 - Sergey Grinev
虽然这似乎是我们现在所能做到的最好的,但是这种方法存在许多问题。例如,它缺乏可靠地告诉我们窗口是否被最大化(因此可以在会话管理中保存/恢复),而且它也不容易与多个屏幕一起工作。您必须迭代Screen.getScreens()并找到窗口所在的屏幕。JavaFX 在很多方面感觉像 Swing 一样 :-) - Peter Becker
PS:撤销最大化也不容易,因为似乎难以追踪何时发生(我能想到的唯一一件事是监听宽度和高度变化,并检查是否看起来是全尺寸——加上 Windows 喜欢添加的位。请谨慎购买。 - Peter Becker
8
这并不是严格的最大化模式,只是一个大小与屏幕相同但未最大化的窗口。 - crush
嗨,这个方法之前是可以用的,但现在突然就不行了。我没有改变最大化按钮的代码,但不知怎么回事它就停止工作了。 - Nikhil Mahajan

8
尝试使用这个更简单的代码:primaryStage.setMaximized(true);,它可以填满整个屏幕。请注意,如果您删除最大化/最小化按钮,则应用程序将填满整个屏幕,并删除任务栏,因此请注意您是否有任何initStyles

将此与多屏兼容的最大化逻辑相结合,以解决全屏问题。首先使用setMaximized,然后使用getVisualBounds来设置舞台的X、Y、宽度和高度。 - Bjørn Vårdal

7

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

// 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());

5
和另一个答案一样,这并没有被最大化,它只是和屏幕一样大小。 - GKFX

-7
使用此代码可以移除窗口的最小化和最大化按钮:
primaryStage.initStyle(StageStyle.UTILITY);

primaryStage是你的Stage对象。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接