# Class SynthListUI

java.lang.Object
javax.swing.plaf.ComponentUI
javax.swing.plaf.ListUI
javax.swing.plaf.basic.BasicListUI
javax.swing.plaf.synth.SynthListUI

All Implemented Interfaces:
  `PropertyChangeListener, EventListener, SynthConstants, SynthUI`

public class SynthListUI extends BasicListUI implements PropertyChangeListener, SynthUI
Provides the Synth L&F UI delegate for `JList`.

Since:
  1.7

- ## Nested Class Summary

  ### Nested classes/interfaces declared in class BasicListUI

  `BasicListUI.FocusHandler, BasicListUI.ListDataHandler, BasicListUI.ListSelectionHandler, BasicListUI.MouseInputHandler, BasicListUI.PropertyChangeHandler`
  Modifier and Type
  Class
  Description
  `class`
  `BasicListUI.FocusHandler`
  This class should be treated as a "protected" inner class.
  `class`
  `BasicListUI.ListDataHandler`
  The `ListDataListener` that's added to the `JLists` model at `installUI time`, and whenever the JList.model property changes.
  `class`
  `BasicListUI.ListSelectionHandler`
  The ListSelectionListener that's added to the JLists selection model at installUI time, and whenever the JList.selectionModel property changes.
  `class`
  `BasicListUI.MouseInputHandler`
  Mouse input, and focus handling for JList.
  `class`
  `BasicListUI.PropertyChangeHandler`
  The PropertyChangeListener that's added to the JList at installUI time.

