PlasticTabbedPaneUI (JGoodies Looks 2.6 API)
Date: 2014-02-27

com.jgoodies.looks.plastic

## Class PlasticTabbedPaneUI

- java.lang.Object
- - javax.swing.plaf.ComponentUI
  - - javax.swing.plaf.TabbedPaneUI
    - - javax.swing.plaf.basic.BasicTabbedPaneUI
      - - javax.swing.plaf.metal.MetalTabbedPaneUI
        - - com.jgoodies.looks.plastic.PlasticTabbedPaneUI

- All Implemented Interfaces:
    SwingConstants

      public final class PlasticTabbedPaneUI
      extends MetalTabbedPaneUI

  The JGoodies Plastic Look&Feel implementation of `TabbedPaneUI`. It differs from its superclass `MetalTabbedPaneUI` in that it paints new tab shapes, provides two options, and supports ClearLook.

  You can enable or disable icons in tabs globally via com.jgoodies.looks.Options.setTabIconsEnabled(boolean).

  To disable the content border set

       JTabbedPane tabbedPane = new JTabbedPane();
       tabbedPane.putClientProperty(Option.NO_CONTENT_BORDER_KEY, Boolean.TRUE);

  To paint embedded tabs use

       JTabbedPane tabbedPane = new JTabbedPane();
       tabbedPane.putClientProperty(Option.EMBEDDED_TABS_KEY, Boolean.TRUE);

  There's a special mode that helps you detect content borders in heavily wrapped component hierarchies - such as the NetBeans IDE. In this marked mode the content border is painted as a Magenta line. You can enable this mode by setting the System property `markContentBorders` to `true`; in a command line:

       java -DmarkContentBorders=true

  Thanks to Andrej Golovnin for his feedback and suggestions.

  Version:
    $Revision: 1.15 $
  Author:
    Karsten Lentzsch
  See Also:
    `Options`

