【发布时间】:2013-11-07 20:12:27
【问题描述】:
在我的程序中,我有在普通窗口和全屏状态之间切换的方法:
public void setFullScreen(boolean enableFullScreen) {
Frame.fullScreen = enableFullScreen;
dispose();
if ( enableFullScreen ) {
getContentPane().setPreferredSize(resFull);
setSize(resFull);
setBounds(Frame.graphicsDev.getConfigurations()[0].getBounds().x, Frame.graphicsDev.getConfigurations()[0].getBounds().y, resFull.width, resFull.height);
//code for resizing components
setUndecorated(true);
setResizable(false);
} else {
getContentPane().setSize(resNormal);
getContentPane().setPreferredSize(resNormal);
//code for resizing components
setUndecorated(false);
setResizable(true);
}
pack();
setVisible(true);
}
resFull 和 resNormal 是维度变量。
当我在打开的普通窗口中单击 F11 时,它会更改全屏状态 (setFullScreen(!Frame.fullScreen)),但更改后它通常不会收到任何信号 - 我必须切换到其他应用程序然后返回此窗口 -然后就可以了。
【问题讨论】:
-
您要处理什么以及为什么要处理它? Dispose 用于删除您调用的任何内容。
-
@Radiodef:实际上 dispose 不是为了“删除”,而是为了释放原生资源。您绝对不想在显示顶级窗口之前对其进行处置,但调用
pack()和setVisible(true)应该会重新构成原生资源。 -
我不得不这样做,因为我想打电话给
setUndecorated()。 -
我忘了补充,这个方法在Frame类中。
-
MarPiRK:我没有听说过创建未装饰窗口的要求,但我通常也不创建这些。无论如何,您可能会遇到焦点问题,因为 KeyListener 要求它们侦听焦点组件。我自己,我尽量避免使用 KeyListeners 并尝试支持使用 Key Bindings。
标签: java awt fullscreen keylistener