javax.swing.plaf.metal

## Class MetalTreeUI

- java.lang.Object
- - javax.swing.plaf.ComponentUI
  - - javax.swing.plaf.TreeUI
    - - javax.swing.plaf.basic.BasicTreeUI
      - - javax.swing.plaf.metal.MetalTreeUI

    public class MetalTreeUI
    extends BasicTreeUI

The metal look and feel implementation of `TreeUI`.

`MetalTreeUI` allows for configuring how to visually render the spacing and delineation between nodes. The following hints are supported:

Angled | A line is drawn connecting the child to the parent. For handling of the root node refer to `JTree.setRootVisible(boolean)` and `JTree.setShowsRootHandles(boolean)`.
Horizontal | A horizontal line is drawn dividing the children of the root node.
None | Do not draw any visual indication between nodes.

As it is typically impractical to obtain the `TreeUI` from the `JTree` and cast to an instance of `MetalTreeUI` you enable this property via the client property `JTree.lineStyle`. For example, to switch to `Horizontal` style you would do: `tree.putClientProperty("JTree.lineStyle", "Horizontal");`

The default is `Angled`.

### Nested Class Summary

### Nested classes/interfaces inherited from class javax.swing.plaf.basic.BasicTreeUI

`BasicTreeUI.CellEditorHandler, BasicTreeUI.ComponentHandler, BasicTreeUI.FocusHandler, BasicTreeUI.KeyHandler, BasicTreeUI.MouseHandler, BasicTreeUI.MouseInputHandler, BasicTreeUI.NodeDimensionsHandler, BasicTreeUI.PropertyChangeHandler, BasicTreeUI.SelectionModelPropertyChangeHandler, BasicTreeUI.TreeCancelEditingAction, BasicTreeUI.TreeExpansionHandler, BasicTreeUI.TreeHomeAction, BasicTreeUI.TreeIncrementAction, BasicTreeUI.TreeModelHandler, BasicTreeUI.TreePageAction, BasicTreeUI.TreeSelectionHandler, BasicTreeUI.TreeToggleAction, BasicTreeUI.TreeTraverseAction`

### Field Summary

### Fields inherited from class javax.swing.plaf.basic.BasicTreeUI

`cellEditor, collapsedIcon, createdCellEditor, createdRenderer, currentCellRenderer, depthOffset, drawingCache, editingComponent, editingPath, editingRow, editorHasDifferentSize, expandedIcon, largeModel, lastSelectedRow, leftChildIndent, nodeDimensions, preferredMinSize, preferredSize, rendererPane, rightChildIndent, stopEditingInCompleteEditing, totalChildIndent, tree, treeModel, treeSelectionModel, treeState, validCachedPreferredSize`

### Constructor Summary

Constructors
Constructor and Description
`MetalTreeUI()`

### Method Summary

All Methods Static Methods Instance Methods Concrete Methods
`static ComponentUI` `createUI(JComponent x)`
`protected void` `decodeLineStyle(Object lineStyleFlag)` this function converts between the string passed into the client property and the internal representation (currently and int)
`protected int` `getHorizontalLegBuffer()` The horizontal element of legs between nodes starts at the right of the left-hand side of the child node by default.
`void` `installUI(JComponent c)` Configures the specified component appropriately for the look and feel.
`protected boolean` `isLocationInExpandControl(int row, int rowLevel, int mouseX, int mouseY)`
`void` `paint(Graphics g, JComponent c)` Paints the specified component appropriately for the look and feel.
`protected void` `paintHorizontalPartOfLeg(Graphics g, Rectangle clipBounds, Insets insets, Rectangle bounds, TreePath path, int row, boolean isExpanded, boolean hasBeenExpanded, boolean isLeaf)` Paints the horizontal part of the leg.
`protected void` `paintHorizontalSeparators(Graphics g, JComponent c)`
`protected void` `paintVerticalPartOfLeg(Graphics g, Rectangle clipBounds, Insets insets, TreePath path)` Paints the vertical part of the leg.
`void` `uninstallUI(JComponent c)` Reverses configuration which was done on the specified component during `installUI`.

### Methods inherited from class javax.swing.plaf.basic.BasicTreeUI

`cancelEditing, checkForClickInExpandControl, completeEditing, completeEditing, completeUIInstall, completeUIUninstall, configureLayoutCache, createCellEditorListener, createCellRendererPane, createComponentListener, createDefaultCellEditor, createDefaultCellRenderer, createFocusListener, createKeyListener, createLayoutCache, createMouseListener, createNodeDimensions, createPropertyChangeListener, createSelectionModelPropertyChangeListener, createTreeExpansionListener, createTreeModelListener, createTreeSelectionListener, drawCentered, drawDashedHorizontalLine, drawDashedVerticalLine, ensureRowsAreVisible, getBaseline, getBaselineResizeBehavior, getCellEditor, getCellRenderer, getClosestPathForLocation, getCollapsedIcon, getDropLineRect, getEditingPath, getExpandedIcon, getHashColor, getLastChildPath, getLeadSelectionRow, getLeftChildIndent, getMaximumSize, getMinimumSize, getModel, getPathBounds, getPathForRow, getPreferredMinSize, getPreferredSize, getPreferredSize, getRightChildIndent, getRowCount, getRowForPath, getRowHeight, getRowX, getSelectionModel, getShowsRootHandles, getVerticalLegBuffer, handleExpandControlClick, installComponents, installDefaults, installKeyboardActions, installListeners, isDropLine, isEditable, isEditing, isLargeModel, isLeaf, isLocationInExpandControl, isMultiSelectEvent, isRootVisible, isToggleEvent, isToggleSelectionEvent, paintDropLine, paintExpandControl, paintHorizontalLine, paintRow, paintVerticalLine, pathWasCollapsed, pathWasExpanded, prepareForUIInstall, prepareForUIUninstall, selectPathForEvent, setCellEditor, setCellRenderer, setCollapsedIcon, setEditable, setExpandedIcon, setHashColor, setLargeModel, setLeftChildIndent, setModel, setPreferredMinSize, setRightChildIndent, setRootVisible, setRowHeight, setSelectionModel, setShowsRootHandles, shouldPaintExpandControl, startEditing, startEditingAtPath, stopEditing, toggleExpandState, uninstallComponents, uninstallDefaults, uninstallKeyboardActions, uninstallListeners, updateCachedPreferredSize, updateCellEditor, updateDepthOffset, updateExpandedDescendants, updateLayoutCacheExpandedNodes, updateLeadSelectionRow, updateRenderer, updateSize`

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

