Module java.desktop
Package java.awt

Class 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)构造函数在不同的屏幕设备上创建FrameGraphicsConfiguration对象是目标屏幕设备的GraphicsConfiguration对象之一。

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

虚拟设备概述图,包括三个物理屏幕和一个主物理屏幕。主物理屏幕显示(0,0)坐标,而另一个物理屏幕显示(-80,-100)坐标。

在这样的环境中,调用setLocation时,必须向该方法传递虚拟坐标。类似地,调用Frame上的getLocationOnScreen返回虚拟设备坐标。调用GraphicsConfigurationgetBounds方法可找到其在虚拟坐标系统中的原点。

以下代码将Frame的位置设置为相对于相应GraphicsConfiguration的物理屏幕原点(10, 10)。如果不考虑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
参见:
  • Field Details

  • Constructor Details

  • Method Details

    • addNotify

      public void addNotify()
      通过连接到本机屏幕资源使此框架可显示。使框架可显示将导致其任何子级都变得可显示。此方法由工具包内部调用,不应由程序直接调用。
      覆盖:
      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接收到的WindowEvent.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接收到的WindowEvent.getNewState()方法的返回值,以确定状态是否实际已更改。

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

      参数:
      state - 框架状态常量的位掩码
      自JDK版本:
      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
      返回值:
      框架状态常量的位掩码
      自JDK版本:
      1.4
      另请参阅:
    • setMaximizedBounds

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

      当框架处于最大化状态时,系统提供一些默认边界。此方法允许覆盖系统提供的某些或所有值。

      如果boundsnull,则接受系统提供的边界。如果非null,则可以通过将要从系统接受的字段设置为Integer.MAX_VALUE来覆盖系统提供的某些值。

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

      参数:
      bounds - 最大化状态的边界
      自JDK版本:
      1.4
      另请参阅:
    • getMaximizedBounds

      public Rectangle getMaximizedBounds()
      获取此框架的最大化边界。某些字段可能包含Integer.MAX_VALUE,表示必须使用系统提供的值。
      返回值:
      此框架的最大化边界;可能为null
      自JDK版本:
      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()
      通过删除与其本机屏幕资源的连接使此窗口不可显示。使窗口不可显示将导致其任何子级变为不可显示。此方法由工具包内部调用,不应由程序直接调用。
      覆盖:
      removeNotify 在类 Container
      参见:
    • paramString

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

      @Deprecated public void setCursor(int cursorType)
      Deprecated.
      As of JDK version 1.1, replaced by Component.setCursor(Cursor).
      将此窗口的光标设置为指定类型。
      参数:
      cursorType - 光标类型
    • getCursorType

      @Deprecated public int getCursorType()
      Deprecated.
      As of JDK version 1.1, replaced by Component.getCursor().
      返回:
      此窗口的光标类型
    • getFrames

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

      警告: 此方法可能返回系统创建的窗口,例如Swing使用的共享隐藏窗口。应用程序不应假定这些窗口的存在,也不应假定这些窗口的任何内容,如组件位置、LayoutManager或序列化。

      注意: 要获取所有无所有者窗口的列表,包括在1.6版本中引入的无所有者Dialog,请使用Window.getOwnerlessWindows

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

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