如何在Java中隐藏JFrame窗口的默认最小化/最大化和关闭按钮?

6
我想知道是否可以创建一个没有默认最大化/最小化(-)和关闭(x)按钮的JFrame窗口!我已经在每个窗口上添加了自定义按钮,以便用户不必去处理窗口右上角的默认按钮!

3
当然,现在他将不得不涉及您的自定义按钮,并修复微妙的可用性问题。 - millimoose
5个回答

5

使用JFrame.setDefaultLookAndFeelDecorated方法。虽然它可能不是您需要的确切内容,但文档中说明:

提供一个提示,指示新创建的 JFrames 是否应该由当前外观提供其窗口装饰(例如边框、关闭窗口的小部件、标题等)。

尝试以下代码:

JFrame frame = new JFrame("Example");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setSize(100, 100);
frame.setUndecorated(true);
frame.getRootPane().setWindowDecorationStyle(JRootPane.NONE);
frame.setVisible(true);

这将会移除整个标题栏。另外请参考此 线程。否则,请使用 JWindows

窗口的标题栏完全消失了,因此用户无法通过拖动标题栏移动窗口或调整窗口大小。 - Tony

5

1
setDefaultCloseOperations() 不会隐藏按钮,它只是改变了窗口关闭时应用程序的行为。 - millimoose
1
嗯,我发布了API链接,那么就不需要添加任何示例。 - mKorbel
1
@Xris 这是一个带有一个布尔型参数的方法,用法并不是很多。 - millimoose
另外,setUndecorated()会使整个窗口的标题栏和边框消失。这意味着您还需要重新实现窗口移动和调整大小的功能。 - millimoose
1
@mKorbel 任何未装饰窗口,都需要自定义实现整个标题栏。无论是 JWindow 还是设置标志为 true 的 JFrame,都是如此。(由于 EXIT_ON_CLOSEJFrame 确实更好作为根窗口。) - millimoose
显示剩余3条评论

0
frame.setUndecorated(true);
frame.getRootPane().setWindowDecorationStyle(JRootPane.NONE);

代码周围的一些评论会很好,但回答问题也不错。 - Michael Shopsin
设置窗口装饰样式似乎是不必要的。请参考文档:public void setWindowDecorationStyle(int windowDecorationStyle)设置 JRootPane 应提供的窗口装饰类型(例如边框、关闭窗口的小部件、标题等)。默认情况下,不提供任何窗口装饰(NONE)。 - Gee Bee

0
JFrame.setDefaultCloseOperation(frame.DO_NOTHING_ON_CLOSE);

将'X'按钮设为无效。对我来说很有效。

Not what was asked for. - EntangledLoops
只有一个选项适用于我。我有自己的关闭按钮和菜单来关闭应用程序,在那里需要检查额外的逻辑才能关闭应用程序。 - Tony

0
如果您正在使用Netbean,则只需在属性中取消选择可调整大小选项即可。这将仅禁用最小化/最大化按钮。

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