- - ### Nested Class Summary

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

      `BasicTabbedPaneUI.FocusHandler, BasicTabbedPaneUI.MouseHandler, BasicTabbedPaneUI.PropertyChangeHandler`

  - ### Field Summary

    - ### Fields inherited from class javax.swing.plaf.metal.MetalTabbedPaneUI

      `minTabWidth, selectColor, selectHighlight, tabAreaBackground`

    - ### Fields inherited from class javax.swing.plaf.basic.BasicTabbedPaneUI

      `calcRect, contentBorderInsets, darkShadow, downKey, focus, focusListener, highlight, leftKey, lightHighlight, maxTabHeight, maxTabWidth, mouseListener, propertyChangeListener, rects, rightKey, runCount, selectedRun, selectedTabPadInsets, shadow, tabAreaInsets, tabChangeListener, tabInsets, tabPane, tabRunOverlay, tabRuns, textIconGap, upKey`

    - ### Fields inherited from interface javax.swing.SwingConstants

      `BOTTOM, CENTER, EAST, HORIZONTAL, LEADING, LEFT, NEXT, NORTH, NORTH_EAST, NORTH_WEST, PREVIOUS, RIGHT, SOUTH, SOUTH_EAST, SOUTH_WEST, TOP, TRAILING, VERTICAL, WEST`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `PlasticTabbedPaneUI()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected ChangeListener` | `createChangeListener()`
    `protected LayoutManager` | `createLayoutManager()` Creates the layout manager used to set the tab's bounds.
    `protected PropertyChangeListener` | `createPropertyChangeListener()` Creates and answer a handler that listens to property changes.
    `static ComponentUI` | `createUI(JComponent tabPane)` Creates the `PlasticTabbedPaneUI`.
    `protected Insets` | `getContentBorderInsets(int tabPlacement)` Returns the insets (i.e. the width) of the content Border.
    `protected Icon` | `getIconForTab(int tabIndex)` Answers the icon for the tab with the specified index.
    `protected Insets` | `getSelectedTabPadInsets(int tabPlacement)` Returns the insets for selected tab.
    `protected Insets` | `getTabAreaInsets(int tabPlacement)` Returns the amount by which the Tab Area is inset.
    `protected Rectangle` | `getTabBounds(int tabIndex, Rectangle dest)`
    `protected Insets` | `getTabInsets(int tabPlacement, int tabIndex)` Returns the insets for this tab.
    `protected int` | `getTabLabelShiftX(int tabPlacement, int tabIndex, boolean isSelected)` Returns the amount by which the label should be shifted horizontally.
    `protected int` | `getTabLabelShiftY(int tabPlacement, int tabIndex, boolean isSelected)` Returns the amount by which the label should be shifted vertically.
    `protected int` | `getTabRunIndent(int tabPlacement, int run)` Returns the amount by which the run number `run` should be indented.
    `protected int` | `getTabRunOverlay(int tabPlacement)` Returns the amount (in pixels) by which two runs should overlap.
    `protected void` | `installComponents()` Creates and installs any required subcomponents for the JTabbedPane.
    `protected void` | `installKeyboardActions()`
    `void` | `installUI(JComponent c)` Installs the UI.
    `protected boolean` | `isTabInFirstRun(int tabIndex)`
    `protected void` | `layoutLabel(int tabPlacement, FontMetrics metrics, int tabIndex, String title, Icon icon, Rectangle tabRect, Rectangle iconRect, Rectangle textRect, boolean isSelected)`
    `void` | `paint(Graphics g, JComponent c)`
    `protected void` | `paintContentBorder(Graphics g, int tabPlacement, int selectedIndex)`
    `protected void` | `paintFocusIndicator(Graphics g, int tabPlacement, Rectangle[] rectangles, int tabIndex, Rectangle iconRect, Rectangle textRect, boolean isSelected)` Draws the rectancle around the Tab label which indicates keyboard focus.
    `protected void` | `paintTab(Graphics g, int tabPlacement, Rectangle[] rects, int tabIndex, Rectangle iconRect, Rectangle textRect)`
    `protected void` | `paintTabArea(Graphics g, int tabPlacement, int selectedIndex)`
    `protected void` | `paintTabBackground(Graphics g, int tabPlacement, int tabIndex, int x, int y, int w, int h, boolean isSelected)` Fills the background of the given tab to make sure overlap of tabs is handled correctly.
    `protected void` | `paintTabBorder(Graphics g, int tabPlacement, int tabIndex, int x, int y, int w, int h, boolean isSelected)` Paints the border for one tab.
    `protected boolean` | `shouldPadTabRun(int tabPlacement, int run)` This boolean controls wheather the given run should be padded to use up as much space as the others (with more tabs in them).
    `protected boolean` | `shouldRotateTabRuns(int tabPlacement)` Answers wheather tab runs should be rotated.
    `int` | `tabForCoordinate(JTabbedPane pane, int x, int y)` Returns the tab index which intersects the specified point in the JTabbedPane's coordinate space.
    `protected void` | `uninstallComponents()` Removes any installed subcomponents from the JTabbedPane.
    `void` | `uninstallUI(JComponent c)` Uninstalls the UI.

    - ### Methods inherited from class javax.swing.plaf.metal.MetalTabbedPaneUI

      `calculateMaxTabHeight, getBaselineOffset, getColorForGap, installDefaults, paintBottomTabBorder, paintContentBorderBottomEdge, paintContentBorderLeftEdge, paintContentBorderRightEdge, paintContentBorderTopEdge, paintHighlightBelowTab, paintLeftTabBorder, paintRightTabBorder, paintTopTabBorder, shouldFillGap, shouldRotateTabRuns, update`

    - ### Methods inherited from class javax.swing.plaf.basic.BasicTabbedPaneUI

      `assureRectsCreated, calculateMaxTabWidth, calculateTabAreaHeight, calculateTabAreaWidth, calculateTabHeight, calculateTabWidth, createFocusListener, createMouseListener, createScrollButton, expandTabRunsArray, getBaseline, getBaseline, getBaselineResizeBehavior, getFocusIndex, getFontMetrics, getMaximumSize, getMinimumSize, getNextTabIndex, getNextTabIndexInRun, getNextTabRun, getPreviousTabIndex, getPreviousTabIndexInRun, getPreviousTabRun, getRolloverTab, getRunForTab, getTabBounds, getTabRunCount, getTabRunOffset, getTextViewForTab, getVisibleComponent, installListeners, lastTabInRun, navigateSelectedTab, paintIcon, paintText, rotateInsets, selectAdjacentRunTab, selectNextTab, selectNextTabInRun, selectPreviousTab, selectPreviousTabInRun, setRolloverTab, setVisibleComponent, uninstallDefaults, uninstallKeyboardActions, uninstallListeners`

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

      `contains, getAccessibleChild, getAccessibleChildrenCount, getPreferredSize`

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

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

