JDesktopPane (Java Platform SE 8 )
Keywords: javax.swing.JDesktopPane class
Date: 2026-03-29

javax.swing

## Class JDesktopPane

- java.lang.Object
- - java.awt.Component
  - - java.awt.Container
    - - javax.swing.JComponent
      - - javax.swing.JLayeredPane
        - - javax.swing.JDesktopPane

- All Implemented Interfaces:
    ImageObserver, MenuContainer, Serializable, Accessible

      public class JDesktopPane
      extends JLayeredPane
      implements Accessible

  A container used to create a multiple-document interface or a virtual desktop. You create `JInternalFrame` objects and add them to the `JDesktopPane`. `JDesktopPane` extends `JLayeredPane` to manage the potentially overlapping internal frames. It also maintains a reference to an instance of `DesktopManager` that is set by the UI class for the current look and feel (L&F). Note that `JDesktopPane` does not support borders.

  This class is normally used as the parent of `JInternalFrames` to provide a pluggable `DesktopManager` object to the `JInternalFrames`. The `installUI` of the L&F specific implementation is responsible for setting the `desktopManager` variable appropriately. When the parent of a `JInternalFrame` is a `JDesktopPane`, it should delegate most of its behavior to the `desktopManager` (closing, resizing, etc).

  For further documentation and examples see How to Use Internal Frames, a section in The Java Tutorial.

  Warning: Swing is not thread safe. For more information see Swing's Threading Policy.

  Warning: Serialized objects of this class will not be compatible with future Swing releases. The current serialization support is appropriate for short term storage or RMI between applications running the same version of Swing. As of 1.4, support for long term storage of all JavaBeans™ has been added to the `java.beans` package. Please see `XMLEncoder`.

  See Also:
    `JInternalFrame`, `JInternalFrame.JDesktopIcon`, `DesktopManager`

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class and Description
    --- | ---
    `protected class` | `JDesktopPane.AccessibleJDesktopPane` This class implements accessibility support for the `JDesktopPane` class.

    - ### Nested classes/interfaces inherited from class javax.swing.JLayeredPane

      `JLayeredPane.AccessibleJLayeredPane`

    - ### Nested classes/interfaces inherited from class javax.swing.JComponent

      `JComponent.AccessibleJComponent`

    - ### Nested classes/interfaces inherited from class java.awt.Container

      `Container.AccessibleAWTContainer`

    - ### Nested classes/interfaces inherited from class java.awt.Component

      `Component.AccessibleAWTComponent, Component.BaselineResizeBehavior, Component.BltBufferStrategy, Component.FlipBufferStrategy`

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static int` | `LIVE_DRAG_MODE` Indicates that the entire contents of the item being dragged should appear inside the desktop pane.
    `static int` | `OUTLINE_DRAG_MODE` Indicates that an outline only of the item being dragged should appear inside the desktop pane.

    - ### Fields inherited from class javax.swing.JLayeredPane

      `DEFAULT_LAYER, DRAG_LAYER, FRAME_CONTENT_LAYER, LAYER_PROPERTY, MODAL_LAYER, PALETTE_LAYER, POPUP_LAYER`

    - ### Fields inherited from class javax.swing.JComponent

      `listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW`

    - ### Fields inherited from class java.awt.Component

      `accessibleContext, BOTTOM_ALIGNMENT, CENTER_ALIGNMENT, LEFT_ALIGNMENT, RIGHT_ALIGNMENT, TOP_ALIGNMENT`

    - ### Fields inherited from interface java.awt.image.ImageObserver

      `ABORT, ALLBITS, ERROR, FRAMEBITS, HEIGHT, PROPERTIES, SOMEBITS, WIDTH`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `JDesktopPane()` Creates a new `JDesktopPane`.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected void` | `addImpl(Component comp, Object constraints, int index)` Adds the specified component to this container at the specified index.
    `AccessibleContext` | `getAccessibleContext()` Gets the `AccessibleContext` associated with this `JDesktopPane`.
    `JInternalFrame[]` | `getAllFrames()` Returns all `JInternalFrames` currently displayed in the desktop.
    `JInternalFrame[]` | `getAllFramesInLayer(int layer)` Returns all `JInternalFrames` currently displayed in the specified layer of the desktop.
    `DesktopManager` | `getDesktopManager()` Returns the `DesktopManger` that handles desktop-specific UI actions.
    `int` | `getDragMode()` Gets the current "dragging style" used by the desktop pane.
    `JInternalFrame` | `getSelectedFrame()` Returns the currently active `JInternalFrame` in this `JDesktopPane`, or `null` if no `JInternalFrame` is currently active.
    `DesktopPaneUI` | `getUI()` Returns the L&F object that renders this component.
    `String` | `getUIClassID()` Returns the name of the L&F class that renders this component.
    `protected String` | `paramString()` Returns a string representation of this `JDesktopPane`.
    `void` | `remove(Component comp)` Removes the specified component from this container.
    `void` | `remove(int index)` Remove the indexed component from this pane.
    `void` | `removeAll()` Removes all the components from this container.
    `JInternalFrame` | `selectFrame(boolean forward)` Selects the next `JInternalFrame` in this desktop pane.
    `void` | `setComponentZOrder(Component comp, int index)` Moves the specified component to the specified z-order index in the container.
    `void` | `setDesktopManager(DesktopManager d)` Sets the `DesktopManger` that will handle desktop-specific UI actions.
    `void` | `setDragMode(int dragMode)` Sets the "dragging style" used by the desktop pane.
    `void` | `setSelectedFrame(JInternalFrame f)` Sets the currently active `JInternalFrame` in this `JDesktopPane`.
    `void` | `setUI(DesktopPaneUI ui)` Sets the L&F object that renders this component.
    `void` | `updateUI()` Notification from the `UIManager` that the L&F has changed.

    - ### Methods inherited from class javax.swing.JLayeredPane

      `getComponentCountInLayer, getComponentsInLayer, getComponentToLayer, getIndexOf, getLayer, getLayer, getLayeredPaneAbove, getObjectForLayer, getPosition, highestLayer, insertIndexForLayer, isOptimizedDrawingEnabled, lowestLayer, moveToBack, moveToFront, paint, putLayer, setLayer, setLayer, setPosition`

    - ### Methods inherited from class javax.swing.JComponent

      `addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getPreferredSize, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, hide, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isPaintingForPrint, isPaintingOrigin, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paintBorder, paintChildren, paintComponent, paintImmediately, paintImmediately, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update`

    - ### Methods inherited from class java.awt.Container

      `add, add, add, add, add, addContainerListener, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, removeContainerListener, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusDownCycle, validate, validateTree`

    - ### Methods inherited from class java.awt.Component

      `action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPeer, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

- - ### Field Detail

    - #### LIVE_DRAG_MODE

          public static final int LIVE_DRAG_MODE

      Indicates that the entire contents of the item being dragged should appear inside the desktop pane.
      See Also:
        `OUTLINE_DRAG_MODE`, `setDragMode(int)`, Constant Field Values

    - #### OUTLINE_DRAG_MODE

          public static final int OUTLINE_DRAG_MODE

      Indicates that an outline only of the item being dragged should appear inside the desktop pane.
      See Also:
        `LIVE_DRAG_MODE`, `setDragMode(int)`, Constant Field Values

  - ### Constructor Detail

    - #### JDesktopPane

          public JDesktopPane()

      Creates a new `JDesktopPane`.

  - ### Method Detail

    - #### getUI

          public DesktopPaneUI getUI()

      Returns the L&F object that renders this component.
      Returns:
        the `DesktopPaneUI` object that renders this component

    - #### setUI

          public void setUI(DesktopPaneUI ui)

      Sets the L&F object that renders this component.
      Parameters:
        `ui` - the DesktopPaneUI L&F object
      See Also:
        `UIDefaults.getUI(javax.swing.JComponent)`

    - #### setDragMode

          public void setDragMode(int dragMode)

      Sets the "dragging style" used by the desktop pane. You may want to change to one mode or another for performance or aesthetic reasons.
      Parameters:
        `dragMode` - the style of drag to use for items in the Desktop
      Since:
        1.3
      See Also:
        `LIVE_DRAG_MODE`, `OUTLINE_DRAG_MODE`

    - #### getDragMode

          public int getDragMode()

      Gets the current "dragging style" used by the desktop pane.
      Returns:
        either `Live_DRAG_MODE` or `OUTLINE_DRAG_MODE`
      Since:
        1.3
      See Also:
        `setDragMode(int)`

    - #### getDesktopManager

          public DesktopManager getDesktopManager()

      Returns the `DesktopManger` that handles desktop-specific UI actions.

    - #### setDesktopManager

          public void setDesktopManager(DesktopManager d)

      Sets the `DesktopManger` that will handle desktop-specific UI actions. This may be overridden by `LookAndFeel`.
      Parameters:
        `d` - the `DesktopManager` to use

    - #### updateUI

          public void updateUI()

      Notification from the `UIManager` that the L&F has changed. Replaces the current UI object with the latest version from the `UIManager`.
      Overrides:
        `updateUI` in class `JComponent`
      See Also:
        `JComponent.updateUI()`

    - #### getUIClassID

          public String getUIClassID()

      Returns the name of the L&F class that renders this component.
      Overrides:
        `getUIClassID` in class `JComponent`
      Returns:
        the string "DesktopPaneUI"
      See Also:
        `JComponent.getUIClassID()`, `UIDefaults.getUI(javax.swing.JComponent)`

    - #### getAllFrames

          public JInternalFrame[] getAllFrames()

      Returns all `JInternalFrames` currently displayed in the desktop. Returns iconified frames as well as expanded frames.
      Returns:
        an array of `JInternalFrame` objects

    - #### getSelectedFrame

          public JInternalFrame getSelectedFrame()

      Returns the currently active `JInternalFrame` in this `JDesktopPane`, or `null` if no `JInternalFrame` is currently active.
      Returns:
        the currently active `JInternalFrame` or `null`
      Since:
        1.3

    - #### setSelectedFrame

          public void setSelectedFrame(JInternalFrame f)

      Sets the currently active `JInternalFrame` in this `JDesktopPane`. This method is used to bridge the package gap between JDesktopPane and the platform implementation code and should not be called directly. To visually select the frame the client must call JInternalFrame.setSelected(true) to activate the frame.
      Parameters:
        `f` - the internal frame that's currently selected
      Since:
        1.3
      See Also:
        `JInternalFrame.setSelected(boolean)`

    - #### getAllFramesInLayer

          public JInternalFrame[] getAllFramesInLayer(int layer)

      Returns all `JInternalFrames` currently displayed in the specified layer of the desktop. Returns iconified frames as well expanded frames.
      Parameters:
        `layer` - an int specifying the desktop layer
      Returns:
        an array of `JInternalFrame` objects
      See Also:
        `JLayeredPane`

    - #### remove

          public void remove(Component comp)

      Removes the specified component from this container. This method also notifies the layout manager to remove the component from this container's layout via the `removeLayoutComponent` method.

      This method changes layout-related information, and therefore, invalidates the component hierarchy. If the container has already been displayed, the hierarchy must be validated thereafter in order to reflect the changes.

      Overrides:
        `remove` in class `Container`
      Parameters:
        `comp` - the component to be removed
      See Also:
        `Container.add(java.awt.Component)`, `Container.invalidate()`, `Container.validate()`, `Container.remove(int)`

    - #### selectFrame

          public JInternalFrame selectFrame(boolean forward)

      Selects the next `JInternalFrame` in this desktop pane.
      Parameters:
        `forward` - a boolean indicating which direction to select in; `true` for forward, `false` for backward
      Returns:
        the JInternalFrame that was selected or `null` if nothing was selected
      Since:
        1.6

    - #### addImpl

          protected void addImpl(Component comp,
                                 Object constraints,
                                 int index)

      Adds the specified component to this container at the specified index. This method also notifies the layout manager to add the component to this container's layout using the specified constraints object via the `addLayoutComponent` method.

      The constraints are defined by the particular layout manager being used. For example, the `BorderLayout` class defines five constraints: `BorderLayout.NORTH`, `BorderLayout.SOUTH`, `BorderLayout.EAST`, `BorderLayout.WEST`, and `BorderLayout.CENTER`.

      The `GridBagLayout` class requires a `GridBagConstraints` object. Failure to pass the correct type of constraints object results in an `IllegalArgumentException`.

      If the current layout manager implements `LayoutManager2`, then `LayoutManager2.addLayoutComponent(Component,Object)` is invoked on it. If the current layout manager does not implement `LayoutManager2`, and constraints is a `String`, then `LayoutManager.addLayoutComponent(String,Component)` is invoked on it.

      If the component is not an ancestor of this container and has a non-null parent, it is removed from its current parent before it is added to this container.

      This is the method to override if a program needs to track every add request to a container as all other add methods defer to this one. An overriding method should usually include a call to the superclass's version of the method:

      > `super.addImpl(comp, constraints, index)`

      This method changes layout-related information, and therefore, invalidates the component hierarchy. If the container has already been displayed, the hierarchy must be validated thereafter in order to display the added component.

      Overrides:
        `addImpl` in class `JLayeredPane`
      Parameters:
        `comp` - the component to be added
        `constraints` - an object expressing layout constraints for this component
        `index` - the position in the container's list at which to insert the component, where `-1` means append to the end
      Since:
        1.6
      See Also:
        `Container.add(Component)`, `Container.add(Component, int)`, `Container.add(Component, java.lang.Object)`, `Container.invalidate()`, `LayoutManager`, `LayoutManager2`

    - #### remove

          public void remove(int index)

      Remove the indexed component from this pane. This is the absolute index, ignoring layers.
      Overrides:
        `remove` in class `JLayeredPane`
      Parameters:
        `index` - an int specifying the component to remove
      Since:
        1.6
      See Also:
        `JLayeredPane.getIndexOf(java.awt.Component)`

    - #### removeAll

          public void removeAll()

      Removes all the components from this container.
      Overrides:
        `removeAll` in class `JLayeredPane`
      Since:
        1.6
      See Also:
        `Container.add(java.awt.Component)`, `Container.remove(int)`, `Container.invalidate()`

    - #### setComponentZOrder

          public void setComponentZOrder(Component comp,
                                         int index)

      Moves the specified component to the specified z-order index in the container. The z-order determines the order that components are painted; the component with the highest z-order paints first and the component with the lowest z-order paints last. Where components overlap, the component with the lower z-order paints over the component with the higher z-order.

      If the component is a child of some other container, it is removed from that container before being added to this container. The important difference between this method and `java.awt.Container.add(Component, int)` is that this method doesn't call `removeNotify` on the component while removing it from its previous container unless necessary and when allowed by the underlying native windowing system. This way, if the component has the keyboard focus, it maintains the focus when moved to the new position.

      This property is guaranteed to apply only to lightweight non-`Container` components.

      This method changes layout-related information, and therefore, invalidates the component hierarchy.

      Note: Not all platforms support changing the z-order of heavyweight components from one container into another without the call to `removeNotify`. There is no way to detect whether a platform supports this, so developers shouldn't make any assumptions.

      Overrides:
        `setComponentZOrder` in class `Container`
      Parameters:
        `comp` - the component to be moved
        `index` - the position in the container's list to insert the component, where `getComponentCount()` appends to the end
      Since:
        1.6
      See Also:
        `Container.getComponentZOrder(java.awt.Component)`, `Container.invalidate()`

    - #### paramString

          protected String paramString()

      Returns a string representation of this `JDesktopPane`. 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 `JLayeredPane`
      Returns:
        a string representation of this `JDesktopPane`

    - #### getAccessibleContext

          public AccessibleContext getAccessibleContext()

      Gets the `AccessibleContext` associated with this `JDesktopPane`. For desktop panes, the `AccessibleContext` takes the form of an `AccessibleJDesktopPane`. A new `AccessibleJDesktopPane` instance is created if necessary.
      Specified by:
        `getAccessibleContext` in interface `Accessible`
      Overrides:
        `getAccessibleContext` in class `JLayeredPane`
      Returns:
        an `AccessibleJDesktopPane` that serves as the `AccessibleContext` of this `JDesktopPane`

Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2026, Oracle and/or its affiliates. All rights reserved. Use is subject to license terms. Also see the documentation redistribution policy.