全屏独家 Pattern

使用 Microsoft DirectX API 的程序员可能已经熟悉全屏独占 Pattern。其他程序员可能对该概念有些陌生。无论哪种情况,全屏独占 Pattern 都是 J2SE™1.4 版的强大功能,允许程序员暂停窗口系统,以便可以直接在屏幕上绘制图形。

从许多方面来看,这与通常的 GUI 程序相比都发生了微小的变化。在传统的 Java GUI 程序中,AWT 负责通过事件分发线程,并在适当时调用 AWT 的Component\.paint方法,从 os 传播绘画事件。在全屏独家应用程序中,绘画通常是由程序本身主动完成的。此外,传统的 GUI 应用程序仅限于用户选择的屏幕的位深度和大小。在全屏独家应用程序中,该程序可以控制屏幕的位深度和大小(显示 Pattern)。最后,在某些平台上,许多更高级的技术,例如页面翻转(下面讨论)和立体声缓冲(利用每只眼睛使用一组独立帧的系统),要求应用程序首先处于全屏独占 Pattern。

硬件加速的图像基础

要了解全屏独占 PatternAPI,您需要了解硬件加速图像的一些基本原理。 VolatileImageinterface封装了可以或不可以利用硬件加速的表面。根据 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权限。