Module java.desktop
Package java.awt

Class GraphicsDevice

java.lang.Object
java.awt.GraphicsDevice

public abstract class GraphicsDevice extends Object
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教程

参见:
  • 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

  • Method Details

    • getType

      public abstract int getType()
      返回此GraphicsDevice的类型。
      返回:
      GraphicsDevice的类型,可以是TYPE_RASTER_SCREEN、TYPE_PRINTER或TYPE_IMAGE_BUFFER。
      参见:
    • getIDstring

      public abstract String getIDstring()
      返回与此GraphicsDevice关联的标识字符串。

      一个特定的程序可能在GraphicsEnvironment中使用多个GraphicsDevice。此方法返回一个标识本地GraphicsEnvironment中特定GraphicsDeviceString。虽然没有公共方法来设置此String,但程序员可以将此String用于调试目的。Java运行时环境的供应商可以格式化String的返回值。要确定如何解释String的值,请联系您的Java运行时环境的供应商。要找出供应商是谁,从您的程序中,使用System类的getProperty方法调用"java.vendor"。

      返回:
      一个标识此GraphicsDevice的标识字符串。
    • getConfigurations

      public abstract GraphicsConfiguration[] getConfigurations()
      返回与此GraphicsDevice关联的所有GraphicsConfiguration对象。
      返回:
      与此GraphicsDevice关联的GraphicsConfiguration对象数组。
    • getDefaultConfiguration

      public abstract GraphicsConfiguration getDefaultConfiguration()
      返回与此GraphicsDevice关联的默认GraphicsConfiguration
      返回:
      GraphicsDevice的默认GraphicsConfiguration
    • getBestConfiguration

      public GraphicsConfiguration getBestConfiguration(GraphicsConfigTemplate gct)
      返回通过GraphicsConfigTemplate中定义的标准通过的“最佳”配置。
      参数:
      gct - 用于获取有效GraphicsConfigurationGraphicsConfigTemplate对象
      返回:
      符合指定GraphicsConfigTemplate中定义的标准的GraphicsConfiguration
      参见:
    • isFullScreenSupported

      public boolean isFullScreenSupported()
      如果此GraphicsDevice支持全屏独占模式,则返回true。如果安装了SecurityManager,则将调用其checkPermission方法,其中包含AWTPermission("fullScreenExclusive")。只有在授予该权限时,isFullScreenSupported才返回true。
      返回:
      此图形设备是否支持全屏独占模式
      自:
      1.4
      参见:
    • setFullScreenWindow

      public void setFullScreenWindow(Window w)
      进入全屏模式,或返回窗口模式。进入的全屏模式可以是独占的或模拟的。只有在isFullScreenSupported返回true时才可用独占模式。

      独占模式意味着:

      • 窗口不能重叠全屏窗口。所有其他应用程序窗口将始终出现在全屏窗口下方的Z顺序中。
      • 在设备上一次只能有一个全屏窗口,因此在存在现有全屏窗口时调用此方法将导致现有全屏窗口返回到窗口模式。
      • 输入法窗口被禁用。建议调用Component.enableInputMethods(false)使组件成为输入法框架的非客户端。

      模拟全屏模式将窗口放置并调整大小为屏幕的最大可见区域。但是,本机窗口系统可能会修改请求的几何相关数据,以便Window对象被放置和调整大小,以便与桌面设置紧密对应。

      进入全屏模式时,如果要用作全屏窗口的窗口不可见,则此方法将使其可见。在返回到窗口模式时,它将保持可见。

      进入全屏模式时,所有透明效果都将重置为窗口。其形状设置为null,不透明度值设置为1.0f,背景颜色alpha设置为255(完全不透明)。返回窗口模式时,这些值不会恢复。

      装饰窗口在全屏模式下的操作是未指定的且依赖于平台。因此,建议通过使用setUndecorated方法在FrameDialog对象中关闭装饰。

      从独占全屏窗口返回到窗口模式时,通过调用setDisplayMode进行的任何显示更改都将自动恢复到其原始状态。

      参数:
      w - 用作全屏窗口的窗口;如果返回到窗口模式,则为null。一些平台期望全屏窗口是顶级组件(即,Frame);因此最好在这里使用Frame而不是Window
      自版本:
      1.4
      另请参阅:
    • getFullScreenWindow

      public Window getFullScreenWindow()
      返回表示设备处于全屏模式时的全屏窗口的Window对象。
      返回:
      全屏窗口,如果设备不处于全屏模式则为null
      自版本:
      1.4
      另请参阅:
    • isDisplayChangeSupported

      public boolean isDisplayChangeSupported()
      如果此GraphicsDevice支持低级显示更改,则返回true。在某些平台上,低级显示更改可能仅允许在全屏独占模式下进行(即,如果isFullScreenSupported()返回true并且应用程序已经使用setFullScreenWindow(java.awt.Window)进入全屏模式)。
      返回:
      此图形设备是否支持低级显示更改。
      自版本:
      1.4
      另请参阅:
    • setDisplayMode

      public void setDisplayMode(DisplayMode dm)
      设置此图形设备的显示模式。只有在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 - 如果提供的DisplayModenull,或者不在getDisplayModes返回的数组中可用
      UnsupportedOperationException - 如果isDisplayChangeSupported返回false
      自版本:
      1.4
      另请参阅:
    • getDisplayMode

      public DisplayMode getDisplayMode()
      返回此GraphicsDevice的当前显示模式。返回的显示模式允许具有DisplayMode.REFRESH_RATE_UNKNOWN刷新率,如果不确定的话。同样,返回的显示模式允许具有DisplayMode.BIT_DEPTH_MULTI位深度,如果不确定的话或者支持多个位深度。
      返回:
      此图形设备的当前显示模式。
      自版本:
      1.4
      另请参阅:
    • getDisplayModes

      public DisplayMode[] getDisplayModes()
      返回此GraphicsDevice可用的所有显示模式。返回的显示模式允许具有DisplayMode.REFRESH_RATE_UNKNOWN刷新率,如果不确定的话。同样,返回的显示模式允许具有DisplayMode.BIT_DEPTH_MULTI位深度,如果不确定的话或者支持多个位深度。
      返回:
      此图形设备可用的所有显示模式。
      自版本:
      1.4
    • getAvailableAcceleratedMemory

      public int getAvailableAcceleratedMemory()
      此方法返回此设备上加速内存中可用的字节数。一些图像是按先到先服务的方式在加速内存中创建或缓存的。在某些操作系统上,此内存是有限资源。调用此方法并仔细安排图像的创建和刷新可能使应用程序最有效地利用该有限资源。
      请注意,返回的数字是可用内存量的快照;某些图像可能仍然无法分配到该内存中。例如,根据操作系统、驱动程序、内存配置和线程情况,对于给定图像,报告的大小可能无法完全用于给定图像。有关与VolatileImage关联的ImageCapabilities对象上的进一步查询方法,可用于确定特定VolatileImage是否已在加速内存中创建。
      返回:
      加速内存中可用的字节数。负返回值表示此GraphicsDevice上的加速内存量不确定。
      自版本:
      1.4
      另请参阅:
    • isWindowTranslucencySupported

      public boolean isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency translucencyKind)
      返回此图形设备是否支持给定级别的半透明度。
      参数:
      translucencyKind - 一种半透明度支持
      返回:
      给定半透明度种类是否受支持
      自版本:
      1.7