在使框架可见后如何调用setUndecorated()?

问题描述 投票:0回答:6
在我的秋千应用程序中,我希望能够在装饰和未装饰之间切换而不重新创建整个框架。但是,API不允许我在框架后打电话

setUndecorated()

即使我打电话

setVisible(false)

isDisplayable()
仍然返回true。 API说,使框架不可放置的唯一方法是重新创建它。但是,我不想重新创建框架只是为了关闭一些标题栏。 我正在制作一个可以在全屏和窗口模式之间切换的全屏幕应用程序;它应该在维护状态时能够切换等等。
在可见框架后,我该怎么做?
    

您尝试调用

Frame.dispose()

然后更改它?我自己没有尝试过,但可能会起作用。

如果不是,那么您可以做的就是将框架一个无关紧要的部分,只有最小的钩子到最高级别的面板或面板,只需将它们移至新帧即可。所有的孩子都将跟随。
java swing fullscreen
6个回答
32
投票

你不能。当我试图实现同样的事情时,这是我的经验。

无论您将整个UI都放在框架中的一个面板中,都可以创建一个新框架并将该面板添加到框架中。工作不多。

像这样的东西:

// to start with JPanel myUI = createUIPanel(); JFrame frame = new JFrame(); frame.add(myUI); // .. and later ... JFrame newFrame = new JFrame(); newFrame.setUndecorated(); newFrame.add(myUI);


19
投票

dispose()

释放本机窗口资源。然后,您可以编辑诸如未装饰之类的属性,依此类推。然后致电

setVisible(true)

重新创建窗口资源,一切正常(所有的位置和所有零件都不会更改)
dispose();
setUndecorated(true/false);
setVisible(true);


14
投票
https://tvbrowser.svn.sourceforge.net/svnroot/tvbrowser/tvbrowser/trunk/tvbrowser/src/tvbrowser/ui/ui/mainframe/mainframe/mainframe.java,

in方法

switchFullscreenMode()
dispose();
...
setFullScreenWindow(...);
setUndecorated(true/false);
setBounds(mXPos, mYPos, mWidth, mHeight);
...
setVisible(true);

实际上,如果鼠标触摸侧面,还有更多的东西可以隐藏各种侧pan。

也请注意,您必须明确设置边界。

13
投票
在及时的dispose()附近都严重干扰了(),因为它们都依赖于操作系统的多个本机事件,如果窗口在该拆分秒内不可显示。

我不建议直接获取默认屏幕: GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();

使用屏幕,您的jframe当前正在启用:

setBounds(getGraphicsConfiguration().getBounds());
getGraphicsConfiguration().getDevice().setFullScreenWindow(this);

尽管目前相同,但它可能会在将来发生变化。
    

try:

dispose(); setUndecorated(true); setVisible(true);

检查一下。希望它会有所帮助!
    

韦尔,您将需要不同的框架实例。您也许可以在不重新创建框架的情况下移动框架的内容。这里的关键是使您的代码不依赖于特定的框架。无论如何,这都是一个基本的好习惯。

HERHE是如何制作

alt
 +
enter

进入全屏的代码,而无需条形模式,并最小化标题栏和开始栏:


3
投票

这不是答案,但是我也有同样的问题,不想复制。我尝试了:
private void toggleFullScreen() {
    // Get the default graphics device (screen)
    GraphicsDevice gd = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice();
    
    dispose();
    setUndecorated(true);
    gd.setFullScreenWindow(this);
    setExtendedState(MAXIMIZED_BOTH);
    setVisible(true);
}

框架出现一秒钟,然后消失。绝对不知道我在做什么错。

2
投票

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.