public final class PlasticTabbedPaneUI
extends javax.swing.plaf.metal.MetalTabbedPaneUI
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.
Options| Modifier and Type | Class and Description |
|---|---|
private static class |
PlasticTabbedPaneUI.AbstractRenderer
This is the abstract superclass for all TabbedPane renderers.
|
private static class |
PlasticTabbedPaneUI.ArrowButton |
private static class |
PlasticTabbedPaneUI.BottomEmbeddedRenderer
The renderer for the case where tabs are displayed below the contents
and with minimal decoration.
|
private static class |
PlasticTabbedPaneUI.BottomRenderer
The renderer for the case where Tabs are below the content and
decoration is standard.
|
private static class |
PlasticTabbedPaneUI.LeftEmbeddedRenderer
The renderer for tabs on the left with minimal decoration.
|
private static class |
PlasticTabbedPaneUI.LeftRenderer
Renderer for tabs on the left with normal decoration.
|
private class |
PlasticTabbedPaneUI.MyPropertyChangeHandler
Catches and handles property change events.
|
private static class |
PlasticTabbedPaneUI.RightEmbeddedRenderer
The renderer for tabs on the right with minimal decoration.
|
private static class |
PlasticTabbedPaneUI.RightRenderer
Renderer for tabs on the right with normal decoration.
|
private class |
PlasticTabbedPaneUI.ScrollableTabPanel |
private class |
PlasticTabbedPaneUI.ScrollableTabSupport |
private class |
PlasticTabbedPaneUI.ScrollableTabViewport |
private static class |
PlasticTabbedPaneUI.ScrollTabsBackwardAction |
private static class |
PlasticTabbedPaneUI.ScrollTabsForwardAction |
private class |
PlasticTabbedPaneUI.TabbedPaneLayout
Does all the layout work.
|
private class |
PlasticTabbedPaneUI.TabbedPaneScrollLayout |
private class |
PlasticTabbedPaneUI.TabSelectionHandler |
private static class |
PlasticTabbedPaneUI.TopEmbeddedRenderer
Renderer for tabs on top with minimal decoration.
|
private static class |
PlasticTabbedPaneUI.TopRenderer
Renderer for tabs on top with normal decoration.
|
| Modifier and Type | Field and Description |
|---|---|
private static int |
CROP_SEGMENT |
private java.lang.Boolean |
embeddedTabs
Describes if we paint tabs in an embedded style that is with
less decoration; this is false by default.
|
private static boolean |
isTabIconsEnabled
Describes if tabs are painted with or without icons.
|
private java.lang.Boolean |
noContentBorder
Describes if we paint no content border or not; is false by default.
|
private PlasticTabbedPaneUI.AbstractRenderer |
renderer
Holds the renderer that is used to render the tabs.
|
private PlasticTabbedPaneUI.ScrollableTabSupport |
tabScroller
For use when tabLayoutPolicy == SCROLL_TAB_LAYOUT.
|
private int[] |
xCropLen |
private int[] |
yCropLen |
minTabWidth, selectColor, selectHighlight, tabAreaBackgroundcalcRect, 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| Constructor and Description |
|---|
PlasticTabbedPaneUI() |
| Modifier and Type | Method and Description |
|---|---|
protected javax.swing.event.ChangeListener |
createChangeListener() |
private java.awt.Polygon |
createCroppedTabClip(int tabPlacement,
java.awt.Rectangle tabRect,
int cropline) |
protected java.awt.LayoutManager |
createLayoutManager()
Creates the layout manager used to set the tab's bounds.
|
protected java.beans.PropertyChangeListener |
createPropertyChangeListener()
Creates and answer a handler that listens to property changes.
|
private PlasticTabbedPaneUI.AbstractRenderer |
createRenderer(javax.swing.JTabbedPane tabbedPane)
Creates the renderer used to lay out and paint the tabs.
|
static javax.swing.plaf.ComponentUI |
createUI(javax.swing.JComponent tabPane)
Creates the
PlasticTabbedPaneUI. |
private void |
doLayout() |
private void |
embeddedTabsPropertyChanged(java.lang.Boolean newValue)
Updates the embedded tabs property.
|
private void |
ensureCurrentLayout() |
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.
|
protected java.awt.Insets |
getContentBorderInsets(int tabPlacement)
Returns the insets (i.e.
|
protected javax.swing.Icon |
getIconForTab(int tabIndex)
Answers the icon for the tab with the specified index.
|
protected java.awt.Insets |
getSelectedTabPadInsets(int tabPlacement)
Returns the insets for selected tab.
|
protected java.awt.Insets |
getTabAreaInsets(int tabPlacement)
Returns the amount by which the Tab Area is inset.
|
protected java.awt.Rectangle |
getTabBounds(int tabIndex,
java.awt.Rectangle dest) |
protected java.awt.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.
|
private boolean |
hasEmbeddedTabs()
Checks and answers if tabs are painted with minimal decoration.
|
private boolean |
hasNoContentBorder()
Checks and answers if content border will be painted.
|
protected void |
installComponents()
Creates and installs any required subcomponents for the JTabbedPane.
|
protected void |
installKeyboardActions() |
void |
installUI(javax.swing.JComponent c)
Installs the UI.
|
protected boolean |
isTabInFirstRun(int tabIndex) |
protected void |
layoutLabel(int tabPlacement,
java.awt.FontMetrics metrics,
int tabIndex,
java.lang.String title,
javax.swing.Icon icon,
java.awt.Rectangle tabRect,
java.awt.Rectangle iconRect,
java.awt.Rectangle textRect,
boolean isSelected) |
private void |
noContentBorderPropertyChanged(java.lang.Boolean newValue)
Updates the no content border property.
|
void |
paint(java.awt.Graphics g,
javax.swing.JComponent c) |
protected void |
paintContentBorder(java.awt.Graphics g,
int tabPlacement,
int selectedIndex) |
private void |
paintCroppedTabEdge(java.awt.Graphics g,
int tabPlacement,
int tabIndex,
boolean isSelected,
int x,
int y) |
protected void |
paintFocusIndicator(java.awt.Graphics g,
int tabPlacement,
java.awt.Rectangle[] rectangles,
int tabIndex,
java.awt.Rectangle iconRect,
java.awt.Rectangle textRect,
boolean isSelected)
Draws the rectancle around the Tab label which indicates keyboard focus.
|
protected void |
paintTab(java.awt.Graphics g,
int tabPlacement,
java.awt.Rectangle[] rects,
int tabIndex,
java.awt.Rectangle iconRect,
java.awt.Rectangle textRect) |
protected void |
paintTabArea(java.awt.Graphics g,
int tabPlacement,
int selectedIndex) |
protected void |
paintTabBackground(java.awt.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(java.awt.Graphics g,
int tabPlacement,
int tabIndex,
int x,
int y,
int w,
int h,
boolean isSelected)
Paints the border for one tab.
|
private boolean |
requestFocusForVisibleComponent() |
private boolean |
scrollableTabLayoutEnabled() |
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(javax.swing.JTabbedPane pane,
int x,
int y)
Returns the tab index which intersects the specified point
in the JTabbedPane's coordinate space.
|
private void |
tabPlacementChanged()
Updates the renderer and layout.
|
private java.awt.Point |
translatePointToTabPanel(int srcx,
int srcy,
java.awt.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.
|
protected void |
uninstallComponents()
Removes any installed subcomponents from the JTabbedPane.
|
void |
uninstallUI(javax.swing.JComponent c)
Uninstalls the UI.
|
calculateMaxTabHeight, getBaselineOffset, getColorForGap, installDefaults, paintBottomTabBorder, paintContentBorderBottomEdge, paintContentBorderLeftEdge, paintContentBorderRightEdge, paintContentBorderTopEdge, paintHighlightBelowTab, paintLeftTabBorder, paintRightTabBorder, paintTopTabBorder, shouldFillGap, shouldRotateTabRuns, updateassureRectsCreated, 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, uninstallListenersprivate static boolean isTabIconsEnabled
private java.lang.Boolean noContentBorder
private java.lang.Boolean embeddedTabs
private PlasticTabbedPaneUI.AbstractRenderer renderer
private PlasticTabbedPaneUI.ScrollableTabSupport tabScroller
private final int[] xCropLen
private final int[] yCropLen
private static final int CROP_SEGMENT
public static javax.swing.plaf.ComponentUI createUI(javax.swing.JComponent tabPane)
PlasticTabbedPaneUI.ComponentUI.createUI(JComponent)public void installUI(javax.swing.JComponent c)
installUI in class javax.swing.plaf.basic.BasicTabbedPaneUIComponentUI.installUI(JComponent)public void uninstallUI(javax.swing.JComponent c)
uninstallUI in class javax.swing.plaf.basic.BasicTabbedPaneUIComponentUI.uninstallUI(JComponent)protected void installComponents()
installComponents in class javax.swing.plaf.basic.BasicTabbedPaneUIBasicTabbedPaneUI.installComponents()protected void uninstallComponents()
uninstallComponents in class javax.swing.plaf.basic.BasicTabbedPaneUIBasicTabbedPaneUI.uninstallComponents()protected void installKeyboardActions()
installKeyboardActions in class javax.swing.plaf.basic.BasicTabbedPaneUIprivate boolean hasNoContentBorder()
private boolean hasEmbeddedTabs()
private PlasticTabbedPaneUI.AbstractRenderer createRenderer(javax.swing.JTabbedPane tabbedPane)
tabbedPane - the UIs componentprotected java.beans.PropertyChangeListener createPropertyChangeListener()
createPropertyChangeListener in class javax.swing.plaf.basic.BasicTabbedPaneUIprotected javax.swing.event.ChangeListener createChangeListener()
createChangeListener in class javax.swing.plaf.basic.BasicTabbedPaneUIprivate void doLayout()
private void tabPlacementChanged()
private void embeddedTabsPropertyChanged(java.lang.Boolean newValue)
private void noContentBorderPropertyChanged(java.lang.Boolean newValue)
public void paint(java.awt.Graphics g,
javax.swing.JComponent c)
paint in class javax.swing.plaf.metal.MetalTabbedPaneUIprotected void paintTab(java.awt.Graphics g,
int tabPlacement,
java.awt.Rectangle[] rects,
int tabIndex,
java.awt.Rectangle iconRect,
java.awt.Rectangle textRect)
paintTab in class javax.swing.plaf.basic.BasicTabbedPaneUIprivate java.awt.Polygon createCroppedTabClip(int tabPlacement,
java.awt.Rectangle tabRect,
int cropline)
private void paintCroppedTabEdge(java.awt.Graphics g,
int tabPlacement,
int tabIndex,
boolean isSelected,
int x,
int y)
private void ensureCurrentLayout()
public int tabForCoordinate(javax.swing.JTabbedPane pane,
int x,
int y)
tabForCoordinate in class javax.swing.plaf.basic.BasicTabbedPaneUIprotected java.awt.Rectangle getTabBounds(int tabIndex,
java.awt.Rectangle dest)
getTabBounds in class javax.swing.plaf.basic.BasicTabbedPaneUIprivate int getClosestTab(int x,
int y)
private java.awt.Point translatePointToTabPanel(int srcx,
int srcy,
java.awt.Point dest)
protected void paintTabArea(java.awt.Graphics g,
int tabPlacement,
int selectedIndex)
paintTabArea in class javax.swing.plaf.basic.BasicTabbedPaneUIprotected void layoutLabel(int tabPlacement,
java.awt.FontMetrics metrics,
int tabIndex,
java.lang.String title,
javax.swing.Icon icon,
java.awt.Rectangle tabRect,
java.awt.Rectangle iconRect,
java.awt.Rectangle textRect,
boolean isSelected)
layoutLabel in class javax.swing.plaf.basic.BasicTabbedPaneUIprotected javax.swing.Icon getIconForTab(int tabIndex)
null if and only if we have a title.getIconForTab in class javax.swing.plaf.basic.BasicTabbedPaneUIprotected java.awt.LayoutManager createLayoutManager()
createLayoutManager in class javax.swing.plaf.metal.MetalTabbedPaneUIprivate boolean scrollableTabLayoutEnabled()
protected boolean isTabInFirstRun(int tabIndex)
protected void paintContentBorder(java.awt.Graphics g,
int tabPlacement,
int selectedIndex)
paintContentBorder in class javax.swing.plaf.basic.BasicTabbedPaneUIprotected java.awt.Insets getContentBorderInsets(int tabPlacement)
getContentBorderInsets in class javax.swing.plaf.basic.BasicTabbedPaneUIprotected java.awt.Insets getTabAreaInsets(int tabPlacement)
getTabAreaInsets in class javax.swing.plaf.basic.BasicTabbedPaneUIprotected int getTabLabelShiftX(int tabPlacement,
int tabIndex,
boolean isSelected)
getTabLabelShiftX in class javax.swing.plaf.metal.MetalTabbedPaneUIprotected int getTabLabelShiftY(int tabPlacement,
int tabIndex,
boolean isSelected)
getTabLabelShiftY in class javax.swing.plaf.metal.MetalTabbedPaneUIprotected int getTabRunOverlay(int tabPlacement)
getTabRunOverlay in class javax.swing.plaf.metal.MetalTabbedPaneUIprotected boolean shouldPadTabRun(int tabPlacement,
int run)
shouldPadTabRun in class javax.swing.plaf.metal.MetalTabbedPaneUIprotected int getTabRunIndent(int tabPlacement,
int run)
run
should be indented. Add six pixels for every run to make
diagonal lines align.getTabRunIndent in class javax.swing.plaf.basic.BasicTabbedPaneUIprotected java.awt.Insets getTabInsets(int tabPlacement,
int tabIndex)
getTabInsets in class javax.swing.plaf.basic.BasicTabbedPaneUIprotected java.awt.Insets getSelectedTabPadInsets(int tabPlacement)
getSelectedTabPadInsets in class javax.swing.plaf.basic.BasicTabbedPaneUIprotected void paintFocusIndicator(java.awt.Graphics g,
int tabPlacement,
java.awt.Rectangle[] rectangles,
int tabIndex,
java.awt.Rectangle iconRect,
java.awt.Rectangle textRect,
boolean isSelected)
paintFocusIndicator in class javax.swing.plaf.metal.MetalTabbedPaneUIprotected void paintTabBackground(java.awt.Graphics g,
int tabPlacement,
int tabIndex,
int x,
int y,
int w,
int h,
boolean isSelected)
paintTabBackground in class javax.swing.plaf.metal.MetalTabbedPaneUIprotected void paintTabBorder(java.awt.Graphics g,
int tabPlacement,
int tabIndex,
int x,
int y,
int w,
int h,
boolean isSelected)
paintTabBorder in class javax.swing.plaf.metal.MetalTabbedPaneUIprotected boolean shouldRotateTabRuns(int tabPlacement)
shouldRotateTabRuns in class javax.swing.plaf.basic.BasicTabbedPaneUIprivate boolean requestFocusForVisibleComponent()