Module java.desktop
Package java.awt

Class Frame

  • All Implemented Interfaces:
    ImageObserver, MenuContainer, Serializable, Accessible
    Direct Known Subclasses:
    JFrame


    public class Frame
    extends Window
    implements MenuContainer
    A Frame is a top-level window with a title and a border.

    The size of the frame includes any area designated for the border. The dimensions of the border area may be obtained using the getInsets method, however, since these dimensions are platform-dependent, a valid insets value cannot be obtained until the frame is made displayable by either calling pack or show. Since the border area is included in the overall size of the frame, the border effectively obscures a portion of the frame, constraining the area available for rendering and/or displaying subcomponents to the rectangle which has an upper-left corner location of (insets.left, insets.top), and has a size of width - (insets.left + insets.right) by height - (insets.top + insets.bottom).

    The default layout for a frame is BorderLayout.

    A frame may have its native decorations (i.e. Frame and Titlebar) turned off with setUndecorated. This can only be done while the frame is not displayable.

    In a multi-screen environment, you can create a Frame on a different screen device by constructing the Frame with Frame(GraphicsConfiguration) or Frame(String title, GraphicsConfiguration). The GraphicsConfiguration object is one of the GraphicsConfiguration objects of the target screen device.

    In a virtual device multi-screen environment in which the desktop area could span multiple physical screen devices, the bounds of all configurations are relative to the virtual-coordinate system. The origin of the virtual-coordinate system is at the upper left-hand corner of the primary physical screen. Depending on the location of the primary screen in the virtual device, negative coordinates are possible, as shown in the following figure.

    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.

    In such an environment, when calling setLocation, you must pass a virtual coordinate to this method. Similarly, calling getLocationOnScreen on a Frame returns virtual device coordinates. Call the getBounds method of a GraphicsConfiguration to find its origin in the virtual coordinate system.

    The following code sets the location of the Frame at (10, 10) relative to the origin of the physical screen of the corresponding GraphicsConfiguration. If the bounds of the GraphicsConfiguration is not taken into account, the Frame location would be set at (10, 10) relative to the virtual-coordinate system and would appear on the primary physical screen, which might be different from the physical screen of the specified GraphicsConfiguration.

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

    Frames are capable of generating the following types of WindowEvents:

    • WINDOW_OPENED
    • WINDOW_CLOSING:
      If the program doesn't explicitly hide or dispose the window while processing this event, the window close operation is canceled.
    • WINDOW_CLOSED
    • WINDOW_ICONIFIED
    • WINDOW_DEICONIFIED
    • WINDOW_ACTIVATED
    • WINDOW_DEACTIVATED
    • WINDOW_GAINED_FOCUS
    • WINDOW_LOST_FOCUS
    • WINDOW_STATE_CHANGED
    Since:
    1.0
    See Also:
    WindowEvent, Window.addWindowListener(java.awt.event.WindowListener), Serialized Form
    • Method Detail

      • addNotify

        public void addNotify​()
        Makes this Frame displayable by connecting it to a native screen resource. Making a frame displayable will cause any of its children to be made displayable. This method is called internally by the toolkit and should not be called directly by programs.
        Overrides:
        addNotify in class Window
        See Also:
        Component.isDisplayable(), removeNotify()
      • getTitle

        public String getTitle​()
        Gets the title of the frame. The title is displayed in the frame's border.
        Returns:
        the title of this frame, or an empty string ("") if this frame doesn't have a title.
        See Also:
        setTitle(String)
      • setTitle

        public void setTitle​(String title)
        Sets the title for this frame to the specified string.
        Parameters:
        title - the title to be displayed in the frame's border. A null value is treated as an empty string, "".
        See Also:
        getTitle()
      • setIconImage

        public void setIconImage​(Image image)
        Sets the image to be displayed as the icon for this window.

        This method can be used instead of setIconImages() to specify a single image as a window's icon.

        The following statement:

             setIconImage(image);
         
        is equivalent to:
             ArrayList<Image> imageList = new ArrayList<Image>();
             imageList.add(image);
             setIconImages(imageList);
         

        Note : Native windowing systems may use different images of differing dimensions to represent a window, depending on the context (e.g. window decoration, window list, taskbar, etc.). They could also use just a single image for all contexts or no image at all.

        Overrides:
        setIconImage in class Window
        Parameters:
        image - the icon image to be displayed.
        See Also:
        Window.setIconImages(java.util.List<? extends java.awt.Image>), Window.getIconImages()
      • getMenuBar

        public MenuBar getMenuBar​()
        Gets the menu bar for this frame.
        Returns:
        the menu bar for this frame, or null if this frame doesn't have a menu bar.
        See Also:
        setMenuBar(MenuBar)
      • setMenuBar

        public void setMenuBar​(MenuBar mb)
        Sets the menu bar for this frame to the specified menu bar.
        Parameters:
        mb - the menu bar being set. If this parameter is null then any existing menu bar on this frame is removed.
        See Also:
        getMenuBar()
      • isResizable

        public boolean isResizable​()
        Indicates whether this frame is resizable by the user. By default, all frames are initially resizable.
        Returns:
        true if the user can resize this frame; false otherwise.
        See Also:
        setResizable(boolean)
      • setResizable

        public void setResizable​(boolean resizable)
        Sets whether this frame is resizable by the user.
        Parameters:
        resizable - true if this frame is resizable; false otherwise.
        See Also:
        isResizable()
      • setState

        public void setState​(int state)
        Sets the state of this frame (obsolete).

        In older versions of JDK a frame state could only be NORMAL or ICONIFIED. Since JDK 1.4 set of supported frame states is expanded and frame state is represented as a bitwise mask.

        For compatibility with applications developed earlier this method still accepts Frame.NORMAL and Frame.ICONIFIED only. The iconic state of the frame is only changed, other aspects of frame state are not affected by this method. If the state passed to this method is neither Frame.NORMAL nor Frame.ICONIFIED the method performs no actions at all.

        Note that if the state is not supported on a given platform, neither the state nor the return value of the getState() method will be changed. The application may determine whether a specific state is supported via the Toolkit.isFrameStateSupported(int) method.

        If the frame is currently visible on the screen (the Window.isShowing() method returns true), the developer should examine the return value of the WindowEvent.getNewState() method of the WindowEvent received through the WindowStateListener to determine that the state has actually been changed.

        If the frame is not visible on the screen, the events may or may not be generated. In this case the developer may assume that the state changes immediately after this method returns. Later, when the setVisible(true) method is invoked, the frame will attempt to apply this state. Receiving any WindowEvent.WINDOW_STATE_CHANGED events is not guaranteed in this case also.

        Parameters:
        state - either Frame.NORMAL or Frame.ICONIFIED.
        See Also:
        setExtendedState(int), Window.addWindowStateListener(java.awt.event.WindowStateListener)
      • setExtendedState

        public void setExtendedState​(int state)
        Sets the state of this frame. The state is represented as a bitwise mask.
        • NORMAL
          Indicates that no state bits are set.
        • ICONIFIED
        • MAXIMIZED_HORIZ
        • MAXIMIZED_VERT
        • MAXIMIZED_BOTH
          Concatenates MAXIMIZED_HORIZ and MAXIMIZED_VERT.

        Note that if the state is not supported on a given platform, neither the state nor the return value of the getExtendedState() method will be changed. The application may determine whether a specific state is supported via the Toolkit.isFrameStateSupported(int) method.

        If the frame is currently visible on the screen (the Window.isShowing() method returns true), the developer should examine the return value of the WindowEvent.getNewState() method of the WindowEvent received through the WindowStateListener to determine that the state has actually been changed.

        If the frame is not visible on the screen, the events may or may not be generated. In this case the developer may assume that the state changes immediately after this method returns. Later, when the setVisible(true) method is invoked, the frame will attempt to apply this state. Receiving any WindowEvent.WINDOW_STATE_CHANGED events is not guaranteed in this case also.

        Parameters:
        state - a bitwise mask of frame state constants
        Since:
        1.4
        See Also:
        Window.addWindowStateListener(java.awt.event.WindowStateListener)
      • getState

        public int getState​()
        Gets the state of this frame (obsolete).

        In older versions of JDK a frame state could only be NORMAL or ICONIFIED. Since JDK 1.4 set of supported frame states is expanded and frame state is represented as a bitwise mask.

        For compatibility with old programs this method still returns Frame.NORMAL and Frame.ICONIFIED but it only reports the iconic state of the frame, other aspects of frame state are not reported by this method.

        Returns:
        Frame.NORMAL or Frame.ICONIFIED.
        See Also:
        setState(int), getExtendedState()
      • getExtendedState

        public int getExtendedState​()
        Gets the state of this frame. The state is represented as a bitwise mask.
        • NORMAL
          Indicates that no state bits are set.
        • ICONIFIED
        • MAXIMIZED_HORIZ
        • MAXIMIZED_VERT
        • MAXIMIZED_BOTH
          Concatenates MAXIMIZED_HORIZ and MAXIMIZED_VERT.
        Returns:
        a bitwise mask of frame state constants
        Since:
        1.4
        See Also:
        setExtendedState(int)
      • setMaximizedBounds

        public void setMaximizedBounds​(Rectangle bounds)
        Sets the maximized bounds for this frame.

        When a frame is in maximized state the system supplies some defaults bounds. This method allows some or all of those system supplied values to be overridden.

        If bounds is null, accept bounds supplied by the system. If non-null you can override some of the system supplied values while accepting others by setting those fields you want to accept from system to Integer.MAX_VALUE.

        Note, the given maximized bounds are used as a hint for the native system, because the underlying platform may not support setting the location and/or size of the maximized windows. If that is the case, the provided values do not affect the appearance of the frame in the maximized state.

        Parameters:
        bounds - bounds for the maximized state
        Since:
        1.4
        See Also:
        getMaximizedBounds()
      • getMaximizedBounds

        public Rectangle getMaximizedBounds​()
        Gets maximized bounds for this frame. Some fields may contain Integer.MAX_VALUE to indicate that system supplied values for this field must be used.
        Returns:
        maximized bounds for this frame; may be null
        Since:
        1.4
        See Also:
        setMaximizedBounds(Rectangle)
      • isUndecorated

        public boolean isUndecorated​()
        Indicates whether this frame is undecorated. By default, all frames are initially decorated.
        Returns:
        true if frame is undecorated; false otherwise.
        Since:
        1.4
        See Also:
        setUndecorated(boolean)
      • setBackground

        public void setBackground​(Color bgColor)
        Sets the background color of this window.

        If the windowing system supports the PERPIXEL_TRANSLUCENT translucency, the alpha component of the given background color may effect the mode of operation for this window: it indicates whether this window must be opaque (alpha equals 1.0f) or per-pixel translucent (alpha is less than 1.0f). If the given background color is null, the window is considered completely opaque.

        All the following conditions must be met to enable the per-pixel transparency mode for this window:

        If the alpha component of the requested background color is less than 1.0f, and any of the above conditions are not met, the background color of this window will not change, the alpha component of the given background color will not affect the mode of operation for this window, and either the UnsupportedOperationException or IllegalComponentStateException will be thrown.

        When the window is per-pixel translucent, the drawing sub-system respects the alpha value of each individual pixel. If a pixel gets painted with the alpha color component equal to zero, it becomes visually transparent. If the alpha of the pixel is equal to 1.0f, the pixel is fully opaque. Interim values of the alpha color component make the pixel semi-transparent. In this mode, the background of the window gets painted with the alpha value of the given background color. If the alpha value of the argument of this method is equal to 0, the background is not painted at all.

        The actual level of translucency of a given pixel also depends on window opacity (see Window.setOpacity(float)), as well as the current shape of this window (see Window.setShape(Shape)).

        Note that painting a pixel with the alpha value of 0 may or may not disable the mouse event handling on this pixel. This is a platform-dependent behavior. To make sure the mouse events do not get dispatched to a particular pixel, the pixel must be excluded from the shape of the window.

        Enabling the per-pixel translucency mode may change the graphics configuration of this window due to the native platform requirements.

        Overrides:
        setBackground in class Window
        Parameters:
        bgColor - the color to become this window's background color.
        See Also:
        Window.getBackground(), Window.isOpaque(), Window.setOpacity(float), Window.setShape(Shape), isUndecorated(), Dialog.isUndecorated(), GraphicsDevice.WindowTranslucency, GraphicsDevice.isWindowTranslucencySupported(GraphicsDevice.WindowTranslucency), GraphicsConfiguration.isTranslucencyCapable()
      • removeNotify

        public void removeNotify​()
        Makes this Frame undisplayable by removing its connection to its native screen resource. Making a Frame undisplayable will cause any of its children to be made undisplayable. This method is called by the toolkit internally and should not be called directly by programs.
        Overrides:
        removeNotify in class Window
        See Also:
        Component.isDisplayable(), addNotify()
      • paramString

        protected String paramString​()
        Returns a string representing the state of this Frame. This method is intended to be used only for debugging purposes, and the content and format of the returned string may vary between implementations. The returned string may be empty but may not be null.
        Overrides:
        paramString in class Container
        Returns:
        the parameter string of this frame
      • setCursor

        @Deprecated
        public void setCursor​(int cursorType)
        Deprecated. As of JDK version 1.1, replaced by Component.setCursor(Cursor).
        Sets the cursor for this frame to the specified type.
        Parameters:
        cursorType - the cursor type
      • getCursorType

        @Deprecated
        public int getCursorType​()
        Deprecated. As of JDK version 1.1, replaced by Component.getCursor().
        Returns:
        the cursor type for this frame
      • getFrames

        public static Frame[] getFrames​()
        Returns an array of all Frames created by this application. If called from an applet, the array includes only the Frames accessible by that applet.

        Warning: this method may return system created frames, such as a shared, hidden frame which is used by Swing. Applications should not assume the existence of these frames, nor should an application assume anything about these frames such as component positions, LayoutManagers or serialization.

        Note: To obtain a list of all ownerless windows, including ownerless Dialogs (introduced in release 1.6), use Window.getOwnerlessWindows.

        Returns:
        the array of all Frames created by this application
        Since:
        1.2
        See Also:
        Window.getWindows(), Window.getOwnerlessWindows()
      • getAccessibleContext

        public AccessibleContext getAccessibleContext​()
        Gets the AccessibleContext associated with this Frame. For frames, the AccessibleContext takes the form of an AccessibleAWTFrame. A new AccessibleAWTFrame instance is created if necessary.
        Specified by:
        getAccessibleContext in interface Accessible
        Overrides:
        getAccessibleContext in class Window
        Returns:
        an AccessibleAWTFrame that serves as the AccessibleContext of this Frame
        Since:
        1.3