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的更多信息,请参阅全屏独占模式API教程。
- 参见:
-
Nested Class Summary
-
Field Summary
Modifier and TypeFieldDescriptionstatic final int
设备是一个图像缓冲区。static final int
设备是一个打印机。static final int
设备是一个光栅屏幕。 -
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionint
此方法返回此设备上加速内存中可用的字节数。返回通过GraphicsConfigTemplate
中定义的标准通过的“最佳”配置。abstract GraphicsConfiguration[]
返回与此GraphicsDevice
关联的所有GraphicsConfiguration
对象。abstract GraphicsConfiguration
返回与此GraphicsDevice
关联的默认GraphicsConfiguration
。返回此GraphicsDevice
的当前显示模式。返回此GraphicsDevice
可用的所有显示模式。如果设备处于全屏模式,则返回表示全屏窗口的Window
对象。abstract String
返回与此GraphicsDevice
关联的标识字符串。abstract int
getType()
返回此GraphicsDevice
的类型。boolean
如果此GraphicsDevice
支持低级显示更改,则返回true
。boolean
如果此GraphicsDevice
支持全屏独占模式,则返回true
。boolean
isWindowTranslucencySupported
(GraphicsDevice.WindowTranslucency translucencyKind) 返回此图形设备是否支持给定级别的透明度。void
设置此图形设备的显示模式。void
进入全屏模式,或返回窗口模式。
-
Field Details
-
TYPE_RASTER_SCREEN
public static final int TYPE_RASTER_SCREEN设备是一个光栅屏幕。- 参见:
-
TYPE_PRINTER
public static final int TYPE_PRINTER设备是一个打印机。- 参见:
-
TYPE_IMAGE_BUFFER
public static final int TYPE_IMAGE_BUFFER设备是一个图像缓冲区。该缓冲区可以驻留在设备或系统内存中,但用户无法直接查看。- 参见:
-
-
Constructor Details
-
GraphicsDevice
protected GraphicsDevice()这是一个无法直接实例化的抽象类。实例必须从适当的工厂或查询方法获取。- 参见:
-
-
Method Details
-
getType
public abstract int getType()返回此GraphicsDevice
的类型。- 返回:
-
此
GraphicsDevice
的类型,可以是TYPE_RASTER_SCREEN、TYPE_PRINTER或TYPE_IMAGE_BUFFER。 - 参见:
-
getIDstring
返回与此GraphicsDevice
关联的标识字符串。一个特定的程序可能在
GraphicsEnvironment
中使用多个GraphicsDevice
。此方法返回一个标识本地GraphicsEnvironment
中特定GraphicsDevice
的String
。虽然没有公共方法来设置此String
,但程序员可以将此String
用于调试目的。Java运行时环境的供应商可以格式化String
的返回值。要确定如何解释String
的值,请联系您的Java运行时环境的供应商。要找出供应商是谁,从您的程序中,使用System类的getProperty
方法调用"java.vendor"。- 返回:
-
一个标识此
GraphicsDevice
的标识字符串。
-
getConfigurations
返回与此GraphicsDevice
关联的所有GraphicsConfiguration
对象。- 返回:
-
与此
GraphicsDevice
关联的GraphicsConfiguration
对象数组。
-
getDefaultConfiguration
返回与此GraphicsDevice
关联的默认GraphicsConfiguration
。- 返回:
-
此
GraphicsDevice
的默认GraphicsConfiguration
。
-
getBestConfiguration
返回通过GraphicsConfigTemplate
中定义的标准通过的“最佳”配置。- 参数:
-
gct
- 用于获取有效GraphicsConfiguration
的GraphicsConfigTemplate
对象 - 返回:
-
符合指定
GraphicsConfigTemplate
中定义的标准的GraphicsConfiguration
。 - 参见:
-
isFullScreenSupported
public boolean isFullScreenSupported()如果此GraphicsDevice
支持全屏独占模式,则返回true
。如果安装了SecurityManager,则将调用其checkPermission
方法,其中包含AWTPermission("fullScreenExclusive")
。只有在授予该权限时,isFullScreenSupported
才返回true。- 返回:
- 此图形设备是否支持全屏独占模式
- 自:
- 1.4
- 参见:
-
setFullScreenWindow
进入全屏模式,或返回窗口模式。进入的全屏模式可以是独占的或模拟的。只有在isFullScreenSupported
返回true
时才可用独占模式。独占模式意味着:
- 窗口不能重叠全屏窗口。所有其他应用程序窗口将始终出现在全屏窗口下方的Z顺序中。
- 在设备上一次只能有一个全屏窗口,因此在存在现有全屏窗口时调用此方法将导致现有全屏窗口返回到窗口模式。
- 输入法窗口被禁用。建议调用
Component.enableInputMethods(false)
使组件成为输入法框架的非客户端。
模拟全屏模式将窗口放置并调整大小为屏幕的最大可见区域。但是,本机窗口系统可能会修改请求的几何相关数据,以便
Window
对象被放置和调整大小,以便与桌面设置紧密对应。进入全屏模式时,如果要用作全屏窗口的窗口不可见,则此方法将使其可见。在返回到窗口模式时,它将保持可见。
进入全屏模式时,所有透明效果都将重置为窗口。其形状设置为
null
,不透明度值设置为1.0f,背景颜色alpha设置为255(完全不透明)。返回窗口模式时,这些值不会恢复。装饰窗口在全屏模式下的操作是未指定的且依赖于平台。因此,建议通过使用
setUndecorated
方法在Frame
或Dialog
对象中关闭装饰。从独占全屏窗口返回到窗口模式时,通过调用
setDisplayMode
进行的任何显示更改都将自动恢复到其原始状态。- 参数:
-
w
- 用作全屏窗口的窗口;如果返回到窗口模式,则为null
。一些平台期望全屏窗口是顶级组件(即,Frame
);因此最好在这里使用Frame
而不是Window
。 - 自版本:
- 1.4
- 另请参阅:
-
getFullScreenWindow
返回表示设备处于全屏模式时的全屏窗口的Window
对象。- 返回:
-
全屏窗口,如果设备不处于全屏模式则为
null
。 - 自版本:
- 1.4
- 另请参阅:
-
isDisplayChangeSupported
public boolean isDisplayChangeSupported()如果此GraphicsDevice
支持低级显示更改,则返回true
。在某些平台上,低级显示更改可能仅允许在全屏独占模式下进行(即,如果isFullScreenSupported()
返回true
并且应用程序已经使用setFullScreenWindow(java.awt.Window)
进入全屏模式)。- 返回:
- 此图形设备是否支持低级显示更改。
- 自版本:
- 1.4
- 另请参阅:
-
setDisplayMode
设置此图形设备的显示模式。只有在isDisplayChangeSupported()
返回true
时才允许这样做,并且可能需要首先使用setFullScreenWindow(java.awt.Window)
进入全屏独占模式,前提是支持全屏独占模式(即,isFullScreenSupported()
返回true
)。显示模式必须是由
getDisplayModes()
返回的显示模式之一,有一个例外:传递具有DisplayMode.REFRESH_RATE_UNKNOWN
刷新率的显示模式将导致选择具有匹配宽度、高度和位深度的可用显示模式列表中的显示模式。但是,仅当getDisplayModes()
返回的列表中存在具有DisplayMode.BIT_DEPTH_MULTI
位深度的模式时,才允许传递具有DisplayMode.BIT_DEPTH_MULTI
位深度的显示模式。示例代码:
Frame frame; DisplayMode newDisplayMode; GraphicsDevice gd; // 创建一个Frame,从gd.getDisplayModes()返回的模式列表中选择所需的DisplayMode... if (gd.isFullScreenSupported()) { gd.setFullScreenWindow(frame); } else { // 在非全屏模式下继续 frame.setSize(...); frame.setLocation(...); frame.setVisible(true); } if (gd.isDisplayChangeSupported()) { gd.setDisplayMode(newDisplayMode); }
- 参数:
-
dm
- 此图形设备的新显示模式。 - 抛出:
-
IllegalArgumentException
- 如果提供的DisplayMode
为null
,或者不在getDisplayModes
返回的数组中可用 -
UnsupportedOperationException
- 如果isDisplayChangeSupported
返回false
- 自版本:
- 1.4
- 另请参阅:
-
getDisplayMode
返回此GraphicsDevice
的当前显示模式。返回的显示模式允许具有DisplayMode.REFRESH_RATE_UNKNOWN
刷新率,如果不确定的话。同样,返回的显示模式允许具有DisplayMode.BIT_DEPTH_MULTI
位深度,如果不确定的话或者支持多个位深度。- 返回:
- 此图形设备的当前显示模式。
- 自版本:
- 1.4
- 另请参阅:
-
getDisplayModes
返回此GraphicsDevice
可用的所有显示模式。返回的显示模式允许具有DisplayMode.REFRESH_RATE_UNKNOWN
刷新率,如果不确定的话。同样,返回的显示模式允许具有DisplayMode.BIT_DEPTH_MULTI
位深度,如果不确定的话或者支持多个位深度。- 返回:
- 此图形设备可用的所有显示模式。
- 自版本:
- 1.4
-
getAvailableAcceleratedMemory
public int getAvailableAcceleratedMemory()此方法返回此设备上加速内存中可用的字节数。一些图像是按先到先服务的方式在加速内存中创建或缓存的。在某些操作系统上,此内存是有限资源。调用此方法并仔细安排图像的创建和刷新可能使应用程序最有效地利用该有限资源。
请注意,返回的数字是可用内存量的快照;某些图像可能仍然无法分配到该内存中。例如,根据操作系统、驱动程序、内存配置和线程情况,对于给定图像,报告的大小可能无法完全用于给定图像。有关与VolatileImage关联的ImageCapabilities
对象上的进一步查询方法,可用于确定特定VolatileImage是否已在加速内存中创建。- 返回:
- 加速内存中可用的字节数。负返回值表示此GraphicsDevice上的加速内存量不确定。
- 自版本:
- 1.4
- 另请参阅:
-
isWindowTranslucencySupported
返回此图形设备是否支持给定级别的半透明度。- 参数:
-
translucencyKind
- 一种半透明度支持 - 返回:
- 给定半透明度种类是否受支持
- 自版本:
- 1.7
-