- ## Field Summary

  ### Fields declared in class BasicListUI

  `cellHeight, cellHeights, cellRendererChanged, cellWidth, fixedCellHeightChanged, fixedCellWidthChanged, focusListener, fontChanged, list, listDataListener, listSelectionListener, modelChanged, mouseInputListener, propertyChangeListener, prototypeCellValueChanged, rendererPane, selectionModelChanged, updateLayoutStateNeeded`
  Modifier and Type
  Field
  Description
  `protected int`
  `cellHeight`
  The height of cell.
  `protected int[]`
  `cellHeights`
  The array of cells' height
  `protected static final int`
  `cellRendererChanged`
  The bit relates to cell renderer changed property.
  `protected int`
  `cellWidth`
  The width of cell.
  `protected static final int`
  `fixedCellHeightChanged`
  The bit relates to fixed cell height changed property.
  `protected static final int`
  `fixedCellWidthChanged`
  The bit relates to fixed cell width changed property.
  `protected FocusListener`
  `focusListener`
  `FocusListener` that attached to `JList`.
  `protected static final int`
  `fontChanged`
  The bit relates to font changed property.
  `protected JList<Object>`
  `list`
  The instance of `JList`.
  `protected ListDataListener`
  `listDataListener`
  `ListDataListener` that attached to `JList`.
  `protected ListSelectionListener`
  `listSelectionListener`
  `ListSelectionListener` that attached to `JList`.
  `protected static final int`
  `modelChanged`
  The bit relates to model changed property.
  `protected MouseInputListener`
  `mouseInputListener`
  `MouseInputListener` that attached to `JList`.
  `protected PropertyChangeListener`
  `propertyChangeListener`
  `PropertyChangeListener` that attached to `JList`.
  `protected static final int`
  `prototypeCellValueChanged`
  The bit relates to prototype cell value changed property.
  `protected CellRendererPane`
  `rendererPane`
  The instance of `CellRendererPane`.
  `protected static final int`
  `selectionModelChanged`
  The bit relates to selection model changed property.
  `protected int`
  `updateLayoutStateNeeded`
  The value represents changes to `JList` model.

  ### Fields declared in interface SynthConstants

  `DEFAULT, DISABLED, ENABLED, FOCUSED, MOUSE_OVER, PRESSED, SELECTED`
  Modifier and Type
  Field
  Description
  `static final int`
  `DEFAULT`
  Indicates the region is the default.
  `static final int`
  `DISABLED`
  Primary state indicating the region is not enabled.
  `static final int`
  `ENABLED`
  Primary state indicating the component is enabled.
  `static final int`
  `FOCUSED`
  Indicates the region has focus.
  `static final int`
  `MOUSE_OVER`
  Primary state indicating the mouse is over the region.
  `static final int`
  `PRESSED`
  Primary state indicating the region is in a pressed state.
  `static final int`
  `SELECTED`
  Indicates the region is selected.

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `SynthListUI()`
  Constructs a `SynthListUI`.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `static ComponentUI`
  `createUI(JComponent list)`
  Creates a new UI object for the given component.
  `SynthContext`
  `getContext(JComponent c)`
  Returns the Context for the specified component.
  `void`
  `paintBorder(SynthContext context, Graphics g, int x, int y, int w, int h)`
  Paints the border.
  `void`
  `propertyChange(PropertyChangeEvent e)`
  This method gets called when a bound property is changed.
  `void`
  `update(Graphics g, JComponent c)`
  Notifies this UI delegate to repaint the specified component.

  ### Methods declared in class BasicListUI

  `convertRowToY, convertYToRow, createFocusListener, createListDataListener, createListSelectionListener, createMouseInputListener, createPropertyChangeListener, getBaseline, getBaselineResizeBehavior, getCellBounds, getPreferredSize, getRowHeight, indexToLocation, installDefaults, installKeyboardActions, installListeners, installUI, locationToIndex, maybeUpdateLayoutState, paint, paintCell, selectNextIndex, selectPreviousIndex, uninstallDefaults, uninstallKeyboardActions, uninstallListeners, uninstallUI, updateLayoutState`
  Modifier and Type
  Method
  Description
  `protected int`
  `convertRowToY(int row)`
  Return the `JList` relative Y coordinate of the origin of the specified row or -1 if row isn't valid.
  `protected int`
  `convertYToRow(int y0)`
  Convert the `JList` relative coordinate to the row that contains it, based on the current layout.
  `protected FocusListener`
  `createFocusListener()`
  Returns an instance of `FocusListener`.
  `protected ListDataListener`
  `createListDataListener()`
  Creates an instance of `ListDataListener` that's added to the `JLists` by model as needed.
  `protected ListSelectionListener`
  `createListSelectionListener()`
  Creates an instance of `ListSelectionHandler` that's added to the `JLists` by selectionModel as needed.
  `protected MouseInputListener`
  `createMouseInputListener()`
  Creates a delegate that implements `MouseInputListener`.
  `protected PropertyChangeListener`
  `createPropertyChangeListener()`
  Creates an instance of `PropertyChangeHandler` that's added to the `JList` by `installUI()`.
  `int`
  `getBaseline(JComponent c, int width, int height)`
  Returns the baseline.
  `Component.BaselineResizeBehavior`
  `getBaselineResizeBehavior(JComponent c)`
  Returns an enum indicating how the baseline of the component changes as the size changes.
  `Rectangle`
  `getCellBounds(JList<?> list, int index1, int index2)`
  Returns the bounding rectangle, in the given list's coordinate system, for the range of cells specified by the two indices.
  `Dimension`
  `getPreferredSize(JComponent c)`
  The preferredSize of the list depends upon the layout orientation.
  `protected int`
  `getRowHeight(int row)`
  Returns the height of the specified row based on the current layout.
  `Point`
  `indexToLocation(JList<?> list, int index)`
  Returns the origin in the given `JList`, of the specified item, in the list's coordinate system.
  `protected void`
  `installDefaults()`
  Initializes list properties such as font, foreground, and background, and adds the CellRendererPane.
  `protected void`
  `installKeyboardActions()`
  Registers the keyboard bindings on the `JList` that the `BasicListUI` is associated with.
  `protected void`
  `installListeners()`
  Creates and installs the listeners for the JList, its model, and its selectionModel.
  `void`
  `installUI(JComponent c)`
  Initializes `this.list` by calling `installDefaults()`, `installListeners()`, and `installKeyboardActions()` in order.
  `int`
  `locationToIndex(JList<?> list, Point location)`
  Returns the cell index in the specified `JList` closest to the given location in the list's coordinate system.
  `protected void`
  `maybeUpdateLayoutState()`
  If updateLayoutStateNeeded is non zero, call updateLayoutState() and reset updateLayoutStateNeeded.
  `void`
  `paint(Graphics g, JComponent c)`
  Paint the rows that intersect the Graphics objects clipRect.
  `protected void`
  `paintCell(Graphics g, int row, Rectangle rowBounds, ListCellRenderer<Object> cellRenderer, ListModel<Object> dataModel, ListSelectionModel selModel, int leadIndex)`
  Paint one List cell: compute the relevant state, get the "rubber stamp" cell renderer component, and then use the `CellRendererPane` to paint it.
  `protected void`
  `selectNextIndex()`
  Selected the previous row and force it to be visible.
  `protected void`
  `selectPreviousIndex()`
  Selected the previous row and force it to be visible.
  `protected void`
  `uninstallDefaults()`
  Sets the list properties that have not been explicitly overridden to `null`.
  `protected void`
  `uninstallKeyboardActions()`
  Unregisters keyboard actions installed from `installKeyboardActions`.
  `protected void`
  `uninstallListeners()`
  Removes the listeners from the JList, its model, and its selectionModel.
  `void`
  `uninstallUI(JComponent c)`
  Uninitializes `this.list` by calling `uninstallListeners()`, `uninstallKeyboardActions()`, and `uninstallDefaults()` in order.
  `protected void`
  `updateLayoutState()`
  Recompute the value of cellHeight or cellHeights based and cellWidth, based on the current font and the current values of fixedCellWidth, fixedCellHeight, and prototypeCellValue.

  ### Methods declared in class ComponentUI

  `contains, getAccessibleChild, getAccessibleChildrenCount, getMaximumSize, getMinimumSize`
  Modifier and Type
  Method
  Description
  `boolean`
  `contains(JComponent c, int x, int y)`
  Returns `true` if the specified x,y location is contained within the look and feel's defined shape of the specified component.
  `Accessible`
  `getAccessibleChild(JComponent c, int i)`
  Returns the `i`th `Accessible` child of the object.
  `int`
  `getAccessibleChildrenCount(JComponent c)`
  Returns the number of accessible children in the object.
  `Dimension`
  `getMaximumSize(JComponent c)`
  Returns the specified component's maximum size appropriate for the look and feel.
  `Dimension`
  `getMinimumSize(JComponent c)`
  Returns the specified component's minimum size appropriate for the look and feel.

  ### Methods declared in class Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`
  Modifier and Type
  Method
  Description
  `protected Object`
  `clone()`
  Creates and returns a copy of this object.
  `boolean`
  `equals(Object obj)`
  Indicates whether some other object is "equal to" this one.
  `protected void`
  `finalize()`
  Deprecated, for removal: This API element is subject to removal in a future version.
  Finalization is deprecated and subject to removal in a future release.
  `final Class<?>`
  `getClass()`
  Returns the runtime class of this `Object`.
  `int`
  `hashCode()`
  Returns a hash code value for this object.
  `final void`
  `notify()`
  Wakes up a single thread that is waiting on this object's monitor.
  `final void`
  `notifyAll()`
  Wakes up all threads that are waiting on this object's monitor.
  `String`
  `toString()`
  Returns a string representation of the object.
  `final void`
  `wait()`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted.
  `final void`
  `wait(long timeoutMillis)`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.
  `final void`
  `wait(long timeoutMillis, int nanos)`
  Causes the current thread to wait until it is awakened, typically by being notified or interrupted, or until a certain amount of real time has elapsed.

