Module java.desktop
Package java.awt

Class Window

所有已实现的接口:
ImageObserver, MenuContainer, Serializable, Accessible
直接已知的子类:
BasicToolBarUI.DragWindow, Dialog, Frame, JWindow

public class Window extends Container implements Accessible
Window对象是一个没有边框和菜单栏的顶层窗口。窗口的默认布局是BorderLayout

窗口在构造时必须有框架、对话框或另一个窗口作为其所有者。

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

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

图表显示包含4个物理屏幕的虚拟设备。主物理屏幕显示坐标(0,0),其他屏幕显示(-80,-100)。

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

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

      Window w = new Window(Window owner, GraphicsConfiguration gc);
      Rectangle bounds = gc.getBounds();
      w.setLocation(10 + bounds.x, 10 + bounds.y);
 

注意: 顶层窗口(包括WindowFrameDialog)的位置和大小受桌面窗口管理系统控制。调用setLocationsetSizesetBounds是请求(而不是指令),将被转发到窗口管理系统。将尽一切努力尊重这些请求。但是,在某些情况下,窗口管理系统可能会忽略这些请求,或者修改请求的几何形状,以便将Window放置和调整大小,使其更符合桌面设置。

桌面窗口管理系统可能会对窗口应用视觉效果,如光环、阴影、动态效果和动画。这些效果超出了AWT的知识和控制范围,因此根据本规范的目的,它们不被视为顶层窗口的一部分。

由于本地事件处理的异步性质,getBoundsgetLocationgetLocationOnScreengetSize返回的结果在屏幕上可能不反映窗口的实际几何形状,直到最后一个请求被处理。在处理后续请求的过程中,这些值可能会相应地更改,而窗口管理系统则会满足这些请求。

应用程序可以任意设置不可见Window的大小和位置,但是当Window变为可见时,窗口管理系统可能会随后更改其大小和/或位置。将生成一个或多个ComponentEvent来指示新的几何形状。

窗口能够生成以下WindowEvents: WindowOpened, WindowClosed, WindowGainedFocus, WindowLostFocus。

