模块 java.desktop
 java.awt

类 Frame

所有已实现的接口:
ImageObserver , MenuContainer , Serializable , Accessible
已知子类:
JFrame

public class Frame extends Window implements MenuContainer
Frame 是带有标题和边框的顶级窗口。

框架的大小包括为边框指定的任何区域。边界区域的尺寸可以使用 getInsets 方法获得,但是,由于这些尺寸取决于平台,因此在通过调用 packshow 使框架可显示之前,无法获得有效的插入值。由于边框区域包含在框架的整体大小中,因此边框有效地遮挡了框架的一部分,将可用于渲染和/或显示子组件的区域限制在左上角位置为 (insets.left, insets.top) 的矩形,并且大小为 width - (insets.left + insets.right) 乘以 height - (insets.top + insets.bottom)

框架的默认布局是 BorderLayout

框架可能会使用 setUndecorated 关闭其原生装饰(即 FrameTitlebar )。这只能在框架不是 displayable 时完成。

在多屏环境中,您可以通过使用 Frame(GraphicsConfiguration) Frame(String title, GraphicsConfiguration) 构造 Frame 在不同的屏幕设备上创建 FrameGraphicsConfiguration 对象是目标屏幕设备的 GraphicsConfiguration 对象之一。

在桌面区域可以跨越多个物理屏幕设备的虚拟设备多屏环境中,所有配置的边界都是相对于虚拟坐标系的。虚拟坐标系的原点位于主物理屏幕的左上角。根据主屏幕在虚拟设备中的位置,负坐标是可能的,如下图所示。

Diagram of virtual device
 encompassing three physical screens and one primary physical screen. The
 primary physical screen shows (0,0) coords while a different physical screen
 shows (-80,-100) coords.

在这样的环境下,调用setLocation时,必须向该方法传递一个虚拟坐标。同样,在 Frame 上调用 getLocationOnScreen 会返回虚拟设备坐标。调用GraphicsConfigurationgetBounds方法在虚拟坐标系中找到它的原点。

以下代码将 Frame 的位置设置为 (10, 10) 相对于相应 GraphicsConfiguration 的物理屏幕的原点。如果不考虑 GraphicsConfiguration 的边界,则 Frame 位置将设置为相对于虚拟坐标系的 (10, 10),并且会出现在主物理屏幕上,这可能与指定 GraphicsConfiguration

   Frame f = new Frame(GraphicsConfiguration gc);
   Rectangle bounds = gc.getBounds();
   f.setLocation(10 + bounds.x, 10 + bounds.y);
 

框架能够生成以下类型的 WindowEvent

  • WINDOW_OPENED
  • WINDOW_CLOSING :
    如果程序在处理该事件时没有显式隐藏或释放窗口,窗口关闭操作将被取消。
  • WINDOW_CLOSED
  • WINDOW_ICONIFIED
  • WINDOW_DEICONIFIED
  • WINDOW_ACTIVATED
  • WINDOW_DEACTIVATED
  • WINDOW_GAINED_FOCUS
  • WINDOW_LOST_FOCUS
  • WINDOW_STATE_CHANGED