- ## Constructor Details

  - ### SynthListUI

    public SynthListUI()
    Constructs a `SynthListUI`.

- ## Method Details

  - ### createUI

    public static ComponentUI createUI(JComponent list)
    Creates a new UI object for the given component.
    Parameters:
      `list` - component to create UI object for
    Returns:
      the UI object

  - ### update

    public void update(Graphics g, JComponent c)
    Notifies this UI delegate to repaint the specified component. This method paints the component background, then calls the `BasicListUI.paint(Graphics, JComponent)` method.

    In general, this method does not need to be overridden by subclasses. All Look and Feel rendering code should reside in the `paint` method.

    Overrides:
      `update` in class `ComponentUI`
    Parameters:
      `g` - the `Graphics` object used for painting
      `c` - the component being painted
    See Also:
      - `BasicListUI.paint(Graphics, JComponent)`

  - ### paintBorder

    public void paintBorder(SynthContext context, Graphics g, int x, int y, int w, int h)
    Paints the border.
    Specified by:
      `paintBorder` in interface `SynthUI`
    Parameters:
      `context` - a component context
      `g` - `Graphics` to paint on
      `x` - the X coordinate
      `y` - the Y coordinate
      `w` - width of the border
      `h` - height of the border

  - ### propertyChange

    public void propertyChange(PropertyChangeEvent e)
    This method gets called when a bound property is changed.
    Specified by:
      `propertyChange` in interface `PropertyChangeListener`
    Parameters:
      `e` - A PropertyChangeEvent object describing the event source and the property that has changed.

  - ### getContext

    public SynthContext getContext(JComponent c)
    Returns the Context for the specified component.
    Specified by:
      `getContext` in interface `SynthUI`
    Parameters:
      `c` - Component requesting SynthContext.
    Returns:
      SynthContext describing component.