本教程是针对JDK 8编写的。本页中描述的示例和实践不利用后续版本中引入的改进,可能使用已不可用的技术。
有关Java SE 9及后续版本中更新的语言功能的摘要,请参阅Java语言变化。
有关所有JDK版本的新功能、增强功能和已删除或不推荐选项的信息,请参阅JDK发布说明。
使用Microsoft的DirectX API的程序员可能已经熟悉全屏独占模式。其他程序员可能对这个概念有些陌生。在任何情况下,全屏独占模式是J2SE™ 1.4版本的一个强大功能,它允许程序员暂停窗口系统,以便直接向屏幕绘图。
从很多方面来说,这是对传统GUI程序的一种轻微的范式转变。在传统的Java GUI程序中,AWT负责将操作系统的“绘制事件”通过“事件分发线程”传播,并在适当的时候调用AWT的Component.paint方法。在全屏独占应用程序中,绘制通常是由程序自己主动完成的。此外,传统的GUI应用程序仅限于用户选择的屏幕的位深度和大小。在全屏独占应用程序中,程序可以控制屏幕的位深度和大小(“显示模式”)。最后,许多更高级的技术,如“页面翻转”(下面讨论)和立体缓冲(利用每个眼睛使用的单独一组帧的系统)在某些平台上要求应用程序首先处于全屏独占模式。
要理解全屏独占模式的API,您需要了解一些硬件加速图像的基本原理。VolatileImage接口封装了一个可能利用硬件加速的表面。这些表面可能会在操作系统的要求下失去硬件加速或内存(因此被称为“易失性”)。有关易失性图像的更多信息,请参见VolatileImage教程(即将推出)。
全屏独占模式通过java.awt.GraphicsDevice对象处理。要获取所有可用的屏幕图形设备(在单个或多监视器系统中),可以调用本地java.awt.GraphicsEnvironment上的getScreenDevices方法;要获取默认(主)屏幕(单个监视器系统上的唯一屏幕),可以调用getDefaultScreenDevice方法。
一旦您拥有了图形设备,就可以调用以下方法之一:
这里有一些关于使用全屏独占模式进行编程的技巧:
GraphicsDevice myDevice; Window myWindow; try { myDevice.setFullScreenWindow(myWindow); ... } finally { myDevice.setFullScreenWindow(null); }