Welcome 微信登录

首页 / 软件开发 / JAVA / Merlin的魔力: 练习完全控制图形显示

Merlin的魔力: 练习完全控制图形显示2011-02-02 IBM John Zukowski您是否喜欢让程序搞一些恶作剧,让别人感到不舒服?如果您回答“是”,那么这个月的技巧文章一定对您的胃口。使用 J2SE 1.4,您的 Java 程序现在可以更改视频方式并获得对屏幕的绝对控制。您不必让别人随心所欲地玩电脑;您差不多可以拥有整个控制权。感谢新的全屏幕独占模式(FEM)API 为我们提供了这个无与伦比的强大功能。

即使您回答“不”,不想以惹恼他人来取乐,您也将发现 FEM API 提供了许多帮助。通过直接对显存进行写操作,FEM API 提供了对显示的完全控制 ― 这对于游戏开发来说十分理想,虽然还有许多其它应用。例如,一些程序只有用特定大小的屏幕看上去才更好,并且才能更好地工作。请继续读下去,以发掘您内心有关控制方面的奇思怪想。

更改显示方式

让我们先从研究 FEM API 的 java.awt.DislayMode 类开始,该类包装了特定显示方式的屏幕大小和刷新频率。受支持的方式特定于系统的硬件支持。

要找出特定系统的受支持方式,请查看 GraphicsEnvironment 。通过该环境,您可以获得缺省屏幕设备 GraphicDevice ,通过该屏幕设备可以获得显示方式,如清单 1 所示:

清单 1. 查找显示方式

GraphicsEnvironment graphicsEnvironment =
GraphicsEnvironment.getLocalGraphicsEnvironment();
GraphicsDevice graphicsDevice =
graphicsEnvironment.getDefaultScreenDevice();
DisplayMode displayModes[] =
graphicsDevice.getDisplayModes();

还可以使用 getDisplayMode() 方法获得当前的显示模式,如清单 2 所示:

清单 2. 获得当前的显示方式

DisplayMode originalDisplayMode =
graphicsDevice.getDisplayMode();

更改方式经证实相对容易些,但必须先利用 GraphicsDevice 的 isDisplayChangeSupported() 方法询问所涉及的图形设备是否支持更改。

一旦知道了这一点,要更改方式,使用 setDisplayMode() 方法,以传入新方式。显示方式更改一般在 try / finally 块中发生,以便于 finally 块将代码复位成初始方式。虽然该过程不是绝对必需的,但它可以确保在程序完成时有一个安全的方式。清单 3 显示了用于更改显示方式的典型模式:

清单 3. 更改方式

GraphicsDevice graphicsDevice = ...
DisplayMode originalDisplayMode = graphicsDevice.getDisplayMode();
DisplayMode newDisplayMode = ...
try {
if (graphicsDevice.isDisplayChangeSupported()) {
graphicsDevice.setDisplayMode(newDisplayMode);
}
} finally {
graphicsDevice.setDisplayMode(originalDisplayMode);
}