- - ### Constructor Detail

    - #### PlasticTabbedPaneUI

          public PlasticTabbedPaneUI()

  - ### Method Detail

    - #### createUI

          public static ComponentUI createUI(JComponent tabPane)

      Creates the `PlasticTabbedPaneUI`.
      See Also:
        `ComponentUI.createUI(JComponent)`

    - #### installUI

          public void installUI(JComponent c)

      Installs the UI.
      Overrides:
        `installUI` in class `BasicTabbedPaneUI`
      See Also:
        `ComponentUI.installUI(JComponent)`

    - #### uninstallUI

          public void uninstallUI(JComponent c)

      Uninstalls the UI.
      Overrides:
        `uninstallUI` in class `BasicTabbedPaneUI`
      See Also:
        `ComponentUI.uninstallUI(JComponent)`

    - #### installComponents

          protected void installComponents()

      Creates and installs any required subcomponents for the JTabbedPane. Invoked by installUI.
      Overrides:
        `installComponents` in class `BasicTabbedPaneUI`
      See Also:
        `BasicTabbedPaneUI.installComponents()`

    - #### uninstallComponents

          protected void uninstallComponents()

      Removes any installed subcomponents from the JTabbedPane. Invoked by uninstallUI.
      Overrides:
        `uninstallComponents` in class `BasicTabbedPaneUI`
      See Also:
        `BasicTabbedPaneUI.uninstallComponents()`

    - #### installKeyboardActions

          protected void installKeyboardActions()

      Overrides:
        `installKeyboardActions` in class `BasicTabbedPaneUI`

    - #### createPropertyChangeListener

          protected PropertyChangeListener createPropertyChangeListener()

      Creates and answer a handler that listens to property changes. Unlike the superclass BasicTabbedPane, the PlasticTabbedPaneUI uses an extended Handler.
      Overrides:
        `createPropertyChangeListener` in class `BasicTabbedPaneUI`

    - #### createChangeListener

          protected ChangeListener createChangeListener()

      Overrides:
        `createChangeListener` in class `BasicTabbedPaneUI`

    - #### paint

          public void paint(Graphics g,
                   JComponent c)

      Overrides:
        `paint` in class `MetalTabbedPaneUI`

    - #### paintTab

          protected void paintTab(Graphics g,
                      int tabPlacement,
                      Rectangle[] rects,
                      int tabIndex,
                      Rectangle iconRect,
                      Rectangle textRect)

      Overrides:
        `paintTab` in class `BasicTabbedPaneUI`

    - #### tabForCoordinate

          public int tabForCoordinate(JTabbedPane pane,
                             int x,
                             int y)

      Returns the tab index which intersects the specified point in the JTabbedPane's coordinate space.
      Overrides:
        `tabForCoordinate` in class `BasicTabbedPaneUI`

    - #### getTabBounds

          protected Rectangle getTabBounds(int tabIndex,
                               Rectangle dest)

      Overrides:
        `getTabBounds` in class `BasicTabbedPaneUI`

    - #### paintTabArea

          protected void paintTabArea(Graphics g,
                          int tabPlacement,
                          int selectedIndex)

      Overrides:
        `paintTabArea` in class `BasicTabbedPaneUI`

    - #### layoutLabel

          protected void layoutLabel(int tabPlacement,
                         FontMetrics metrics,
                         int tabIndex,
                         String title,
                         Icon icon,
                         Rectangle tabRect,
                         Rectangle iconRect,
                         Rectangle textRect,
                         boolean isSelected)

      Overrides:
        `layoutLabel` in class `BasicTabbedPaneUI`

    - #### getIconForTab

          protected Icon getIconForTab(int tabIndex)

      Answers the icon for the tab with the specified index. In case, we have globally switched of the use tab icons, we answer `null` if and only if we have a title.
      Overrides:
        `getIconForTab` in class `BasicTabbedPaneUI`

    - #### createLayoutManager

          protected LayoutManager createLayoutManager()

      Creates the layout manager used to set the tab's bounds.
      Overrides:
        `createLayoutManager` in class `MetalTabbedPaneUI`

    - #### isTabInFirstRun

          protected boolean isTabInFirstRun(int tabIndex)

    - #### paintContentBorder

          protected void paintContentBorder(Graphics g,
                                int tabPlacement,
                                int selectedIndex)

      Overrides:
        `paintContentBorder` in class `BasicTabbedPaneUI`

    - #### getContentBorderInsets

          protected Insets getContentBorderInsets(int tabPlacement)

      Returns the insets (i.e. the width) of the content Border.
      Overrides:
        `getContentBorderInsets` in class `BasicTabbedPaneUI`

    - #### getTabAreaInsets

          protected Insets getTabAreaInsets(int tabPlacement)

      Returns the amount by which the Tab Area is inset.
      Overrides:
        `getTabAreaInsets` in class `BasicTabbedPaneUI`

    - #### getTabLabelShiftX

          protected int getTabLabelShiftX(int tabPlacement,
                              int tabIndex,
                              boolean isSelected)

      Returns the amount by which the label should be shifted horizontally.
      Overrides:
        `getTabLabelShiftX` in class `MetalTabbedPaneUI`

    - #### getTabLabelShiftY

          protected int getTabLabelShiftY(int tabPlacement,
                              int tabIndex,
                              boolean isSelected)

      Returns the amount by which the label should be shifted vertically.
      Overrides:
        `getTabLabelShiftY` in class `MetalTabbedPaneUI`

    - #### getTabRunOverlay

          protected int getTabRunOverlay(int tabPlacement)

      Returns the amount (in pixels) by which two runs should overlap.
      Overrides:
        `getTabRunOverlay` in class `MetalTabbedPaneUI`

    - #### shouldPadTabRun

          protected boolean shouldPadTabRun(int tabPlacement,
                                int run)

      This boolean controls wheather the given run should be padded to use up as much space as the others (with more tabs in them).
      Overrides:
        `shouldPadTabRun` in class `MetalTabbedPaneUI`

    - #### getTabRunIndent

          protected int getTabRunIndent(int tabPlacement,
                            int run)

      Returns the amount by which the run number `run` should be indented. Add six pixels for every run to make diagonal lines align.
      Overrides:
        `getTabRunIndent` in class `BasicTabbedPaneUI`

    - #### getTabInsets

          protected Insets getTabInsets(int tabPlacement,
                            int tabIndex)

      Returns the insets for this tab.
      Overrides:
        `getTabInsets` in class `BasicTabbedPaneUI`

    - #### getSelectedTabPadInsets

          protected Insets getSelectedTabPadInsets(int tabPlacement)

      Returns the insets for selected tab.
      Overrides:
        `getSelectedTabPadInsets` in class `BasicTabbedPaneUI`

    - #### paintFocusIndicator

          protected void paintFocusIndicator(Graphics g,
                                 int tabPlacement,
                                 Rectangle[] rectangles,
                                 int tabIndex,
                                 Rectangle iconRect,
                                 Rectangle textRect,
                                 boolean isSelected)

      Draws the rectancle around the Tab label which indicates keyboard focus.
      Overrides:
        `paintFocusIndicator` in class `MetalTabbedPaneUI`

    - #### paintTabBackground

          protected void paintTabBackground(Graphics g,
                                int tabPlacement,
                                int tabIndex,
                                int x,
                                int y,
                                int w,
                                int h,
                                boolean isSelected)

      Fills the background of the given tab to make sure overlap of tabs is handled correctly. Note: that tab backgrounds seem to be painted somewhere else, too.
      Overrides:
        `paintTabBackground` in class `MetalTabbedPaneUI`

    - #### paintTabBorder

          protected void paintTabBorder(Graphics g,
                            int tabPlacement,
                            int tabIndex,
                            int x,
                            int y,
                            int w,
                            int h,
                            boolean isSelected)

      Paints the border for one tab. Gets the bounds of the tab as parameters. Note that the result is not clipped so you can paint outside that rectangle. Tabs painted later on have a chance to overwrite though.
      Overrides:
        `paintTabBorder` in class `MetalTabbedPaneUI`

    - #### shouldRotateTabRuns

          protected boolean shouldRotateTabRuns(int tabPlacement)

      Answers wheather tab runs should be rotated. If true, the layout mechanism will move the run containing the selected tab so that it touches the content pane.
      Overrides:
        `shouldRotateTabRuns` in class `BasicTabbedPaneUI`

Copyright © 2001-2014 JGoodies Software GmbH. All Rights Reserved.