Java 教程是为 JDK 8 编写的。本页中描述的示例和实践未利用在后续版本中引入的改进。
使用 Microsoft DirectX API 的程序员可能已经熟悉全屏独占模式。其他程序员可能对这个概念有些新意。在任何一种情况下,全屏独占模式都是 J2SE™ 1.4 版的强大功能,它允许程序员暂停窗口系统,以便可以直接在屏幕上完成绘图。
这在很多方面都与通常的 GUI 程序略有不同。在传统的 Java GUI 程序中,AWT 负责从操作系统,event dispatch thread (事件调度线程) 传播 paint events (绘制事件),并调用 AWT 的 Component.paint 适当的方法。在全屏独占应用中,绘画通常由程序本身主动完成。另外,传统的 GUI 应用程序仅限于用户选择的屏幕的位深度和大小。在全屏独占应用程序中,程序可以控制屏幕的位深度和大小(display mode (显示模式))。最后,在某些平台上,许多更高级的技术,例如 page flipping (页面翻转)(下面讨论)和立体缓冲(利用为每只眼睛使用一组单独的帧的系统),首先需要应用程序在全屏独占模式。
要了解全屏独占模式 API,你需要了解硬件加速图像的一些基本原理。VolatileImage 接口封装了可能利用或不利用硬件加速的 surface。这些 surface 可能在操作系统的命令下失去其硬件加速或其内存(因此,名称为“volatile”)。有关易失性图像的更多信息,请参阅 VolatileImage
Tutorial(即将推出)。
全屏独占模式通过 java.awt.GraphicsDevice 对象处理。有关所有可用屏幕图形设备的列表(在单显示器系统或多显示器系统中),可以在本地 java.awt.GraphicsEnvironment 上调用方法 getScreenDevices;对于默认(主)屏幕(单显示器系统上的唯一屏幕),你可以调用方法 getDefaultScreenDevice。
拥有图形设备后,可以调用以下方法之一:
以下是有关使用全屏独占模式进行编程的一些提示:
GraphicsDevice myDevice; Window myWindow; try { myDevice.setFullScreenWindow(myWindow); ... } finally { myDevice.setFullScreenWindow(null); }