自从:
1.0
参见:
  • 字段详细信息

  • 构造方法详细信息

  • 方法详情

    • addNotify

      public void addNotify()
      通过将此 Frame 连接到本机屏幕资源使其可显示。使框架可显示将导致其任何子项都可显示。此方法由工具包内部调用,不应由程序直接调用。
      重写:
      addNotify 在类 Window
      参见:
    • getTitle

      public String  getTitle()
      获取框架的标题。标题显示在框架的边框中。
      返回:
      此框架的标题,如果此框架没有标题,则为空字符串 ("")。
      参见:
    • setTitle

      public void setTitle(String  title)
      将此框架的标题设置为指定的字符串。
      参数:
      title - 要显示在框架边框中的标题。 null 值被视为空字符串“”。
      参见:
    • getIconImage

      public Image  getIconImage()
      返回要显示为该框架图标的图像。

      此方法已过时,仅用于向后兼容。请改用 Window.getIconImages()

      如果将几个图像的列表指定为窗口的图标,则此方法将返回列表的第一项。

      返回:
      此框架的图标图像,如果此框架没有图标图像,则为 null
      参见:
    • getMenuBar

      public MenuBar  getMenuBar()
      获取此框架的菜单栏。
      返回:
      此框架的菜单栏,如果此框架没有菜单栏,则为 null
      参见:
    • setMenuBar

      public void setMenuBar(MenuBar  mb)
      将此框架的菜单栏设置为指定的菜单栏。
      参数:
      mb - 正在设置的菜单栏。如果此参数为 null,则删除此框架上的任何现有菜单栏。
      参见:
    • isResizable

      public boolean isResizable()
      指示此框架是否可由用户调整大小。默认情况下,所有框架最初都是可调整大小的。
      返回:
      true 如果用户可以调整此框架的大小; false否则。
      参见:
    • setResizable

      public void setResizable(boolean resizable)
      设置此框架是否可由用户调整大小。
      参数:
      resizable - true 如果此框架可调整大小; false否则。
      参见:
    • setState

      public void setState(int state)
      设置此框架的状态(已过时)。

      在旧版本的 JDK 中,框架状态只能是 NORMAL 或 ICONIFIED。由于 JDK 1.4 支持的框架状态集得到扩展,框架状态表示为按位掩码。

      为了与早期开发的应用程序兼容,此方法仍然只接受 Frame.NORMALFrame.ICONIFIED。仅更改框架的标志性状态,框架状态的其他方面不受此方法影响。如果传递给此方法的状态既不是 Frame.NORMAL 也不是 Frame.ICONIFIED,则该方法根本不执行任何操作。

      请注意,如果给定平台不支持状态,则 getState() 方法的状态和返回值都不会更改。应用程序可以通过 Toolkit.isFrameStateSupported(int) 方法确定是否支持特定状态。

      如果框架当前在屏幕上可见Window.isShowing() 方法返回 true ),开发人员应检查通过 WindowStateListener 接收到的 WindowEventWindowEvent.getNewState() 方法的返回值,以确定状态实际上已被更改。

      如果框架在屏幕上不可见,事件可能会或可能不会生成。在这种情况下,开发人员可能会假设此方法返回后状态会立即发生变化。稍后,当调用 setVisible(true) 方法时,框架将尝试应用此状态。在这种情况下也不能保证接收到任何 WindowEvent.WINDOW_STATE_CHANGED 事件。

      参数:
      state - Frame.NORMALFrame.ICONIFIED
      参见:
    • setExtendedState

      public void setExtendedState(int state)
      设置此帧的状态。状态表示为按位掩码。
      • NORMAL
        指示未设置任何状态位。
      • ICONIFIED
      • MAXIMIZED_HORIZ
      • MAXIMIZED_VERT
      • MAXIMIZED_BOTH
        连接 MAXIMIZED_HORIZMAXIMIZED_VERT

      请注意,如果给定平台不支持状态,则 getExtendedState() 方法的状态和返回值都不会更改。应用程序可以通过 Toolkit.isFrameStateSupported(int) 方法确定是否支持特定状态。

      如果框架当前在屏幕上可见Window.isShowing() 方法返回 true ),开发人员应检查通过 WindowStateListener 接收到的 WindowEventWindowEvent.getNewState() 方法的返回值,以确定状态实际上已被更改。

      如果框架在屏幕上不可见,事件可能会或可能不会生成。在这种情况下,开发人员可能会假设此方法返回后状态会立即发生变化。稍后,当调用 setVisible(true) 方法时,框架将尝试应用此状态。在这种情况下也不能保证接收到任何 WindowEvent.WINDOW_STATE_CHANGED 事件。

      参数:
      state - 帧状态常量的按位掩码
      自从:
      1.4
      参见:
    • getState

      public int getState()
      获取此框架的状态(已过时)。

      在旧版本的 JDK 中,框架状态只能是 NORMAL 或 ICONIFIED。由于 JDK 1.4 支持的框架状态集得到扩展,框架状态表示为按位掩码。

      为了与旧程序兼容,此方法仍返回 Frame.NORMALFrame.ICONIFIED 但它仅报告帧的图标状态,此方法不报告帧状态的其他方面。

      返回:
      Frame.NORMALFrame.ICONIFIED
      参见:
    • getExtendedState

      public int getExtendedState()
      获取此帧的状态。状态表示为按位掩码。
      • NORMAL
        指示未设置任何状态位。
      • ICONIFIED
      • MAXIMIZED_HORIZ
      • MAXIMIZED_VERT
      • MAXIMIZED_BOTH
        连接 MAXIMIZED_HORIZMAXIMIZED_VERT
      返回:
      帧状态常量的按位掩码
      自从:
      1.4
      参见:
    • setMaximizedBounds

      public void setMaximizedBounds(Rectangle  bounds)
      设置此帧的最大化边界。

      当框架处于最大化状态时,系统会提供一些默认边界。此方法允许重写部分或全部这些系统提供的值。

      如果 boundsnull ,则接受系统提供的界限。如果非 null 您可以覆盖一些系统提供的值,同时通过将您要从系统接受的那些字段设置为 Integer.MAX_VALUE 来接受其他值。

      请注意,给定的最大化边界用作本机系统的提示,因为底层平台可能不支持设置最大化窗口的位置和/或大小。如果是这种情况,提供的值不会影响框架在最大化状态下的外观。

      参数:
      bounds - 最大化状态的边界
      自从:
      1.4
      参见:
    • getMaximizedBounds

      public Rectangle  getMaximizedBounds()
      获取此帧的最大化边界。某些字段可能包含 Integer.MAX_VALUE 以指示必须使用系统为该字段提供的值。
      返回:
      此框架的最大化边界;可能是null
      自从:
      1.4
      参见:
    • setUndecorated

      public void setUndecorated(boolean undecorated)
      禁用或启用此框架的装饰。

      此方法只能在框架不可显示时调用。要装饰这个框架,它必须是不透明的并且具有默认形状,否则将抛出 IllegalComponentStateException。有关详细信息,请参阅 Window.setShape(java.awt.Shape) Window.setOpacity(float) Window.setBackground(java.awt.Color)

      参数:
      undecorated - true 如果不启用框架装饰; false 是否启用框架装饰
      抛出:
      IllegalComponentStateException - 如果框架是可显示的
      IllegalComponentStateException - 如果 undecoratedfalse ,并且此框架没有默认形状
      IllegalComponentStateException - 如果 undecoratedfalse ,并且此帧不透明度小于 1.0f
      IllegalComponentStateException - 如果 undecoratedfalse ,并且此帧背景颜色的 alpha 值小于 1.0f
      自从:
      1.4
      参见:
    • isUndecorated

      public boolean isUndecorated()
      指示此框架是否未修饰。默认情况下,所有框架最初都经过装饰。
      返回:
      true 如果框架未装饰; false否则。
      自从:
      1.4
      参见:
    • remove

      public void remove(MenuComponent  m)
      从此框架中移除指定的菜单栏。
      指定者:
      remove 在接口 MenuContainer
      重写:
      remove 在类 Component
      参数:
      m - 要删除的菜单组件。如果 mnull ,则不采取任何行动
      参见:
    • removeNotify

      public void removeNotify()
      通过删除与本机屏幕资源的连接,使此框架无法显示。使 Frame 不可显示将导致其所有子项不可显示。此方法由工具包内部调用,不应由程序直接调用。
      重写:
      removeNotify 在类 Container
      参见:
    • paramString

      protected String  paramString()
      返回表示此 Frame 状态的字符串。此方法仅用于调试目的,返回字符串的内容和格式可能因实现而异。返回的字符串可能为空,但可能不是 null
      重写:
      paramString 在类 Container
      返回:
      该帧的参数字符串
    • setCursor

      @Deprecated public void setCursor(int cursorType)
      已弃用。
      从 JDK 1.1 版开始,由 Component.setCursor(Cursor) 取代。
      将此帧的光标设置为指定类型。
      参数:
      cursorType - 游标类型
    • getCursorType

      @Deprecated public int getCursorType()
      已弃用。
      从 JDK 1.1 版开始,由 Component.getCursor() 取代。
      返回:
      此帧的光标类型
    • getFrames

      public static Frame [] getFrames()
      返回此应用程序创建的所有 Frame 的数组。如果从小程序调用,则该数组仅包含该小程序可访问的 Frame

      警告:此方法可能会返回系统创建的框架,例如 Swing 使用的共享隐藏框架。应用程序不应假定这些帧的存在,也不应假定有关这些帧的任何信息,例如组件位置、LayoutManagers 或序列化。

      笔记: 要获取所有无主窗口的列表,包括无主窗口 Dialog s(在版本 1.6 中引入),请使用 Window.getOwnerlessWindows

      返回:
      此应用程序创建的所有 Frame 的数组
      自从:
      1.2
      参见:
    • getAccessibleContext

      public AccessibleContext  getAccessibleContext()
      获取与此 Frame 关联的 AccessibleContext。对于框架,AccessibleContext 采用 AccessibleAWTFrame 的形式。如有必要,将创建一个新的 AccessibleAWTFrame 实例。
      指定者:
      getAccessibleContext 在接口 Accessible
      重写:
      getAccessibleContext 在类 Window
      返回:
      作为此框架的 AccessibleContext 的 AccessibleAWTFrame
      自从:
      1.3