如何删除 JFrame 中的标题栏

IT小君   2021-10-22T03:06:32

我正在使用以下代码进行练习,

http://docs.oracle.com/javase/tutorial/uiswing/examples/layout/BorderLayoutDemoProject/src/layout/BorderLayoutDemo.java

我也加

frame.setSize(frame.getMaximumSize());

在 createAndShowGUI() 方法中,

更重要的是我希望这个窗口没有标题栏、关闭和最小化按钮。

我尝试了以下代码,

frame.setUndecorated(true);
  frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

如果我在 pack() 之前添加了此代码,它会进入 infine 循环,并在线程“AWT-EventQueue-0”java.lang.NegativeArraySizeException 中出现此异常异常

如果我添加了 createAndShowGUI() 方法的最后一行,它会在线程“AWT-EventQueue-0”中抛出异常 java.awt.IllegalComponentStateException: The frame is displayable。

我该怎么办 ?

谢谢。

评论(2)
IT小君

标题栏可以通过调用被移除setUndecorated(true)FrameJFrame实例,即通过设置“未修饰的”属性true这将删除标题栏周围的框架。

这是问题所需的代码:

frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Already there
frame.setExtendedState(JFrame.MAXIMIZED_BOTH);
frame.setUndecorated(true); // <-- the title bar is removed here

在一个包装好的 JFrame

setUndecorated(true)必须在pack()被直接或间接调用之前调用,例如通过setVisible(true)

显然在执行打包后无法删除标题栏,这是以下文档Frame#setDecorated(boolean)

一个框架可以用 关闭它的原生装饰(即框架和标题栏)setUndecorated这只能在框架不可显示时完成。该方法将抛出一个运行时异常:IllegalComponentStateException如果框架是可显示的。

但是,你可以调用Window#dispose()FrameJFrame,然后重新包装一下,这会导致部件的布局内JFrame被刷新。

2021-10-22T03:06:32   回复
IT小君

好吧,以下代码片段createAndShowGUI()对我有用:

JFrame frame = new JFrame("BorderLayoutDemo");
frame.setUndecorated(true); // Remove title bar
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
addComponentsToPane(frame.getContentPane());
frame.pack();
frame.setVisible(true);

请注意,我不确定您要通过手动将未实现帧的大小设置为其最大大小((0, 0)最初是)来实现什么

2021-10-22T03:06:32   回复