java.lang.Object java.awt.GraphicsDevice
public abstract class GraphicsDevice
GraphicsDevice
类描述可以在特定图形环境中使用的图形设备。这些设备包括屏幕和打印机设备。注意,在 GraphicsEnvironment
实例中可以有许多屏幕和许多打印机。每个图形设备都有一个或多个与之关联的 GraphicsConfiguration
对象。这些对象指定可以使用 GraphicsDevice
的不同配置。
在多屏幕环境中,GraphicsConfiguration
对象可用于在多屏幕上呈现组件。以下代码示例演示了如何在 GraphicsEnvironment
中针对每个屏幕设备的每个 GraphicsConfiguration
创建 JFrame
对象。
GraphicsEnvironment ge = GraphicsEnvironment. getLocalGraphicsEnvironment(); GraphicsDevice[] gs = ge.getScreenDevices(); for (int j = 0; j < gs.length; j++) { GraphicsDevice gd = gs[j]; GraphicsConfiguration[] gc = gd.getConfigurations(); for (int i=0; i < gc.length; i++) { JFrame f = new JFrame(gs[j].getDefaultConfiguration()); Canvas c = new Canvas(gc[i]); Rectangle gcBounds = gc[i].getBounds(); int xoffs = gcBounds.x; int yoffs = gcBounds.y; f.getContentPane().add(c); f.setLocation((i*50)+xoffs, (i*60)+yoffs); f.show(); } }
有关全屏独占模式 API 的更多信息,请参阅 Full-Screen Exclusive Mode API Tutorial。
字段摘要 | |
---|---|
static int |
TYPE_IMAGE_BUFFER 设备是图像缓冲区。 |
static int |
TYPE_PRINTER 设备是打印机。 |
static int |
TYPE_RASTER_SCREEN 设备是光栅屏幕。 |
构造方法摘要 | |
---|---|
protected |
GraphicsDevice() 这是一个无法直接实例化的抽象类。 |
方法摘要 | |
---|---|
int |
getAvailableAcceleratedMemory() 此方法返回此设备上加速内存中可用的字节数。 |
GraphicsConfiguration |
getBestConfiguration(GraphicsConfigTemplate gct) 返回通过了 GraphicsConfigTemplate 中定义的标准的可能“最佳”配置。 |
abstract GraphicsConfiguration[] |
getConfigurations() 返回与此 GraphicsDevice 关联的所有 GraphicsConfiguration 对象。 |
abstract GraphicsConfiguration |
getDefaultConfiguration() 返回与此 GraphicsDevice 关联的默认 GraphicsConfiguration 。 |
DisplayMode |
getDisplayMode() 返回此 GraphicsDevice 的当前显示模式。 |
DisplayMode[] |
getDisplayModes() 返回可用于此 GraphicsDevice 的所有显示模式。 |
Window |
getFullScreenWindow() 如果设备处于全屏模式,则返回表示全屏窗口的 Window 对象。 |
abstract String |
getIDstring() 返回与此 GraphicsDevice 关联的标识字符串。 |
abstract int |
getType() 返回此 GraphicsDevice 的类型。 |
boolean |
isDisplayChangeSupported() 如果此 GraphicsDevice 支持低层显示更改,则返回 true 。 |
boolean |
isFullScreenSupported() 如果此 GraphicsDevice 支持全屏独占模式,则返回 true 。 |
void |
setDisplayMode(DisplayMode dm) 设置此图形设备的显示模式。 |
void |
setFullScreenWindow(Window w) 进入全屏模式,或返回窗口化模式。 |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
字段详细信息 |
---|
public static final int TYPE_RASTER_SCREEN
public static final int TYPE_PRINTER
public static final int TYPE_IMAGE_BUFFER
构造方法详细信息 |
---|
protected GraphicsDevice()
方法详细信息 |
---|
public abstract int getType()
GraphicsDevice
的类型。
GraphicsDevice
的类型,可以是 TYPE_RASTER_SCREEN、TYPE_PRINTER 或 TYPE_IMAGE_BUFFER。
TYPE_RASTER_SCREEN
,
TYPE_PRINTER
,
TYPE_IMAGE_BUFFER
public abstract String getIDstring()
GraphicsDevice
关联的标识字符串。
在 GraphicsEnvironment
中,某个特定程序可能使用多个 GraphicsDevice
。此方法返回一个标识本地 GraphicsEnvironment
中特定 GraphicsDevice
的 String
。尽管没有设置此 String
的公共方法,但程序员仍然可以在调试时使用此 String
。JavaTM Runtime Environment 供应商可以格式化 String
的返回值。要确定如何解释 String
值,请与 Java Runtime 供应商联系。要查找谁是供应商,可以从程序中使用“java.vendor”调用 System 类的 getProperty
方法。
GraphicsDevice
标识的
String
。
public abstract GraphicsConfiguration[] getConfigurations()
GraphicsDevice
关联的所有
GraphicsConfiguration
对象。
GraphicsDevice
关联的
GraphicsConfiguration
对象的数组。
public abstract GraphicsConfiguration getDefaultConfiguration()
GraphicsDevice
关联的默认
GraphicsConfiguration
。
GraphicsDevice
的默认
GraphicsConfiguration
。
public GraphicsConfiguration getBestConfiguration(GraphicsConfigTemplate gct)
GraphicsConfigTemplate
中定义的标准的可能“最佳”配置。
gct
- 用于获取有效
GraphicsConfiguration
的
GraphicsConfigTemplate
对象
GraphicsConfigTemplate
中定义的标准的
GraphicsConfiguration
。
GraphicsConfigTemplate
public boolean isFullScreenSupported()
GraphicsDevice
支持全屏独占模式,则返回
true
。如果安装了 SecurityManager,则将使用
AWTPermission("fullScreenExclusive")
调用它的
checkPermission
方法。只有授权时
isFullScreenSupported
才会返回 true。
AWTPermission
public void setFullScreenWindow(Window w)
isFullScreenSupported
返回
true
时,独占模式才可用。
独占模式意味着:
Component.enableInputMethods(false)
,使组件成为非客户端的输入方法框架。 模拟的全屏模式将窗口大小调整为屏幕大小,并将它置于 (0,0)。
当进入全屏模式时,如果看不到作为全屏窗口使用的窗口,此方法将会使其可见。当返回到窗口化模式时,窗口仍将保持可见。
当从独占全屏窗口模式返回到窗口化模式时,任何调用 setDisplayMode
做出的显示更改都将自动恢复原状。
w
- 一个用作全屏窗口的窗口;如果返回到窗口化模式,则为
null
。一些平台希望全屏窗口成为顶层组件(即 Frame);因此这里最好使用 Frame,而不用 Window。
isFullScreenSupported()
,
getFullScreenWindow()
,
setDisplayMode(java.awt.DisplayMode)
,
Component.enableInputMethods(boolean)
,
Component.setVisible(boolean)
public Window getFullScreenWindow()
Window
对象。
null
。
setFullScreenWindow(Window)
public boolean isDisplayChangeSupported()
GraphicsDevice
支持低层显示更改,则返回
true
。某些平台可能只在全屏独占模式中允许低层显示更改(即如果
isFullScreenSupported()
返回
true
,且应用程序已经使用
setFullScreenWindow(java.awt.Window)
进入全屏模式)。
setDisplayMode(java.awt.DisplayMode)
public void setDisplayMode(DisplayMode dm)
isDisplayChangeSupported()
返回
true
时才允许此方法,假如支持全屏独占模式的话(即
isFullScreenSupported()
返回
true
),还可能要求首先使用
setFullScreenWindow(java.awt.Window)
进入全屏独占模式。
该显示模式必须是由 getDisplayModes()
返回的显示模式之一,只有一种情况例外:传递带有 DisplayMode.REFRESH_RATE_UNKNOWN
刷新率的显示模式时,将从带有匹配宽度、高度和位深的可用显示模式列表中选择一个显示模式。但是,只有在位深为 DisplayMode.BIT_DEPTH_MULTI
的显示模式存在于 getDisplayModes()
返回的列表中时,才能传递这种显示模式。
代码示例:
Frame frame;
DisplayMode newDisplayMode;
GraphicsDevice gd;
// create a Frame, select desired DisplayMode from the list of modes
// returned by gd.getDisplayModes() ...
if (gd.isFullScreenSupported()) {
gd.setFullScreenWindow(frame);
} else {
// proceed in non-full-screen mode
frame.setSize(...);
frame.setLocation(...);
frame.setVisible(true);
}
if (gd.isDisplayChangeSupported()) {
gd.setDisplayMode(newDisplayMode);
}
dm
- 此图形设备的新显示模式。
IllegalArgumentException
- 如果提供的
DisplayMode
为
null
,或者在
getDisplayModes
返回的数组中不可用
UnsupportedOperationException
- 如果
isDisplayChangeSupported
返回
false
getDisplayMode()
,
getDisplayModes()
,
isDisplayChangeSupported()
public DisplayMode getDisplayMode()
GraphicsDevice
的当前显示模式。如果返回的显示模式是不确定的,则允许它具有
DisplayMode.REFRESH_RATE_UNKNOWN
刷新率。同样,如果返回的显示模式是不确定的或者支持多个位深,则允许它具有
DisplayMode.BIT_DEPTH_MULTI
位深。
setDisplayMode(DisplayMode)
public DisplayMode[] getDisplayModes()
GraphicsDevice
的所有显示模式。如果返回的显示模式是不确定的,则允许它具有
DisplayMode.REFRESH_RATE_UNKNOWN
刷新率。同样,如果返回的显示模式是不确定的或者支持多个位深,则允许它具有
DisplayMode.BIT_DEPTH_MULTI
位深。
public int getAvailableAcceleratedMemory()
ImageCapabilities
对象,还有更多的查询方法,可用于确定是否在加速内存中创建一个特殊的 VolatileImage。
Image.flush()
,
ImageCapabilities.isAccelerated()