自从:
1.0
参见:
  • Constructor Details

    • Window

      public Window(Frame owner)
      使用指定的Frame作为所有者构造一个新的、最初不可见的窗口。除非其所有者显示在屏幕上,否则窗口将无法获得焦点。

      如果设置了安全管理器,则会调用AWTPermission("showWindowWithoutWarningBanner")进行检查。如果此检查失败并出现SecurityException,则会创建警告横幅。

      参数:
      owner - 作为所有者的Frame,如果此窗口没有所有者,则为null
      抛出:
      IllegalArgumentException - 如果ownerGraphicsConfiguration不是来自屏幕设备
      HeadlessException - 当GraphicsEnvironment.isHeadless返回true
      参见:
    • Window

      public Window(Window owner)
      使用指定的Window作为所有者构造一个新的、最初不可见的窗口。除非其最近的拥有FrameDialog显示在屏幕上,否则窗口将无法获得焦点。

      如果设置了安全管理器,则会调用AWTPermission("showWindowWithoutWarningBanner")进行检查。如果此检查失败并出现SecurityException,则会创建警告横幅。

      参数:
      owner - 作为所有者的Window,如果此窗口没有所有者,则为null
      抛出:
      IllegalArgumentException - 如果ownerGraphicsConfiguration不是来自屏幕设备
      HeadlessException - 当GraphicsEnvironment.isHeadless()返回true
      自版本:
      1.2
      参见:
    • Window

      public Window(Window owner, GraphicsConfiguration gc)
      使用指定的所有者Window和屏幕设备的GraphicsConfiguration构造一个新的、最初不可见的窗口。除非其最近的拥有FrameDialog显示在屏幕上,否则窗口将无法获得焦点。

      如果设置了安全管理器,则会调用AWTPermission("showWindowWithoutWarningBanner")进行检查。如果此检查失败并出现SecurityException,则会创建警告横幅。

      参数:
      owner - 作为所有者的窗口,如果此窗口没有所有者,则为null
      gc - 目标屏幕设备的GraphicsConfiguration;如果gcnull,则假定系统默认的GraphicsConfiguration
      抛出:
      IllegalArgumentException - 如果gc不是来自屏幕设备
      HeadlessException - 当GraphicsEnvironment.isHeadless()返回true
      自版本:
      1.3
      参见:
  • Method Details

    • getIconImages

      public List<Image> getIconImages()
      返回要显示为此窗口图标的图像序列。

      此方法返回内部存储的列表的副本,因此对返回的对象的所有操作不会影响窗口的行为。

      返回:
      此窗口的图标图像列表的副本,如果此窗口没有图标图像,则为空列表。
      自版本:
      1.6
      参见:
    • setIconImages

      public void setIconImages(List<? extends Image> icons)
      设置要显示为此窗口图标的图像序列。随后对getIconImages的调用将始终返回icons列表的副本。

      根据平台功能,将使用一个或多个不同尺寸的图像作为窗口的图标。

      icons列表也可以包含MultiResolutionImage图像。从基本MultiResolutionImage图像中提取适合屏幕分辨率的图像,并将其添加到图标列表中,同时从列表中删除基本分辨率图像。从开始扫描icons列表以找到最合适尺寸的图像。如果列表包含多个相同尺寸的图像,则将使用第一个。

      未指定图标的无所有者窗口使用平台默认图标。拥有者窗口的图标可能会从所有者继承,除非明确覆盖。将图标设置为null或空列表将恢复默认行为。

      注意:本机窗口系统可能使用不同尺寸的不同图像来表示窗口,具体取决于上下文(例如窗口装饰、窗口列表、任务栏等)。它们也可以只使用单个图像来表示所有上下文,或者根本不使用图像。

      参数:
      icons - 要显示的图标图像列表。
      自版本:
      1.6
      参见:
    • setIconImage

      public void setIconImage(Image image)
      设置要显示为此窗口图标的图像。

      可以使用此方法代替setIconImages()来指定窗口的图标为单个图像。

      以下语句:

           setIconImage(image);
       
      等同于:
           ArrayList<Image> imageList = new ArrayList<Image>();
           imageList.add(image);
           setIconImages(imageList);
       

      注意:本地窗口系统可能使用不同尺寸的不同图像来表示窗口,具体取决于上下文(例如窗口装饰、窗口列表、任务栏等)。它们也可能只使用单个图像来表示所有上下文,或者根本不使用图像。

      参数:
      image - 要显示的图标图像。
      自从:
      1.6
      另请参阅:
    • addNotify

      public void addNotify()
      通过创建与其本机屏幕资源的连接,使此窗口可显示。此方法由工具包内部调用,不应由程序直接调用。
      覆盖:
      addNotify 在类 Container
      自从:
      1.0
      另请参阅:
    • pack

      public void pack()
      使此窗口的大小适合其子组件的首选大小和布局。如果窗口的任一维度小于先前调用setMinimumSize方法指定的最小大小,则窗口的宽度和高度将自动放大。

      如果窗口和/或其所有者尚未显示,则在计算首选大小之前,它们都将被显示。在计算大小后,将验证窗口。

      另请参阅:
    • setMinimumSize

      public void setMinimumSize(Dimension minimumSize)
      将此窗口的最小大小设置为一个固定值。随后调用getMinimumSize将始终返回此值。如果当前窗口的大小小于minimumSize,则窗口的大小将自动放大以符合最小大小。

      如果之后调用setSizesetBounds方法,并且宽度或高度小于setMinimumSize方法指定的宽度,则窗口将自动放大以满足minimumSize值。 minimumSize值还会影响pack方法的行为。

      通过将最小大小参数设置为null值,可以恢复默认行为。

      如果用户尝试将窗口调整大小至minimumSize值以下,可能会限制调整大小操作。此行为取决于平台。

      覆盖:
      setMinimumSize 在类 Component
      参数:
      minimumSize - 此窗口的新最小大小
      自从:
      1.6
      另请参阅:
    • setSize

      public void setSize(Dimension d)
      调整此组件的大小,使其具有宽度d.width和高度d.height

      此方法更改与布局相关的信息,因此会使组件层次结构无效。

      如果d.widthd.height中的任一值小于先前调用setMinimumSize指定的最小大小,则这些值将自动放大。

      该方法更改与几何相关的数据。因此,本机窗口系统可能会忽略此类请求,或者可能会修改请求的数据,以便Window对象被放置和调整大小,以便与桌面设置紧密对应。

      覆盖:
      setSize 在类 Component
      参数:
      d - 指定此组件新大小的尺寸
      自从:
      1.6
      另请参阅:
    • setSize

      public void setSize(int width, int height)
      调整此组件的大小,使其具有宽度width和高度height

      此方法更改与布局相关的信息,因此会使组件层次结构无效。

      如果widthheight中的任一值小于先前调用setMinimumSize指定的最小大小,则这些值将自动放大。

      该方法更改与几何相关的数据。因此,本机窗口系统可能会忽略此类请求,或者可能会修改请求的数据,以便Window对象被放置和调整大小,以便与桌面设置紧密对应。

      覆盖:
      setSize 在类 Component
      参数:
      width - 此组件的新宽度(以像素为单位)
      height - 此组件的新高度(以像素为单位)
      自从:
      1.6
      另请参阅:
    • setLocation

      public void setLocation(int x, int y)
      将此组件移动到新位置。新位置的左上角由xy参数在此组件父级的坐标空间中指定。

      此方法更改与布局相关的信息,因此会使组件层次结构无效。

      该方法更改与几何相关的数据。因此,本机窗口系统可能会忽略此类请求,或者可能会修改请求的数据,以便Window对象被放置和调整大小,以便与桌面设置紧密对应。

      覆盖:
      setLocation 在类 Component
      参数:
      x - 新位置左上角的x坐标,以父级的坐标空间为准
      y - 新位置左上角的y坐标,以父级的坐标空间为准
      另请参阅:
    • setLocation

      public void setLocation(Point p)
      将此组件移动到新位置。新位置的左上角由点p指定。点p以父级的坐标空间给出。

      此方法更改与布局相关的信息,因此会使组件层次结构无效。

      该方法更改与几何相关的数据。因此,本机窗口系统可能会忽略此类请求,或者可能会修改请求的数据,以便Window对象被放置和调整大小,以便与桌面设置紧密对应。

      覆盖:
      setLocation 在类 Component
      参数:
      p - 定义新位置左上角的点,以此组件父级的坐标空间为准
      另请参阅:
    • reshape

      @Deprecated public void reshape(int x, int y, int width, int height)
      Deprecated.
      As of JDK version 1.1, replaced by setBounds(int, int, int, int).
      从类中复制的描述: Component
      重新调整此组件的边界矩形。
      覆盖:
      reshape 在类 Component
      参数:
      x - 矩形左上角的x坐标
      y - 矩形左上角的y坐标
      width - 矩形的宽度
      height - 矩形的高度
    • setVisible

      public void setVisible(boolean b)
      显示或隐藏此Window取决于参数b的值。

      如果该方法显示窗口,则在以下条件下还会使窗口获得焦点:

      • Window符合isFocusableWindow()方法中概述的要求。
      • WindowautoRequestFocus属性为true值。
      • 本地窗口系统允许Window获得焦点。
      对于第二个条件(autoRequestFocus属性的值),有一个例外。如果窗口是一个阻止当前焦点窗口的模态对话框,则不考虑该属性的值。

      开发人员绝不能假设窗口是焦点或活动窗口,直到它接收到WINDOW_GAINED_FOCUS或WINDOW_ACTIVATED事件。

      覆盖:
      setVisible 在类中 Component
      参数:
      b - 如果为true,则使Window可见,否则隐藏Window。如果Window和/或其所有者尚未可显示,则两者都将变为可显示。在使窗口可见之前,将验证Window。如果Window已经可见,则将该Window置于前端。

      如果为false,隐藏此Window、其子组件和所有拥有的子级。可以通过调用#setVisible(true)再次使Window及其子组件可见。

      参见:
    • show

      @Deprecated public void show()
      Deprecated.
      As of JDK version 1.5, replaced by setVisible(boolean).
      使窗口可见。如果窗口和/或其所有者尚未可显示,则两者都将变为可显示。在使窗口可见之前,将验证窗口。如果窗口已经可见,则将该窗口置于前端。
      覆盖:
      show 在类中 Component
      参见:
    • hide

      @Deprecated public void hide()
      Deprecated.
      As of JDK version 1.5, replaced by setVisible(boolean).
      隐藏此窗口、其子组件和所有拥有的子级。可以通过调用show再次使窗口及其子组件可见。
      覆盖:
      hide 在类中 Component
      参见:
    • dispose

      public void dispose()
      释放此Window、其子组件和所有拥有的子级使用的所有本机屏幕资源。也就是说,这些Component的资源将被销毁,它们消耗的任何内存将被返回给操作系统,并将被标记为不可显示。

      可以通过随后调用packshow重新构建本机资源来使Window及其子组件再次可显示。重新创建的Window及其子组件的状态将与Window被处置时这些对象的状态相同(不考虑这些操作之间的额外修改)。

      注意:当Java虚拟机(VM)中的最后一个可显示窗口被处置时,VM可能会终止。有关更多信息,请参见AWT线程问题

      参见:
    • toFront

      public void toFront()
      如果此窗口可见,则将此窗口置于前端,并可能使其成为焦点窗口。

      将此窗口置于堆叠顺序的顶部,并在此VM中的任何其他窗口前显示它。如果此窗口不可见,则不会执行任何操作。某些平台不允许拥有其他窗口的窗口出现在拥有的窗口上方。某些平台可能不允许此VM将其窗口放置在本机应用程序的窗口或其他VM的窗口上方。此权限可能取决于此VM中的窗口是否已经获得焦点。将尽一切努力将此窗口移动到堆叠顺序中的最高位置;但是,开发人员不应假设此方法将在所有情况下将此窗口移动到所有其他窗口上方。

      开发人员绝不能假设此窗口是焦点或活动窗口,直到此窗口接收到WINDOW_GAINED_FOCUS或WINDOW_ACTIVATED事件。在顶部窗口是焦点窗口的平台上,此方法将可能在以下条件下使此窗口获得焦点(如果尚未获得焦点):

      • 窗口符合isFocusableWindow()方法中概述的要求。
      • 窗口的属性autoRequestFocustrue值。
      • 本地窗口系统允许窗口获得焦点。
      在不会影响焦点窗口的平台上,此方法将可能保持焦点和活动窗口不变。

      如果此方法导致此窗口获得焦点,并且此窗口是一个Frame或Dialog,则它也将被激活。如果此窗口获得焦点,但它不是Frame或Dialog,则拥有此窗口的第一个Frame或Dialog将被激活。

      如果此窗口被模态对话框阻止,则阻止对话框将被置于前端并保持在被阻止窗口上方。

      参见:
    • toBack

      public void toBack()
      如果此窗口可见,则将此窗口发送到后端,并可能导致其失去焦点或激活状态(如果它是焦点或活动窗口)。

      将此窗口置于堆叠顺序的底部,并在此VM中的任何其他窗口后显示它。如果此窗口不可见,则不会执行任何操作。某些平台不允许由其他窗口拥有的窗口出现在其所有者下方。将尽一切努力将此窗口移动到堆叠顺序中的最低位置;但是,开发人员不应假设此方法将在所有情况下将此窗口移动到所有其他窗口下方。

      由于本机窗口系统的变化,无法保证对焦点和活动窗口的更改。开发人员绝不能假设此窗口不再是焦点或活动窗口,直到此窗口接收到WINDOW_LOST_FOCUS或WINDOW_DEACTIVATED事件。在顶部窗口是焦点窗口的平台上,此方法将可能导致此窗口失去焦点。在这种情况下,此VM中下一个最高的可获得焦点的窗口将接收焦点。在不会影响焦点窗口的平台上,此方法将可能保持焦点和活动窗口不变。

      参见:
    • getToolkit

      public Toolkit getToolkit()
      返回此窗口的工具包。
      覆盖:
      getToolkit 在类中 Component
      返回:
      此窗口的工具包。
      参见:
    • getWarningString

      public final String getWarningString()
      获取与此窗口一起显示的警告字符串。如果此窗口不安全,则警告字符串将显示在窗口的可见区域的某个位置。如果存在安全管理器并且安全管理器拒绝AWTPermission("showWindowWithoutWarningBanner"),则窗口是不安全的。

      如果窗口是安全的,则getWarningString返回null。如果窗口不安全,则此方法将检查系统属性awt.appletWarning并返回该属性的字符串值。

      返回:
      此窗口的警告字符串。
    • getLocale

      public Locale getLocale()
      获取与此窗口关联的Locale对象,如果已设置区域设置。如果未设置区域设置,则返回默认区域设置。
      覆盖:
      getLocale 在类中 Component
      返回:
      为此窗口设置的区域设置。
      自:
      1.1
      参见:
    • getInputContext

      public InputContext getInputContext()
      获取此窗口的输入上下文。窗口始终具有一个输入上下文,除非子组件创建并设置自己的输入上下文。
      覆盖:
      getInputContext 在类中 Component
      返回:
      此组件使用的输入上下文;如果无法确定上下文,则返回null
      自:
      1.2
      参见:
    • setCursor

      public void setCursor(Cursor cursor)
      设置鼠标指针图像为指定的鼠标指针。

      如果Java平台实现和/或本地系统不支持更改鼠标指针形状,则该方法可能没有视觉效果。

      覆盖:
      setCursor 在类 Component
      参数:
      cursor - Cursor类定义的常量之一。如果此参数为null,则此窗口的鼠标指针将设置为Cursor.DEFAULT_CURSOR类型。
      自:
      1.1
      参见:
    • getOwner

      public Window getOwner()
      返回此窗口的所有者。
      返回:
      此窗口的所有者
      自:
      1.2
    • getOwnedWindows

      public Window[] getOwnedWindows()
      返回包含此窗口当前拥有的所有窗口的数组。
      返回:
      所有拥有窗口的数组
      自:
      1.2
    • getWindows

      public static Window[] getWindows()
      返回此应用程序创建的所有Window数组,包括已拥有和无所有者的窗口。如果从小程序中调用,则数组仅包括该小程序可访问的Window

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

      返回:
      应用程序创建的所有Window数组
      自:
      1.6
      参见:
    • getOwnerlessWindows

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

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

      返回:
      此应用程序创建的所有没有所有者的Window数组
      自:
      1.6
      参见:
    • setModalExclusionType

      public void setModalExclusionType(Dialog.ModalExclusionType exclusionType)
      指定此窗口的模态排除类型。如果窗口被模态排除,则不会被某些模态对话框阻止。请参阅Dialog.ModalExclusionType以获取可能的模态排除类型。

      如果给定的类型不受支持,则使用NO_EXCLUDE

      注意:更改可见窗口的模态排除类型可能不会产生效果,直到隐藏然后再次显示它。

      参数:
      exclusionType - 此窗口的模态排除类型;null值等效于NO_EXCLUDE
      抛出:
      SecurityException - 如果调用线程没有权限将模态排除属性设置为具有给定exclusionType的窗口
      自:
      1.6
      参见:
    • getModalExclusionType

      public Dialog.ModalExclusionType getModalExclusionType()
      返回此窗口的模态排除类型。
      返回:
      此窗口的模态排除类型
      自:
      1.6
      参见:
    • addWindowListener

      public void addWindowListener(WindowListener l)
      将指定的窗口监听器添加到此窗口以接收窗口事件。如果l为null,则不会抛出异常且不执行任何操作。

      有关AWT线程模型的详细信息,请参阅AWT线程问题

      参数:
      l - 窗口监听器
      参见:
    • addWindowStateListener

      public void addWindowStateListener(WindowStateListener l)
      将指定的窗口状态监听器添加到此窗口以接收窗口事件。如果lnull,则不会抛出异常且不执行任何操作。

      有关AWT线程模型的详细信息,请参阅AWT线程问题

      参数:
      l - 窗口状态监听器
      自:
      1.4
      参见:
    • addWindowFocusListener

      public void addWindowFocusListener(WindowFocusListener l)
      将指定的窗口焦点监听器添加到此窗口以接收窗口事件。如果l为null,则不会抛出异常且不执行任何操作。

      有关AWT线程模型的详细信息,请参阅AWT线程问题

      参数:
      l - 窗口焦点监听器
      自:
      1.4
      参见:
    • removeWindowListener

      public void removeWindowListener(WindowListener l)
      删除指定的窗口监听器,使其不再从此窗口接收窗口事件。如果l为null,则不会抛出异常且不执行任何操作。

      有关AWT线程模型的详细信息,请参阅AWT线程问题

      参数:
      l - 窗口监听器
      参见:
    • removeWindowStateListener

      public void removeWindowStateListener(WindowStateListener l)
      删除指定的窗口状态监听器,使其不再从此窗口接收窗口事件。如果lnull,则不会抛出异常且不执行任何操作。

      有关AWT线程模型的详细信息,请参阅AWT线程问题

      参数:
      l - 窗口状态监听器
      自:
      1.4
      参见:
    • removeWindowFocusListener

      public void removeWindowFocusListener(WindowFocusListener l)
      删除指定的窗口焦点监听器,使其不再从此窗口接收窗口事件。如果l为null,则不会抛出异常且不执行任何操作。

      有关AWT线程模型的详细信息,请参阅AWT线程问题

      参数:
      l - 窗口焦点监听器
      自:
      1.4
      参见:
    • getWindowListeners

      public WindowListener[] getWindowListeners()
      返回在此窗口上注册的所有窗口监听器的数组。
      返回:
      所有此窗口的WindowListener或如果当前未注册窗口监听器,则返回空数组
      自:
      1.4
      参见:
    • getWindowFocusListeners

      public WindowFocusListener[] getWindowFocusListeners()
      返回在此窗口上注册的所有窗口焦点监听器的数组。
      返回:
      所有此窗口的WindowFocusListener或如果当前未注册窗口焦点监听器,则返回空数组
      自:
      1.4
      参见:
    • getWindowStateListeners

      public WindowStateListener[] getWindowStateListeners()
      返回在此窗口上注册的所有窗口状态监听器的数组。
      返回:
      返回此窗口的所有WindowStateListener,如果当前未注册任何窗口状态侦听器,则返回空数组
      自从:
      1.4
      另请参阅:
    • getListeners

      public <T extends EventListener> T[] getListeners(Class<T> listenerType)
      返回当前在此Window上注册为FooListener的所有对象的数组。使用addFooListener方法注册FooListener

      您可以使用类文字指定listenerType参数,例如FooListener.class。例如,您可以使用以下代码查询Window w的窗口侦听器:

      WindowListener[] wls = (WindowListener[])(w.getListeners(WindowListener.class));
      如果不存在此类侦听器,则此方法返回空数组。
      覆盖:
      getListeners 在类 Container
      类型参数:
      T - 侦听器的类型
      参数:
      listenerType - 请求的侦听器类型;此参数应指定从java.util.EventListener继承的接口
      返回:
      返回在此窗口上注册为FooListener的所有对象的数组,如果尚未添加此类侦听器,则返回空数组
      抛出:
      ClassCastException - 如果listenerType未指定实现java.util.EventListener的类或接口
      NullPointerException - 如果listenerTypenull
      自从:
      1.3
      另请参阅:
    • processEvent

      protected void processEvent(AWTEvent e)
      处理此窗口上的事件。如果事件是WindowEvent,则调用processWindowEvent方法,否则调用其超类的processEvent

      请注意,如果事件参数为null,则行为是未指定的,可能会导致异常。

      覆盖:
      processEvent 在类 Container
      参数:
      e - 事件
      另请参阅:
    • processWindowEvent

      protected void processWindowEvent(WindowEvent e)
      通过将窗口事件分派给任何注册的WindowListener对象来处理在此窗口上发生的窗口事件。注意:除非为此组件启用了窗口事件,否则不会调用此方法;当发生以下情况之一时会发生这种情况:
      • 通过addWindowListener注册了WindowListener对象
      • 通过enableEvents启用了窗口事件

      请注意,如果事件参数为null,则行为是未指定的,可能会导致异常。

      参数:
      e - 窗口事件
      另请参阅:
    • processWindowFocusEvent

      protected void processWindowFocusEvent(WindowEvent e)
      通过将在此窗口上发生的窗口焦点事件分派给任何注册的WindowFocusListener对象来处理。注意:除非为此窗口启用了窗口焦点事件,否则不会调用此方法。发生以下情况之一时会发生这种情况:
      • 通过addWindowFocusListener注册了WindowFocusListener
      • 通过enableEvents启用了窗口焦点事件

      请注意,如果事件参数为null,则行为是未指定的,可能会导致异常。

      参数:
      e - 窗口焦点事件
      自从:
      1.4
      另请参阅:
    • processWindowStateEvent

      protected void processWindowStateEvent(WindowEvent e)
      通过将在此窗口上发生的窗口状态事件分派给任何注册的WindowStateListener对象来处理。注意:除非为此窗口启用了窗口状态事件,否则不会调用此方法。发生以下情况之一时会发生这种情况:
      • 通过addWindowStateListener注册了WindowStateListener
      • 通过enableEvents启用了窗口状态事件

      请注意,如果事件参数为null,则行为是未指定的,可能会导致异常。

      参数:
      e - 窗口状态事件
      自从:
      1.4
      另请参阅:
    • setAlwaysOnTop

      public final void setAlwaysOnTop(boolean alwaysOnTop) throws SecurityException
      设置此窗口是否始终位于其他窗口之上。如果存在多个始终置顶窗口,则它们之间的相对顺序是未指定的且依赖于平台。

      如果其他窗口已经始终置顶,则这些窗口之间的相对顺序是未指定的(取决于平台)。除了可能是另一个始终置顶窗口之外,没有窗口可以置于始终置顶窗口之上。

      由始终置顶窗口拥有的所有窗口都继承此状态并自动变为始终置顶。如果窗口不再始终置顶,则它拥有的窗口将不再始终置顶。当始终置顶窗口被发送toBack时,其始终置顶状态将设置为false

      当在具有true值的窗口上调用此方法时,如果窗口可见且平台支持此窗口的始终置顶,则窗口将立即前置,“粘”在最顶部位置。如果窗口当前不可见,则此方法将始终置顶状态设置为true,但不会将窗口前置。当稍后显示窗口时,它将始终置顶。

      当在具有false值的窗口上调用此方法时,始终置顶状态将设置为正常。它还可能导致顶级窗口的z顺序发生未指定的、依赖于平台的更改,但其他始终置顶窗口将保持在最顶部位置。在具有正常状态的窗口上调用具有false值的此方法不会产生任何效果。

      注意:某些平台可能不支持始终置顶窗口。要检测当前平台是否支持始终置顶窗口,请使用Toolkit.isAlwaysOnTopSupported()isAlwaysOnTopSupported()。如果当前平台不支持此窗口或此窗口的工具包不支持始终置顶窗口,则调用此方法不会产生任何效果。

      如果安装了SecurityManager,则调用线程必须被授予AWTPermission "setWindowAlwaysOnTop"权限才能设置此属性的值。如果未授予此权限,此方法将抛出SecurityException,并且属性的当前值将保持不变。

      参数:
      alwaysOnTop - 如果窗口应始终位于其他窗口之上,则为true
      抛出:
      SecurityException - 如果调用线程没有权限设置始终置顶属性的值
      自从:
      1.5
      另请参阅:
    • isAlwaysOnTopSupported

      public boolean isAlwaysOnTopSupported()
      返回此窗口是否支持始终置顶模式。某些平台可能不支持始终置顶窗口,有些可能仅支持某些类型的顶级窗口;例如,某个平台可能不支持始终置顶模态对话框。
      返回:
      如果此窗口支持始终置顶模式且此窗口的工具包支持始终置顶窗口,则返回true,否则返回false
      自从:
      1.6
      另请参阅:
    • isAlwaysOnTop

      public final boolean isAlwaysOnTop()
      返回此窗口是否为始终置顶窗口。
      返回:
      true,如果窗口处于始终置顶状态,则返回false
      自版本:
      1.5
      参见:
    • getFocusOwner

      public Component getFocusOwner()
      返回此窗口的具有焦点的子组件(如果此窗口具有焦点);否则返回null。
      返回:
      具有焦点的子组件,如果此窗口没有焦点则返回null
      参见:
    • getMostRecentFocusOwner

      public Component getMostRecentFocusOwner()
      返回此窗口的具有焦点的子组件,当此窗口具有焦点时将接收焦点。如果此窗口当前具有焦点,则此方法返回与getFocusOwner()相同的组件。如果此窗口没有焦点,则将返回最近请求焦点的子组件。如果没有子组件请求过焦点,并且这是一个可聚焦的窗口,则返回此窗口的初始可聚焦组件。如果没有子组件请求过焦点,并且这是一个不可聚焦的窗口,则返回null。
      返回:
      当此窗口具有焦点时将接收焦点的子组件
      自版本:
      1.4
      参见:
    • isActive

      public boolean isActive()
      返回此窗口是否处于活动状态。只有Frame或Dialog可以处于活动状态。本地窗口系统可能使用特殊装饰来表示活动窗口或其子组件,例如突出显示的标题栏。活动窗口始终是具有焦点的窗口,或者是具有焦点的窗口的第一个Frame或Dialog的所有者。
      返回:
      是否为活动窗口。
      自版本:
      1.4
      参见:
    • isFocused

      public boolean isFocused()
      返回此窗口是否具有焦点。如果存在焦点所有者,则具有焦点的窗口是该焦点所有者所在的窗口。如果没有焦点所有者,则没有窗口具有焦点。

      如果具有焦点的窗口是Frame或Dialog,则它也是活动窗口。否则,活动窗口是具有焦点的窗口的第一个Frame或Dialog的所有者。

      返回:
      是否为具有焦点的窗口。
      自版本:
      1.4
      参见:
    • getFocusTraversalKeys

      public Set<AWTKeyStroke> getFocusTraversalKeys(int id)
      获取此窗口的焦点遍历键。(有关每个键的完整描述,请参见setFocusTraversalKeys。)

      如果未为此窗口明确设置遍历键,则返回此窗口父级的遍历键。如果未为此窗口的任何祖先明确设置遍历键,则返回当前KeyboardFocusManager的默认遍历键。

      覆盖:
      getFocusTraversalKeys 在类 Container
      参数:
      id - KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS、KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS、KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS或KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS之一
      返回:
      指定键的AWTKeyStroke
      抛出:
      IllegalArgumentException - 如果id不是KeyboardFocusManager.FORWARD_TRAVERSAL_KEYS、KeyboardFocusManager.BACKWARD_TRAVERSAL_KEYS、KeyboardFocusManager.UP_CYCLE_TRAVERSAL_KEYS或KeyboardFocusManager.DOWN_CYCLE_TRAVERSAL_KEYS之一
      自版本:
      1.4
      参见:
    • setFocusCycleRoot

      public final void setFocusCycleRoot(boolean focusCycleRoot)
      不执行任何操作,因为窗口必须始终是焦点遍历循环的根。传入的值将被忽略。
      覆盖:
      setFocusCycleRoot 在类 Container
      参数:
      focusCycleRoot - 此值将被忽略
      自版本:
      1.4
      参见:
    • isFocusCycleRoot

      public final boolean isFocusCycleRoot()
      始终返回true,因为所有窗口必须是焦点遍历循环的根。
      覆盖:
      isFocusCycleRoot 在类 Container
      返回:
      true
      自版本:
      1.4
      参见:
    • getFocusCycleRootAncestor

      public final Container getFocusCycleRootAncestor()
      始终返回null,因为窗口没有祖先;它们代表组件层次结构的顶部。
      覆盖:
      getFocusCycleRootAncestor 在类 Component
      返回:
      null
      自版本:
      1.4
      参见:
    • isFocusableWindow

      public final boolean isFocusableWindow()
      返回此窗口是否可以成为具有焦点的窗口,即此窗口或其任何子组件是否可以成为焦点所有者。要使Frame或Dialog具有焦点,必须将其可聚焦窗口状态设置为true。要使不是Frame或Dialog的窗口具有焦点,必须将其可聚焦窗口状态设置为true,其最近的所有者Frame或Dialog必须在屏幕上显示,并且它必须包含至少一个在其焦点遍历循环中的组件。如果不满足这些条件中的任何一个,则此窗口或其任何子组件都无法成为焦点所有者。
      返回:
      如果此窗口可以成为具有焦点的窗口则返回true;否则返回false
      自版本:
      1.4
      参见:
    • getFocusableWindowState

      public boolean getFocusableWindowState()
      返回此窗口是否可以成为具有焦点的窗口,如果满足isFocusableWindow中概述的其他要求。如果此方法返回false,则isFocusableWindow也将返回false。如果此方法返回true,则isFocusableWindow可能返回truefalse,具体取决于必须满足的其他要求,以使窗口具有焦点。

      默认情况下,所有窗口的可聚焦窗口状态为true

      返回:
      此窗口是否可以成为具有焦点的窗口
      自版本:
      1.4
      参见:
    • setFocusableWindowState

      public void setFocusableWindowState(boolean focusableWindowState)
      设置此窗口是否可以成为具有焦点的窗口,如果满足isFocusableWindow中概述的其他要求。如果此窗口的可聚焦窗口状态设置为false,则isFocusableWindow将返回false。如果此窗口的可聚焦窗口状态设置为true,则isFocusableWindow可能返回truefalse,具体取决于必须满足的其他要求,以使窗口具有焦点。

      将窗口的焦点状态设置为false是应用程序向AWT标识将用作浮动面板或工具栏的窗口的标准机制,因此应将其设置为非可聚焦窗口。在某些平台上,为可见的Window设置焦点状态可能会有延迟的效果 - 实际更改可能仅在Window变为隐藏然后再次显示时发生。为确保跨平台的一致行为,请在Window不可见时设置Window的可聚焦状态,然后再显示它。

      参数:
      focusableWindowState - 此窗口是否可以成为焦点窗口
      自 JDK 版本:
      1.4
      另请参阅:
    • setAutoRequestFocus

      public void setAutoRequestFocus(boolean autoRequestFocus)
      设置此窗口在随后显示(通过调用setVisible(true))或移动到前台(通过调用toFront())时是否应该接收焦点。

      请注意,可能会间接调用setVisible(true)(例如,当显示窗口的所有者使窗口显示时)。也可能会间接调用toFront()(例如,当已经可见的窗口调用setVisible(true)时)。在所有这些情况下,此属性也会生效。

      此属性的值不会被所拥有的窗口继承。

      参数:
      autoRequestFocus - 此窗口在随后显示或移动到前台时是否应该接收焦点
      自 JDK 版本:
      1.7
      另请参阅:
    • isAutoRequestFocus

      public boolean isAutoRequestFocus()
      返回此窗口在随后显示(通过调用setVisible(true))或移动到前台(通过调用toFront())时是否应该接收焦点。

      默认情况下,窗口的autoRequestFocus值为true

      返回:
      autoRequestFocus 的值
      自 JDK 版本:
      1.7
      另请参阅:
    • addPropertyChangeListener

      public void addPropertyChangeListener(PropertyChangeListener listener)
      向监听器列表中添加一个PropertyChangeListener。该监听器为此类的所有绑定属性注册,包括以下内容:
      • 此窗口的字体("font")
      • 此窗口的背景颜色("background")
      • 此窗口的前景颜色("foreground")
      • 此窗口的可聚焦性("focusable")
      • 此窗口的焦点遍历键启用状态("focusTraversalKeysEnabled")
      • 此窗口的前向遍历键集合("forwardFocusTraversalKeys")
      • 此窗口的后向遍历键集合("backwardFocusTraversalKeys")
      • 此窗口的上循环遍历键集合("upCycleFocusTraversalKeys")
      • 此窗口的下循环遍历键集合("downCycleFocusTraversalKeys")
      • 此窗口的焦点遍历策略("focusTraversalPolicy")
      • 此窗口的可聚焦窗口状态("focusableWindowState")
      • 此窗口的总在最前状态("alwaysOnTop")
      请注意,如果此窗口继承了一个绑定属性,则不会对继承属性的更改触发事件。

      如果监听器为null,则不会抛出异常,也不会执行任何操作。

      覆盖:
      addPropertyChangeListener 在类 Container
      参数:
      listener - 要添加的PropertyChangeListener
      另请参阅:
    • addPropertyChangeListener

      public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener)
      向特定属性的监听器列表中添加一个PropertyChangeListener。指定的属性可以是用户定义的,也可以是以下之一:
      • 此窗口的字体("font")
      • 此窗口的背景颜色("background")
      • 此窗口的前景颜色("foreground")
      • 此窗口的可聚焦性("focusable")
      • 此窗口的焦点遍历键启用状态("focusTraversalKeysEnabled")
      • 此窗口的前向遍历键集合("forwardFocusTraversalKeys")
      • 此窗口的后向遍历键集合("backwardFocusTraversalKeys")
      • 此窗口的上循环遍历键集合("upCycleFocusTraversalKeys")
      • 此窗口的下循环遍历键集合("downCycleFocusTraversalKeys")
      • 此窗口的焦点遍历策略("focusTraversalPolicy")
      • 此窗口的可聚焦窗口状态("focusableWindowState")
      • 此窗口的总在最前状态("alwaysOnTop")
      请注意,如果此窗口继承了一个绑定属性,则不会对继承属性的更改触发事件。

      如果监听器为null,则不会抛出异常,也不会执行任何操作。

      覆盖:
      addPropertyChangeListener 在类 Container
      参数:
      propertyName - 上述属性名称之一
      listener - 要添加的PropertyChangeListener
      另请参阅:
    • isValidateRoot

      public boolean isValidateRoot()
      指示此容器是否为验证根。

      Window对象是验证根,因此它们覆盖此方法以返回true

      覆盖:
      isValidateRoot 在类 Container
      返回:
      true
      自 JDK 版本:
      1.7
      另请参阅:
    • postEvent

      @Deprecated public boolean postEvent(Event e)
      Deprecated.
      As of JDK version 1.1 replaced by dispatchEvent(AWTEvent).
      从接口复制的描述: MenuContainer
      向监听器发布事件。
      指定者:
      postEvent 在接口 MenuContainer
      覆盖:
      postEvent 在类 Component
      参数:
      e - 要分派的事件
      返回:
      发布事件的结果
    • isShowing

      public boolean isShowing()
      检查此窗口是否显示在屏幕上。
      覆盖:
      isShowing 在类 Component
      返回:
      如果组件正在显示,则返回true,否则返回false
      另请参阅:
    • applyResourceBundle

      @Deprecated public void applyResourceBundle(ResourceBundle rb)
      Deprecated.
      As of J2SE 1.4, replaced by Component.applyComponentOrientation.
      参数:
      rb - 资源包
    • applyResourceBundle

      @Deprecated public void applyResourceBundle(String rbName)
      Deprecated.
      As of J2SE 1.4, replaced by Component.applyComponentOrientation.
      参数:
      rbName - 资源名称
    • setType

      public void setType(Window.Type type)
      设置窗口的类型。此方法只能在窗口不可显示时调用。
      参数:
      type - 窗口类型
      抛出:
      IllegalComponentStateException - 如果窗口可显示。
      IllegalArgumentException - 如果类型为null
      自 JDK 版本:
      1.7
      另请参阅:
    • getType

      public Window.Type getType()
      返回窗口的类型。
      返回:
      窗口的类型
      自 JDK 版本:
      1.7
      另请参阅:
    • getAccessibleContext

      public AccessibleContext getAccessibleContext()
      获取与此窗口关联的AccessibleContext。对于窗口,AccessibleContext采用AccessibleAWTWindow的形式。如果需要,将创建一个新的AccessibleAWTWindow实例。
      指定者:
      getAccessibleContext 在接口 Accessible
      覆盖:
      getAccessibleContext 在类 Component
      返回:
      作为此窗口的AccessibleContext的AccessibleAWTWindow
      自 JDK 版本:
      1.3
    • setLocationRelativeTo

      public void setLocationRelativeTo(Component c)
      设置窗口相对于指定组件的位置,根据以下情况进行设置。

      下面提到的目标屏幕是调用 setLocationRelativeTo 方法后应将窗口放置在其中的屏幕。

      • 如果组件为 null,或者与该组件关联的 GraphicsConfigurationnull,则窗口将放置在屏幕的中心。可以使用 GraphicsEnvironment.getCenterPoint 方法获取中心点。
      • 如果组件不为 null,但当前未显示,则窗口将放置在由与该组件关联的 GraphicsConfiguration 定义的目标屏幕的中心。
      • 如果组件不为 null 并且显示在屏幕上,则窗口将定位在使窗口的中心与组件的中心重合的位置。

      如果屏幕配置不允许将窗口从一个屏幕移动到另一个屏幕,则窗口仅根据上述条件确定的位置放置,并且其 GraphicsConfiguration 不会更改。

      注意:如果窗口的下边缘超出屏幕,则窗口将放置在距离屏幕中心最近的 Component 一侧。因此,如果组件位于屏幕的右侧,则窗口将放置在其左侧,反之亦然。

      如果计算窗口位置后,窗口的上边缘、左边缘或右边缘超出屏幕,则窗口将定位在使窗口的上边缘、左边缘或右边缘与屏幕的相应边缘重合的位置。如果窗口的左右边缘都超出屏幕,则窗口将放置在屏幕的左侧。如果窗口的上下边缘都超出屏幕,则窗口将放置在屏幕的顶部。

      该方法更改与几何相关的数据。因此,本机窗口系统可能会忽略此类请求,或者可能会修改请求的数据,以便 Window 对象以与桌面设置密切对应的方式放置和调整大小。

      参数:
      c - 确定窗口位置的组件
      自版本:
      1.4
      参见:
    • createBufferStrategy

      public void createBufferStrategy(int numBuffers)
      为此组件创建一个新的多缓冲策略。多缓冲对于渲染性能很有用。此方法尝试使用提供的缓冲区数量创建最佳可用策略。它将始终创建具有该数量缓冲区的 BufferStrategy。首先尝试页面翻转策略,然后尝试使用加速缓冲区的位块传输策略。最后,使用未加速的位块传输策略。

      每次调用此方法时,都会丢弃此组件的现有缓冲策略。

      参数:
      numBuffers - 要创建的缓冲区数量
      抛出:
      IllegalArgumentException - 如果 numBuffers 小于 1。
      IllegalStateException - 如果组件不可显示
      自版本:
      1.4
      参见:
    • createBufferStrategy

      public void createBufferStrategy(int numBuffers, BufferCapabilities caps) throws AWTException
      使用所需的缓冲区功能为此组件创建一个新的多缓冲策略。例如,如果只希望使用加速内存或页面翻转(由缓冲区功能指定),则此方法很有用。

      每次调用此方法时,都会丢弃此组件的现有缓冲策略。

      参数:
      numBuffers - 要创建的缓冲区数量,包括前缓冲区
      caps - 创建缓冲策略所需的功能;不能为 null
      抛出:
      AWTException - 如果无法支持或满足提供的功能;例如,如果当前可用的加速内存不足,或者指定了页面翻转但不可能实现。
      IllegalArgumentException - 如果 numBuffers 小于 1,或者 caps 为 null
      自版本:
      1.4
      参见:
    • getBufferStrategy

      public BufferStrategy getBufferStrategy()
      返回此组件使用的 BufferStrategy。如果尚未创建 BufferStrategy 或已被丢弃,则此方法将返回 null。
      返回:
      此组件使用的缓冲策略
      自版本:
      1.4
      参见:
    • setLocationByPlatform

      public void setLocationByPlatform(boolean locationByPlatform)
      设置此窗口是否应出现在本机窗口系统的默认位置或当前位置(由 getLocation 返回)下一次窗口可见时。此行为类似于原生窗口显示而未通过编程设置其位置。如果未明确设置它们的位置,大多数窗口系统会级联窗口。一旦窗口显示在屏幕上,实际位置将确定。

      也可以通过将系统属性 "java.awt.Window.locationByPlatform" 设置为 "true" 来启用此行为,尽管对此方法的调用优先级更高。

      在调用 setLocationByPlatform 后调用 setVisiblesetLocationsetBounds,会清除窗口的此属性。

      例如,在执行以下代码后:

       setLocationByPlatform(true);
       setVisible(true);
       boolean flag = isLocationByPlatform();
       
      窗口将显示在平台的默认位置,flag 将为 false

      在以下示例中:

       setLocationByPlatform(true);
       setLocation(10, 10);
       boolean flag = isLocationByPlatform();
       setVisible(true);
       
      窗口将显示在 (10, 10),flag 将为 false
      参数:
      locationByPlatform - 如果此窗口应出现在默认位置,则为 true,如果应出现在当前位置,则为 false
      抛出:
      IllegalComponentStateException - 如果窗口正在屏幕上显示且 locationByPlatform 为 true
      自版本:
      1.5
      参见:
    • isLocationByPlatform

      public boolean isLocationByPlatform()
      如果此窗口下一次可见时将出现在本机窗口系统的默认位置,则返回 true。如果窗口正在屏幕上显示,则此方法始终返回 false
      返回:
      此窗口是否将出现在默认位置
      自版本:
      1.5
      参见:
    • setBounds

      public void setBounds(int x, int y, int width, int height)
      移动并调整此组件的大小。左上角的新位置由 xy 指定,新大小由 widthheight 指定。

      此方法更改与布局相关的信息,因此会使组件层次结构无效。

      如果 widthheight 的值小于先前调用 setMinimumSize 指定的最小大小,则这两个值会自动增大。

      该方法更改与几何相关的数据。因此,本机窗口系统可能会忽略此类请求,或者可能会修改请求的数据,以便 Window 对象以与桌面设置密切对应的方式放置和调整大小。

      覆盖:
      setBounds 在类 Component
      参数:
      x - 此组件的新 x 坐标
      y - 此组件的新 y 坐标
      width - 此组件的新 width
      height - 此组件的新 height
      自版本:
      1.6
      参见:
    • setBounds

      public void setBounds(Rectangle r)
      将此组件移动和调整大小以符合新的边界矩形r。此组件的新位置由r.xr.y指定,其新大小由r.widthr.height指定。

      此方法更改与布局相关的信息,因此会使组件层次结构无效。

      如果r.widthr.height的值小于之前调用setMinimumSize指定的最小大小,则这些值将自动扩大。

      该方法更改与几何相关的数据。因此,本地窗口系统可能会忽略此类请求,或者可能会修改请求的数据,以使Window对象的放置和大小与桌面设置紧密对应。

      覆盖:
      setBounds 在类中 Component
      参数:
      r - 此组件的新边界矩形
      自:
      1.6
      另请参见:
    • getOpacity

      public float getOpacity()
      返回窗口的不透明度。
      返回:
      窗口的不透明度
      自:
      1.7
      另请参见:
    • setOpacity

      public void setOpacity(float opacity)
      设置窗口的不透明度。

      不透明度值在范围[0..1]内。请注意,将不透明度级别设置为0可能会或可能不会禁用此窗口上的鼠标事件处理。这是平台相关的行为。

      为了将不透明度值设置为小于1.0f,必须满足以下条件:

      如果请求的不透明度值小于1.0f,并且上述任何条件不满足,则窗口不透明度不会更改,并且将抛出IllegalComponentStateException

      个别像素的半透明级别也可能受其颜色的alpha分量(请参见setBackground(Color))和此窗口的当前形状(请参见setShape(Shape))的影响。

      参数:
      opacity - 要设置给窗口的不透明度级别
      抛出:
      IllegalArgumentException - 如果不透明度超出范围[0..1]
      IllegalComponentStateException - 如果窗口有装饰并且不透明度小于1.0f
      IllegalComponentStateException - 如果窗口处于全屏模式且不透明度小于1.0f
      UnsupportedOperationException - 如果不支持 GraphicsDevice.WindowTranslucency#TRANSLUCENT TRANSLUCENT半透明且不透明度小于1.0f
      自:
      1.7
      另请参见:
    • getShape

      public Shape getShape()
      返回窗口的形状。此方法返回的值可能与先前使用setShape(shape)设置的值不同,但保证表示相同的形状。
      返回:
      窗口的形状或null(如果未为窗口指定形状)
      自:
      1.7
      另请参见:
    • setShape

      public void setShape(Shape shape)
      设置窗口的形状。

      设置形状会切断窗口的某些部分。仅保留属于给定Shape的部分可见且可点击。如果形状参数为null,此方法会恢复默认形状,在大多数平台上使窗口呈矩形。

      要设置非空形状,必须满足以下条件:

      如果请求的形状不是null,并且上述任何条件不满足,则此窗口的形状不会更改,并且将抛出UnsupportedOperationExceptionIllegalComponentStateException

      个别像素的半透明级别也可能受其颜色的alpha分量(请参见setBackground(Color))和不透明度值(请参见setOpacity(float))的影响。有关更多详细信息,请参见GraphicsDevice.WindowTranslucency

      参数:
      shape - 要设置给窗口的形状
      抛出:
      IllegalComponentStateException - 如果形状不是null且窗口有装饰
      IllegalComponentStateException - 如果形状不是null且窗口处于全屏模式
      UnsupportedOperationException - 如果形状不是null且不支持PERPIXEL_TRANSPARENT半透明
      自:
      1.7
      另请参见:
    • getBackground

      public Color getBackground()
      获取此窗口的背景颜色。

      请注意,返回的颜色的alpha分量指示窗口是否处于非不透明(逐像素半透明)模式。

      覆盖:
      getBackground 在类中 Component
      返回:
      此组件的背景颜色
      另请参见:
    • setBackground

      public void setBackground(Color bgColor)
      设置此窗口的背景颜色。

      如果窗口系统支持PERPIXEL_TRANSLUCENT半透明性,则给定背景颜色的alpha分量可能会影响此窗口的操作模式:它指示此窗口是否必须是不透明的(alpha等于1.0f)或逐像素半透明的(alpha小于1.0f)。如果给定的背景颜色为null,则窗口被视为完全不透明。

      要启用此窗口的逐像素透明模式,必须满足以下所有条件:

      • 图形设备支持此窗口所在位置的PERPIXEL_TRANSLUCENT半透明性
      • 窗口必须是无装饰的(参见Frame.setUndecorated(boolean)Dialog.setUndecorated(boolean)
      • 窗口不能处于全屏模式(参见GraphicsDevice.setFullScreenWindow(Window)

      如果请求的背景颜色的alpha分量小于1.0f,并且上述任何条件不满足,则此窗口的背景颜色不会更改,给定背景颜色的alpha分量不会影响此窗口的操作模式,并且将抛出UnsupportedOperationExceptionIllegalComponentStateException

      当窗口为逐像素半透明时,绘图子系统会尊重每个像素的alpha值。如果一个像素被绘制的alpha颜色分量等于零,则它变得视觉上透明。如果像素的alpha等于1.0f,则像素是完全不透明的。alpha颜色分量的中间值使像素半透明。在此模式下,窗口的背景将用给定背景颜色的alpha值绘制。如果此方法的参数的alpha值等于0,则根本不绘制背景。

      给定像素的实际半透明级别还取决于窗口的不透明度(参见setOpacity(float)),以及此窗口的当前形状(参见setShape(Shape))。

      请注意,使用alpha值为0绘制像素可能会或可能不会禁用此像素上的鼠标事件处理。这是一个依赖平台的行为。要确保鼠标事件不会分派到特定像素,必须将该像素从窗口的形状中排除。

      启用逐像素半透明模式可能会由于本机平台要求而更改此窗口的图形配置。

      覆盖:
      setBackground 在类 Component
      参数:
      bgColor - 要成为此窗口背景颜色的颜色。
      抛出:
      IllegalComponentStateException - 如果给定背景颜色的alpha值小于1.0f且窗口有装饰
      IllegalComponentStateException - 如果给定背景颜色的alpha值小于1.0f且窗口处于全屏模式
      UnsupportedOperationException - 如果给定背景颜色的alpha值小于1.0f且不支持PERPIXEL_TRANSLUCENT半透明性
      参见:
    • isOpaque

      public boolean isOpaque()
      指示窗口当前是否不透明。

      如果窗口的背景颜色不是null且颜色的alpha分量小于1.0f,则该方法返回false。否则,该方法返回true

      覆盖:
      isOpaque 在类 Component
      返回:
      true如果窗口是不透明的,否则为false
      自:
      1.7
      参见:
    • paint

      public void paint(Graphics g)
      绘制容器。将此操作转发给此容器的子组件中的任何轻量级组件。如果重新实现此方法,则应调用super.paint(g),以便正确呈现轻量级组件。如果子组件完全被g中当前剪切设置剪切,则不会将paint()转发给该子组件。
      覆盖:
      paint 在类 Container
      参数:
      g - 指定的Graphics窗口
      自:
      1.7
      参见: