Class 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 $
See Also:
  • Field Details

    • isTabIconsEnabled

      private static boolean isTabIconsEnabled
      Describes if tabs are painted with or without icons.
    • noContentBorder

      private Boolean noContentBorder
      Describes if we paint no content border or not; is false by default. You can disable the content border by setting the client property Options.NO_CONTENT_BORDER_KEY to Boolean.TRUE;
    • embeddedTabs

      private Boolean embeddedTabs
      Describes if we paint tabs in an embedded style that is with less decoration; this is false by default. You can enable the embedded tabs style by setting the client property Options.EMBEDDED_TABS_KEY to Boolean.TRUE.
    • renderer

      Holds the renderer that is used to render the tabs.
    • tabScroller

      For use when tabLayoutPolicy == SCROLL_TAB_LAYOUT.
    • xCropLen

      private final int[] xCropLen
    • yCropLen

      private final int[] yCropLen
    • CROP_SEGMENT

      private static final int CROP_SEGMENT
      See Also:
  • Constructor Details

    • PlasticTabbedPaneUI

      public PlasticTabbedPaneUI()
  • Method Details

    • createUI

      public static ComponentUI createUI(JComponent tabPane)
      Creates the PlasticTabbedPaneUI.
      See Also:
    • installUI

      public void installUI(JComponent c)
      Installs the UI.
      Overrides:
      installUI in class BasicTabbedPaneUI
      See Also:
    • uninstallUI

      public void uninstallUI(JComponent c)
      Uninstalls the UI.
      Overrides:
      uninstallUI in class BasicTabbedPaneUI
      See Also:
    • installComponents

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

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

      protected void installKeyboardActions()
      Overrides:
      installKeyboardActions in class BasicTabbedPaneUI
    • hasNoContentBorder

      private boolean hasNoContentBorder()
      Checks and answers if content border will be painted. This is controlled by the component's client property Options.NO_CONTENT_BORDER or Options.EMBEDDED.
    • hasEmbeddedTabs

      private boolean hasEmbeddedTabs()
      Checks and answers if tabs are painted with minimal decoration.
    • createRenderer

      private PlasticTabbedPaneUI.AbstractRenderer createRenderer(JTabbedPane tabbedPane)
      Creates the renderer used to lay out and paint the tabs.
      Parameters:
      tabbedPane - the UIs component
      Returns:
      AbstractRenderer the renderer that will be used to paint
    • 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
    • doLayout

      private void doLayout()
    • tabPlacementChanged

      private void tabPlacementChanged()
      Updates the renderer and layout. This message is sent by my PropertyChangeHandler whenever the tab placement changes.
    • embeddedTabsPropertyChanged

      private void embeddedTabsPropertyChanged(Boolean newValue)
      Updates the embedded tabs property. This message is sent by my PropertyChangeHandler whenever the embedded tabs property changes.
    • noContentBorderPropertyChanged

      private void noContentBorderPropertyChanged(Boolean newValue)
      Updates the no content border property. This message is sent by my PropertyChangeHandler whenever the noContentBorder property changes.
    • 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
    • createCroppedTabClip

      private Polygon createCroppedTabClip(int tabPlacement, Rectangle tabRect, int cropline)
    • paintCroppedTabEdge

      private void paintCroppedTabEdge(Graphics g, int tabPlacement, int tabIndex, boolean isSelected, int x, int y)
    • ensureCurrentLayout

      private void ensureCurrentLayout()
    • 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
    • getClosestTab

      private int getClosestTab(int x, int y)
      Returns the index of the tab closest to the passed in location, note that the returned tab may not contain the location x,y.
    • translatePointToTabPanel

      private Point translatePointToTabPanel(int srcx, int srcy, Point dest)
      Returns a point which is translated from the specified point in the JTabbedPane's coordinate space to the coordinate space of the ScrollableTabPanel. This is used for SCROLL_TAB_LAYOUT ONLY.
    • 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
    • scrollableTabLayoutEnabled

      private boolean scrollableTabLayoutEnabled()
    • 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
    • requestFocusForVisibleComponent

      private boolean requestFocusForVisibleComponent()