javax.swing.plaf.basic

## Class BasicOptionPaneUI

- java.lang.Object
- - javax.swing.plaf.ComponentUI
  - - javax.swing.plaf.OptionPaneUI
    - - javax.swing.plaf.basic.BasicOptionPaneUI

- Direct Known Subclasses:
    SynthOptionPaneUI

      public class BasicOptionPaneUI
      extends OptionPaneUI

  Provides the basic look and feel for a `JOptionPane`. `BasicMessagePaneUI` provides a means to place an icon, message and buttons into a `Container`. Generally, the layout will look like:

              ------------------
              | i | message    |
              | c | message    |
              | o | message    |
              | n | message    |
              ------------------
              |     buttons    |
              |________________|

  icon is an instance of `Icon` that is wrapped inside a `JLabel`. The message is an opaque object and is tested for the following: if the message is a `Component` it is added to the `Container`, if it is an `Icon` it is wrapped inside a `JLabel` and added to the `Container` otherwise it is wrapped inside a `JLabel`.

  The above layout is used when the option pane's `ComponentOrientation` property is horizontal, left-to-right. The layout will be adjusted appropriately for other orientations.

  The `Container`, message, icon, and buttons are all determined from abstract methods.

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class | Description
    --- | --- | ---
    `class` | `BasicOptionPaneUI.ButtonActionListener` | This class should be treated as a "protected" inner class.
    `static class` | `BasicOptionPaneUI.ButtonAreaLayout` | `ButtonAreaLayout` behaves in a similar manner to `FlowLayout`.
    `class` | `BasicOptionPaneUI.PropertyChangeHandler` | This class should be treated as a "protected" inner class.

  - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `protected boolean` | `hasCustomComponents` | This is set to true in validateComponent if a Component is contained in either the message or the buttons.
    `protected Component` | `initialFocusComponent` | Component to receive focus when messaged with selectInitialValue.
    `protected JComponent` | `inputComponent` | JComponent provide for input if optionPane.getWantsInput() returns true.
    `static int` | `MinimumHeight` |
    `protected Dimension` | `minimumSize` |
    `static int` | `MinimumWidth` |
    `protected JOptionPane` | `optionPane` | `JOptionPane` that the receiver is providing the look and feel for.
    `protected PropertyChangeListener` | `propertyChangeListener` |

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `BasicOptionPaneUI()` |

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `protected void` | `addButtonComponents(Container container, Object[] buttons, int initialIndex)` | Creates the appropriate object to represent each of the objects in `buttons` and adds it to `container`.
    `protected void` | `addIcon(Container top)` | Creates and adds a JLabel representing the icon returned from `getIcon` to `top`.
    `protected void` | `addMessageComponents(Container container, GridBagConstraints cons, Object msg, int maxll, boolean internallyCreated)` | Creates the appropriate object to represent `msg` and places it into `container`.
    `protected void` | `burstStringInto(Container c, String d, int maxll)` | Recursively creates new JLabel instances to represent `d`.
    `boolean` | `containsCustomComponents(JOptionPane op)` | Returns true if in the last call to validateComponent the message or buttons contained a subclass of Component.
    `protected ActionListener` | `createButtonActionListener(int buttonIndex)` |
    `protected Container` | `createButtonArea()` | Creates and returns a Container containing the buttons.
    `protected LayoutManager` | `createLayoutManager()` |
    `protected Container` | `createMessageArea()` | Messaged from installComponents to create a Container containing the body of the message.
    `protected PropertyChangeListener` | `createPropertyChangeListener()` |
    `protected Container` | `createSeparator()` |
    `static ComponentUI` | `createUI(JComponent x)` | Creates a new BasicOptionPaneUI instance.
    `protected Object[]` | `getButtons()` | Returns the buttons to display from the JOptionPane the receiver is providing the look and feel for.
    `protected Icon` | `getIcon()` | Returns the icon from the JOptionPane the receiver is providing the look and feel for, or the default icon as returned from `getDefaultIcon`.
    `protected Icon` | `getIconForType(int messageType)` | Returns the icon to use for the passed in type.
    `protected int` | `getInitialValueIndex()` | Returns the initial index into the buttons to select.
    `protected int` | `getMaxCharactersPerLineCount()` | Returns the maximum number of characters to place on a line.
    `protected Object` | `getMessage()` | Returns the message to display from the JOptionPane the receiver is providing the look and feel for.
    `Dimension` | `getMinimumOptionPaneSize()` | Returns the minimum size the option pane should be.
    `Dimension` | `getPreferredSize(JComponent c)` | If `c` is the `JOptionPane` the receiver is contained in, the preferred size that is returned is the maximum of the preferred size of the `LayoutManager` for the `JOptionPane`, and `getMinimumOptionPaneSize`.
    `protected boolean` | `getSizeButtonsToSameWidth()` | Returns true, basic L&F wants all the buttons to have the same width.
    `protected void` | `installComponents()` |
    `protected void` | `installDefaults()` |
    `protected void` | `installKeyboardActions()` |
    `protected void` | `installListeners()` |
    `void` | `installUI(JComponent c)` | Installs the receiver as the L&F for the passed in `JOptionPane`.
    `protected void` | `resetInputValue()` | Sets the input value in the option pane the receiver is providing the look and feel for based on the value in the inputComponent.
    `void` | `selectInitialValue(JOptionPane op)` | If inputComponent is non-null, the focus is requested on that, otherwise request focus on the default value
    `protected void` | `uninstallComponents()` |
    `protected void` | `uninstallDefaults()` |
    `protected void` | `uninstallKeyboardActions()` |
    `protected void` | `uninstallListeners()` |
    `void` | `uninstallUI(JComponent c)` | Removes the receiver from the L&F controller of the passed in split pane.

    - ### Methods inherited from class javax.swing.plaf.ComponentUI

      `contains, getAccessibleChild, getAccessibleChildrenCount, getBaseline, getBaselineResizeBehavior, getMaximumSize, getMinimumSize, paint, update`

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

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

