全屏独家 Pattern
使用 Microsoft DirectX API 的程序员可能已经熟悉全屏独占 Pattern。其他程序员可能对该概念有些陌生。无论哪种情况,全屏独占 Pattern 都是 J2SE™1.4 版的强大功能,允许程序员暂停窗口系统,以便可以直接在屏幕上绘制图形。
从许多方面来看,这与通常的 GUI 程序相比都发生了微小的变化。在传统的 Java GUI 程序中,AWT 负责通过事件分发线程,并在适当时调用 AWT 的Component\.paint
方法,从 os 传播绘画事件。在全屏独家应用程序中,绘画通常是由程序本身主动完成的。此外,传统的 GUI 应用程序仅限于用户选择的屏幕的位深度和大小。在全屏独家应用程序中,该程序可以控制屏幕的位深度和大小(显示 Pattern)。最后,在某些平台上,许多更高级的技术,例如页面翻转(下面讨论)和立体声缓冲(利用每只眼睛使用一组独立帧的系统),要求应用程序首先处于全屏独占 Pattern。
硬件加速的图像基础
要了解全屏独占 PatternAPI,您需要了解硬件加速图像的一些基本原理。 VolatileImage
interface封装了可以或不可以利用硬件加速的表面。根据 os 的要求,此类表面可能会丢失其硬件加速或内存(因此,其名称为“ volatile”)。有关易失性图像的更多信息,请参见VolatileImage
教程(即将推出)。
全屏独占 Pattern 通过java\.awt\.GraphicsDevice
对象处理。有关所有可用的屏幕图形设备(在单显示器或多显示器系统中)的列表,可以在本地java\.awt\.GraphicsEnvironment
上调用方法getScreenDevices
;对于默认(主)屏幕(单显示器系统上的唯一屏幕),可以调用getDefaultScreenDevice
方法。
使用图形设备后,可以调用以下方法之一:
-
public boolean isFullScreenSupported\(\)
此方法返回全屏独占 Pattern 是否可用。在无法使用全屏独占 Pattern 的系统上,最好以固定大小的窗口 Pattern 运行应用程序,而不是设置全屏窗口。 -
public void setFullScreenWindow\(Window w\)
给定一个窗口,此方法使用该窗口进入全屏排他 Pattern。如果没有全屏独占 Pattern,则将窗口置于(0,0)并调整大小以适合屏幕。将此参数与null
参数一起使用可退出全屏独占 Pattern。
Programming Tips
以下是有关使用全屏独占 Pattern 进行编程的一些提示:
-
进入全屏独占 Pattern 之前,请检查
isFullScreenSupported
。如果不支持,则性能可能会降低。 -
使用
try\.\.\.finally
子句时,进入和退出全屏 Pattern 更加健壮。这不仅是良好的编码习惯,而且还使您的程序在全屏独占 Pattern 下停留的时间比应该的 Long:
GraphicsDevice myDevice;
Window myWindow;
try {
myDevice.setFullScreenWindow(myWindow);
...
} finally {
myDevice.setFullScreenWindow(null);
}
-
大多数全屏独家应用程序更适合于使用未装饰的窗口。使用
setUndecorated
方法关闭框架或对话框中的装饰。 -
全屏独占应用程序的大小不可调整,因为调整全屏应用程序的大小可能会导致不可预测(或可能危险)的行为。
-
出于安全原因,在 applet 中使用全屏独占 Pattern 时,用户必须授予
fullScreenExclusive
权限。