`contains, getAccessibleChild, getAccessibleChildrenCount, update`

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

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

### Constructor Detail

#### MetalTreeUI

    public MetalTreeUI()

### Method Detail

#### createUI

    public static ComponentUI createUI(JComponent x)

#### getHorizontalLegBuffer

    protected int getHorizontalLegBuffer()

Description copied from class: `BasicTreeUI`
The horizontal element of legs between nodes starts at the right of the left-hand side of the child node by default. This method makes the leg end before that.

Overrides:
  `getHorizontalLegBuffer` in class `BasicTreeUI`

#### installUI

    public void installUI(JComponent c)

Description copied from class: `ComponentUI`
Configures the specified component appropriately for the look and feel. This method is invoked when the `ComponentUI` instance is being installed as the UI delegate on the specified component. This method should completely configure the component for the look and feel, including the following:

1. Install default property values for color, fonts, borders, icons, opacity, etc. on the component. Whenever possible, property values initialized by the client program should not be overridden.
2. Install a `LayoutManager` on the component if necessary.
3. Create/add any required sub-components to the component.
4. Create/install event listeners on the component.
5. Create/install a `PropertyChangeListener` on the component in order to detect and respond to component property changes appropriately.
6. Install keyboard UI (mnemonics, traversal, etc.) on the component.
7. Initialize any appropriate instance data.

Overrides:
  `installUI` in class `BasicTreeUI`
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)

Description copied from class: `ComponentUI`
Reverses configuration which was done on the specified component during `installUI`. This method is invoked when this `UIComponent` instance is being removed as the UI delegate for the specified component. This method should undo the configuration performed in `installUI`, being careful to leave the `JComponent` instance in a clean state (no extraneous listeners, look-and-feel-specific property objects, etc.). This should include the following:

1. Remove any UI-set borders from the component.
2. Remove any UI-set layout managers on the component.
3. Remove any UI-added sub-components from the component.
4. Remove any UI-added event/property listeners from the component.
5. Remove any UI-installed keyboard UI from the component.
6. Nullify any allocated instance data objects to allow for GC.

Overrides:
  `uninstallUI` in class `BasicTreeUI`
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()`

#### decodeLineStyle

    protected void decodeLineStyle(Object lineStyleFlag)

this function converts between the string passed into the client property and the internal representation (currently and int)

#### isLocationInExpandControl

    protected boolean isLocationInExpandControl(int row,
                                                int rowLevel,
                                                int mouseX,
                                                int mouseY)

#### paint

    public void paint(Graphics g,
                      JComponent c)

Description copied from class: `ComponentUI`
Paints the specified component appropriately for the look and feel. This method is invoked from the `ComponentUI.update` method when the specified component is being painted. Subclasses should override this method and use the specified `Graphics` object to render the content of the component.

Overrides:
  `paint` in class `BasicTreeUI`
Parameters:
  `g` - the `Graphics` context in which to paint
  `c` - the component being painted; this argument is often ignored, but might be used if the UI object is stateless and shared by multiple components
See Also:
  `ComponentUI.update(java.awt.Graphics, javax.swing.JComponent)`

#### paintHorizontalSeparators

    protected void paintHorizontalSeparators(Graphics g,
                                             JComponent c)

#### paintVerticalPartOfLeg

    protected void paintVerticalPartOfLeg(Graphics g,
                                          Rectangle clipBounds,
                                          Insets insets,
                                          TreePath path)

Description copied from class: `BasicTreeUI`
Paints the vertical part of the leg. The receiver should NOT modify `clipBounds`, `insets`.

Overrides:
  `paintVerticalPartOfLeg` in class `BasicTreeUI`

#### paintHorizontalPartOfLeg

    protected void paintHorizontalPartOfLeg(Graphics g,
                                            Rectangle clipBounds,
                                            Insets insets,
                                            Rectangle bounds,
                                            TreePath path,
                                            int row,
                                            boolean isExpanded,
                                            boolean hasBeenExpanded,
                                            boolean isLeaf)

Description copied from class: `BasicTreeUI`
Paints the horizontal part of the leg. The receiver should NOT modify `clipBounds`, or `insets`.

NOTE: `parentRow` can be -1 if the root is not visible.

Overrides:
  `paintHorizontalPartOfLeg` in class `BasicTreeUI`