- - ### Field Detail

    - #### MinimumWidth

          public static final int MinimumWidth

      See Also:
        Constant Field Values

    - #### MinimumHeight

          public static final int MinimumHeight

      See Also:
        Constant Field Values

    - #### optionPane

          protected JOptionPane optionPane

      `JOptionPane` that the receiver is providing the look and feel for.

    - #### minimumSize

          protected Dimension minimumSize

    - #### inputComponent

          protected JComponent inputComponent

      JComponent provide for input if optionPane.getWantsInput() returns true.

    - #### initialFocusComponent

          protected Component initialFocusComponent

      Component to receive focus when messaged with selectInitialValue.

    - #### hasCustomComponents

          protected boolean hasCustomComponents

      This is set to true in validateComponent if a Component is contained in either the message or the buttons.

    - #### propertyChangeListener

          protected PropertyChangeListener propertyChangeListener

  - ### Constructor Detail

    - #### BasicOptionPaneUI

          public BasicOptionPaneUI()

  - ### Method Detail

    - #### createUI

          public static ComponentUI createUI(JComponent x)

      Creates a new BasicOptionPaneUI instance.

    - #### installUI

          public void installUI(JComponent c)

      Installs the receiver as the L&F for the passed in `JOptionPane`.
      Overrides:
        `installUI` in class `ComponentUI`
      Parameters:
        `c` - the component where this UI delegate is being installed
      See Also:
        `ComponentUI.uninstallUI(javax.swing.JComponent)`, `JComponent.setUI(javax.swing.plaf.ComponentUI)`, `JComponent.updateUI()`

    - #### uninstallUI

          public void uninstallUI(JComponent c)

      Removes the receiver from the L&F controller of the passed in split pane.
      Overrides:
        `uninstallUI` in class `ComponentUI`
      Parameters:
        `c` - the component from which this UI delegate is being removed; this argument is often ignored, but might be used if the UI object is stateless and shared by multiple components
      See Also:
        `ComponentUI.installUI(javax.swing.JComponent)`, `JComponent.updateUI()`

    - #### installDefaults

          protected void installDefaults()

    - #### uninstallDefaults

          protected void uninstallDefaults()

    - #### installComponents

          protected void installComponents()

    - #### uninstallComponents

          protected void uninstallComponents()

    - #### createLayoutManager

          protected LayoutManager createLayoutManager()

    - #### installListeners

          protected void installListeners()

    - #### uninstallListeners

          protected void uninstallListeners()

    - #### createPropertyChangeListener

          protected PropertyChangeListener createPropertyChangeListener()

    - #### installKeyboardActions

          protected void installKeyboardActions()

    - #### uninstallKeyboardActions

          protected void uninstallKeyboardActions()

    - #### getMinimumOptionPaneSize

          public Dimension getMinimumOptionPaneSize()

      Returns the minimum size the option pane should be. Primarily provided for subclassers wishing to offer a different minimum size.

    - #### getPreferredSize

          public Dimension getPreferredSize(JComponent c)

      If `c` is the `JOptionPane` the receiver is contained in, the preferred size that is returned is the maximum of the preferred size of the `LayoutManager` for the `JOptionPane`, and `getMinimumOptionPaneSize`.
      Overrides:
        `getPreferredSize` in class `ComponentUI`
      Parameters:
        `c` - the component whose preferred size is being queried; this argument is often ignored, but might be used if the UI object is stateless and shared by multiple components
      See Also:
        `JComponent.getPreferredSize()`, `LayoutManager.preferredLayoutSize(java.awt.Container)`

    - #### createMessageArea

          protected Container createMessageArea()

      Messaged from installComponents to create a Container containing the body of the message. The icon is the created by calling `addIcon`.

    - #### addMessageComponents

          protected void addMessageComponents(Container container,
                                              GridBagConstraints cons,
                                              Object msg,
                                              int maxll,
                                              boolean internallyCreated)

      Creates the appropriate object to represent `msg` and places it into `container`. If `msg` is an instance of Component, it is added directly, if it is an Icon, a JLabel is created to represent it, otherwise a JLabel is created for the string, if `d` is an Object[], this method will be recursively invoked for the children. `internallyCreated` is true if Objc is an instance of Component and was created internally by this method (this is used to correctly set hasCustomComponents only if !internallyCreated).

    - #### getMessage

          protected Object getMessage()

      Returns the message to display from the JOptionPane the receiver is providing the look and feel for.

    - #### addIcon

          protected void addIcon(Container top)

      Creates and adds a JLabel representing the icon returned from `getIcon` to `top`. This is messaged from `createMessageArea`

    - #### getIcon

          protected Icon getIcon()

      Returns the icon from the JOptionPane the receiver is providing the look and feel for, or the default icon as returned from `getDefaultIcon`.

    - #### getIconForType

          protected Icon getIconForType(int messageType)

      Returns the icon to use for the passed in type.

    - #### getMaxCharactersPerLineCount

          protected int getMaxCharactersPerLineCount()

      Returns the maximum number of characters to place on a line.

    - #### burstStringInto

          protected void burstStringInto(Container c,
                                         String d,
                                         int maxll)

      Recursively creates new JLabel instances to represent `d`. Each JLabel instance is added to `c`.

    - #### createSeparator

          protected Container createSeparator()

    - #### createButtonArea

          protected Container createButtonArea()

      Creates and returns a Container containing the buttons. The buttons are created by calling `getButtons`.

    - #### addButtonComponents

          protected void addButtonComponents(Container container,
                                             Object[] buttons,
                                             int initialIndex)

      Creates the appropriate object to represent each of the objects in `buttons` and adds it to `container`. This differs from addMessageComponents in that it will recurse on `buttons` and that if button is not a Component it will create an instance of JButton.

    - #### createButtonActionListener

          protected ActionListener createButtonActionListener(int buttonIndex)

    - #### getButtons

          protected Object[] getButtons()

      Returns the buttons to display from the JOptionPane the receiver is providing the look and feel for. If the JOptionPane has options set, they will be provided, otherwise if the optionType is YES_NO_OPTION, yesNoOptions is returned, if the type is YES_NO_CANCEL_OPTION yesNoCancelOptions is returned, otherwise defaultButtons are returned.

    - #### getSizeButtonsToSameWidth

          protected boolean getSizeButtonsToSameWidth()

      Returns true, basic L&F wants all the buttons to have the same width.

    - #### getInitialValueIndex

          protected int getInitialValueIndex()

      Returns the initial index into the buttons to select. The index is calculated from the initial value from the JOptionPane and options of the JOptionPane or 0.

    - #### resetInputValue

          protected void resetInputValue()

      Sets the input value in the option pane the receiver is providing the look and feel for based on the value in the inputComponent.

    - #### selectInitialValue

          public void selectInitialValue(JOptionPane op)

      If inputComponent is non-null, the focus is requested on that, otherwise request focus on the default value
      Specified by:
        `selectInitialValue` in class `OptionPaneUI`

    - #### containsCustomComponents

          public boolean containsCustomComponents(JOptionPane op)

      Returns true if in the last call to validateComponent the message or buttons contained a subclass of Component.
      Specified by:
        `containsCustomComponents` in class `OptionPaneUI`

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.