Class TabbedPanel
- java.lang.Object
-
- java.awt.Component
-
- java.awt.Container
-
- javax.swing.JComponent
-
- javax.swing.JPanel
-
- net.infonode.tabbedpanel.TabbedPanel
-
- All Implemented Interfaces:
java.awt.image.ImageObserver
,java.awt.MenuContainer
,java.io.Serializable
,javax.accessibility.Accessible
public class TabbedPanel extends javax.swing.JPanel
A TabbedPanel is a component that handles a group of components in a notebook like manor. Each component is represented by a
Tab
. A tab is a component itself that defines how the tab will be rendered. The tab also holds a reference to the content component associated with the tab. The tabbed panel is divided into two areas, the tab area where the tabs are displayed and the content area where the tab's content component is displayed.The demo program for InfoNode Tabbed Panel on www.infonode.net demonstrates and explains most of the tabbed panel's features.
The tabbed panel is configured using a
TabbedPanelProperties
object. A tabbed panel will always have a properties object with default values based on the current Look and FeelTabs can be added, inserted, removed, selected, highlighted, dragged and moved.
The tabbed panel support tab placement in a horizontal line above or under the content area or a vertical row to the left or to the right of the content area. The tab line can be laid out as either scrolling or compression. If the tabs are too many to fit in the tab area and scrolling is enabled, then the mouse wheel is activated and scrollbuttons are shown so that the tabs can be scrolled. Compression means that the tabs will be downsized to fit into the visible tab area.
It is possible to display a button in the tab area next to the tabs that shows a drop down list (called tab drop down list) with all the tabs where it is possible to select a tab. This is for example useful when the tabbed panel contains a large amount of tabs or if some tabs are scrolled out. The drop down list can show a text and an icon for a tab. The text is retrieved by calling toString() on the tab and the icon is only retrieved if the tab implements the
IconProvider
interface.It is possible to set an array of components (called tab area components) to be shown next to the tabs in the tab area, the same place where the drop down list and the scrollbuttons are shown. This for example useful for adding buttons to the tabbed panel.
It is possible to add a
TabListener
and receive events when a tab is added, removed, selected, deselected, highlighted, dehighlighted, moved, dragged, dropped or drag is aborted. The listener will receive events for all the tabs in the tabbed panel. A tabbed panel will trigger selected, deselected, highlighted and dehighlighted even if for example the selected tab is null (no selected tab), i.e. null will be treated as if it was a tab.A tabbed panel supports several mouse hover alternatives. It is possible to specify
HoverListener
s for the entire tabbed panel, the tab area, the tab area components area and the content area. The listeners are set in the TabbedPanelProperties, TabAreaProperties, TabAreaComponentsProperties and the TabbedPanelContentPanelProperties. A hover listener is called when the mouse enter or exits the area. The hover listener is called with aHoverEvent
and the source for the event is always the hovered tabbed panel.A tabbed panel calls the hover listeners in the following order:
- The hover listener for the tabbed panel itself.
- The hover listener for the tab area or the content area depending on where the mouse pointer is located.
- The hover listener for the tab area components area if the mouse pointer is over that area.
It is possible to specify different hover policies (
TabbedPanelHoverPolicy
) in the TabbedPanelProperties that affects all hover areas of the tabbed panel.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class javax.swing.JPanel
javax.swing.JPanel.AccessibleJPanel
-
Nested classes/interfaces inherited from class javax.swing.JComponent
javax.swing.JComponent.AccessibleJComponent
-
-
Field Summary
-
Fields inherited from class javax.swing.JComponent
listenerList, TOOL_TIP_TEXT_KEY, ui, UNDEFINED_CONDITION, WHEN_ANCESTOR_OF_FOCUSED_COMPONENT, WHEN_FOCUSED, WHEN_IN_FOCUSED_WINDOW
-
-
Constructor Summary
Constructors Constructor Description TabbedPanel()
Constructs a TabbedPanel with a TabbedPanelContentPanel as content area component and with default TabbedPanelPropertiesTabbedPanel(javax.swing.JComponent contentAreaComponent)
Constructs a TabbedPanel with a custom component as content area component or without any content area component and with default TabbedPanelProperties.TabbedPanel(javax.swing.JComponent contentAreaComponent, boolean useProperties)
Constructs a TabbedPanel with a custom component as content area component or without any content area component and with default TabbedPanelProperties.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addTab(Tab tab)
Add a tab.void
addTabListener(TabListener listener)
Adds a TablListener that will receive events for all the tabs in this TabbedPanelboolean
contentAreaContainsPoint(java.awt.Point p)
Check if the content area contains the given pointTab
getHighlightedTab()
Gets the highlighted tabTabbedPanelProperties
getProperties()
Gets the TabbedPanelPropertiesTab
getSelectedTab()
Gets the selected tab, i.e.javax.swing.JComponent[]
getTabAreaComponents()
Gets the tab area components.Tab
getTabAt(int index)
Gets the tab at indexint
getTabCount()
Gets the number of tabsint
getTabIndex(Tab tab)
Gets the index for tabboolean
hasContentArea()
Checks if this tabbed panel has a content areavoid
insertTab(Tab tab, int index)
Insert a tab at the specified tab index (position).void
insertTab(Tab tab, java.awt.Point p)
Insert a tab at the specified point.boolean
isTabAreaComponentsVisible()
Gets if any tab area components i.e.boolean
isTabAreaVisible()
Checks if the tab area is currently visiblevoid
moveTab(Tab tab, java.awt.Point p)
Move tab to point p.protected void
processMouseEvent(java.awt.event.MouseEvent event)
void
removeTab(Tab tab)
Removes a tabvoid
removeTabListener(TabListener listener)
Removes a TabListenervoid
scrollTabToVisibleArea(Tab tab)
Scrolls the given tab into the visible area of the tab area.void
setHighlightedTab(Tab highlightedTab)
Sets which tab that should be highlighted, i.e.void
setSelectedTab(Tab tab)
Selects a tab, i.e.void
setTabAreaComponents(javax.swing.JComponent[] tabAreaComponents)
Sets an array of components that will be shown in the tab area next to the tabs, i.e.boolean
tabAreaContainsPoint(java.awt.Point p)
Check if the tab area contains the given point-
Methods inherited from class javax.swing.JPanel
getAccessibleContext, getUI, getUIClassID, paramString, setUI, updateUI
-
Methods inherited from class javax.swing.JComponent
addAncestorListener, addNotify, addVetoableChangeListener, computeVisibleRect, contains, createToolTip, disable, enable, firePropertyChange, firePropertyChange, firePropertyChange, fireVetoableChange, getActionForKeyStroke, getActionMap, getAlignmentX, getAlignmentY, getAncestorListeners, getAutoscrolls, getBaseline, getBaselineResizeBehavior, getBorder, getBounds, getClientProperty, getComponentGraphics, getComponentPopupMenu, getConditionForKeyStroke, getDebugGraphicsOptions, getDefaultLocale, getFontMetrics, getGraphics, getHeight, getInheritsPopupMenu, getInputMap, getInputMap, getInputVerifier, getInsets, getInsets, getListeners, getLocation, getMaximumSize, getMinimumSize, getNextFocusableComponent, getPopupLocation, getPreferredSize, getRegisteredKeyStrokes, getRootPane, getSize, getToolTipLocation, getToolTipText, getToolTipText, getTopLevelAncestor, getTransferHandler, getVerifyInputWhenFocusTarget, getVetoableChangeListeners, getVisibleRect, getWidth, getX, getY, grabFocus, hide, isDoubleBuffered, isLightweightComponent, isManagingFocus, isOpaque, isOptimizedDrawingEnabled, isPaintingForPrint, isPaintingOrigin, isPaintingTile, isRequestFocusEnabled, isValidateRoot, paint, paintBorder, paintChildren, paintComponent, paintImmediately, paintImmediately, print, printAll, printBorder, printChildren, printComponent, processComponentKeyEvent, processKeyBinding, processKeyEvent, processMouseMotionEvent, putClientProperty, registerKeyboardAction, registerKeyboardAction, removeAncestorListener, removeNotify, removeVetoableChangeListener, repaint, repaint, requestDefaultFocus, requestFocus, requestFocus, requestFocusInWindow, requestFocusInWindow, resetKeyboardActions, reshape, revalidate, scrollRectToVisible, setActionMap, setAlignmentX, setAlignmentY, setAutoscrolls, setBackground, setBorder, setComponentPopupMenu, setDebugGraphicsOptions, setDefaultLocale, setDoubleBuffered, setEnabled, setFocusTraversalKeys, setFont, setForeground, setInheritsPopupMenu, setInputMap, setInputVerifier, setMaximumSize, setMinimumSize, setNextFocusableComponent, setOpaque, setPreferredSize, setRequestFocusEnabled, setToolTipText, setTransferHandler, setUI, setVerifyInputWhenFocusTarget, setVisible, unregisterKeyboardAction, update
-
Methods inherited from class java.awt.Container
add, add, add, add, add, addContainerListener, addImpl, addPropertyChangeListener, addPropertyChangeListener, applyComponentOrientation, areFocusTraversalKeysSet, countComponents, deliverEvent, doLayout, findComponentAt, findComponentAt, getComponent, getComponentAt, getComponentAt, getComponentCount, getComponents, getComponentZOrder, getContainerListeners, getFocusTraversalKeys, getFocusTraversalPolicy, getLayout, getMousePosition, insets, invalidate, isAncestorOf, isFocusCycleRoot, isFocusCycleRoot, isFocusTraversalPolicyProvider, isFocusTraversalPolicySet, layout, list, list, locate, minimumSize, paintComponents, preferredSize, printComponents, processContainerEvent, processEvent, remove, remove, removeAll, removeContainerListener, setComponentZOrder, setFocusCycleRoot, setFocusTraversalPolicy, setFocusTraversalPolicyProvider, setLayout, transferFocusDownCycle, validate, validateTree
-
Methods inherited from class java.awt.Component
action, add, addComponentListener, addFocusListener, addHierarchyBoundsListener, addHierarchyListener, addInputMethodListener, addKeyListener, addMouseListener, addMouseMotionListener, addMouseWheelListener, bounds, checkImage, checkImage, coalesceEvents, contains, createImage, createImage, createVolatileImage, createVolatileImage, disableEvents, dispatchEvent, enable, enableEvents, enableInputMethods, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, firePropertyChange, getBackground, getBounds, getColorModel, getComponentListeners, getComponentOrientation, getCursor, getDropTarget, getFocusCycleRootAncestor, getFocusListeners, getFocusTraversalKeysEnabled, getFont, getForeground, getGraphicsConfiguration, getHierarchyBoundsListeners, getHierarchyListeners, getIgnoreRepaint, getInputContext, getInputMethodListeners, getInputMethodRequests, getKeyListeners, getLocale, getLocation, getLocationOnScreen, getMouseListeners, getMouseMotionListeners, getMousePosition, getMouseWheelListeners, getName, getParent, getPropertyChangeListeners, getPropertyChangeListeners, getSize, getToolkit, getTreeLock, gotFocus, handleEvent, hasFocus, imageUpdate, inside, isBackgroundSet, isCursorSet, isDisplayable, isEnabled, isFocusable, isFocusOwner, isFocusTraversable, isFontSet, isForegroundSet, isLightweight, isMaximumSizeSet, isMinimumSizeSet, isPreferredSizeSet, isShowing, isValid, isVisible, keyDown, keyUp, list, list, list, location, lostFocus, mouseDown, mouseDrag, mouseEnter, mouseExit, mouseMove, mouseUp, move, nextFocus, paintAll, postEvent, prepareImage, prepareImage, processComponentEvent, processFocusEvent, processHierarchyBoundsEvent, processHierarchyEvent, processInputMethodEvent, processMouseWheelEvent, remove, removeComponentListener, removeFocusListener, removeHierarchyBoundsListener, removeHierarchyListener, removeInputMethodListener, removeKeyListener, removeMouseListener, removeMouseMotionListener, removeMouseWheelListener, removePropertyChangeListener, removePropertyChangeListener, repaint, repaint, repaint, requestFocus, requestFocus, requestFocusInWindow, resize, resize, setBounds, setBounds, setComponentOrientation, setCursor, setDropTarget, setFocusable, setFocusTraversalKeysEnabled, setIgnoreRepaint, setLocale, setLocation, setLocation, setMixingCutoutShape, setName, setSize, setSize, show, show, size, toString, transferFocus, transferFocusBackward, transferFocusUpCycle
-
-
-
-
Constructor Detail
-
TabbedPanel
public TabbedPanel()
Constructs a TabbedPanel with a TabbedPanelContentPanel as content area component and with default TabbedPanelProperties- See Also:
TabbedPanelProperties
,TabbedPanelContentPanel
-
TabbedPanel
public TabbedPanel(javax.swing.JComponent contentAreaComponent)
Constructs a TabbedPanel with a custom component as content area component or without any content area component and with default TabbedPanelProperties. The properties for the content area will not be used.
If no content area component is used, then the tabbed panel will act as a bar and the tabs will be laid out in a line.
Note: A custom content area component is by itself responsible for showing a tab's content component when a tab is selected, for eaxmple by listening to events from the tabbed panel. The component will be laid out just as the default content area component so that shadows etc. can be used.
- Parameters:
contentAreaComponent
- component to be used as content area component or null for no content area component- See Also:
TabbedPanelProperties
-
TabbedPanel
public TabbedPanel(javax.swing.JComponent contentAreaComponent, boolean useProperties)
Constructs a TabbedPanel with a custom component as content area component or without any content area component and with default TabbedPanelProperties. It's possible to choose if the properties for the content area should be used or not.
If no content area component is used, then the tabbed panel will act as a bar and the tabs will be laid out in a line.
Note: A custom content area component is by itself responsible for showing a tab's content component when a tab is selected, for eaxmple by listening to events from the tabbed panel. The component will be laid out just as the default content area component so that shadows etc. can be used.
- Parameters:
contentAreaComponent
- component to be used as content area component or null for no content area componentuseProperties
- true if the properties for the content area should be used, otherwise false- Since:
- ITP 1.4.0
- See Also:
TabbedPanelProperties
-
-
Method Detail
-
tabAreaContainsPoint
public boolean tabAreaContainsPoint(java.awt.Point p)
Check if the tab area contains the given point- Parameters:
p
- the point to check. Must be relative to this tabbed panel.- Returns:
- true if tab area contains point, otherwise false
- See Also:
contentAreaContainsPoint(java.awt.Point)
-
contentAreaContainsPoint
public boolean contentAreaContainsPoint(java.awt.Point p)
Check if the content area contains the given point- Parameters:
p
- the point to check. Must be relative to this tabbed panel.- Returns:
- true if content area contains point, otherwise false
- See Also:
tabAreaContainsPoint(java.awt.Point)
-
isTabAreaVisible
public boolean isTabAreaVisible()
Checks if the tab area is currently visible- Returns:
- true if visible, otherwise false
- Since:
- ITP 1.4.0
-
addTab
public void addTab(Tab tab)
Add a tab. The tab will be added after the last tab.
If the tab to be added is the only tab in this tabbed panel and the property "Auto Select Tab" is enabled then the tab will become selected in this tabbed panel after the tab has been added.
- Parameters:
tab
- tab to be added- See Also:
insertTab(Tab, int)
,TabbedPanelProperties
-
insertTab
public void insertTab(Tab tab, int index)
Insert a tab at the specified tab index (position).
If the tab to be inserted is the only tab in this tabbed panel and the property "Auto Select Tab" is enabled then the tab will become selected in this tabbed panel after the tab has been inserted.
- Parameters:
tab
- tab to be insertedindex
- the index to insert tab at- See Also:
addTab(net.infonode.tabbedpanel.Tab)
,TabbedPanelProperties
-
insertTab
public void insertTab(Tab tab, java.awt.Point p)
Insert a tab at the specified point.
If the point is outside the tab area then the tab will be inserted after the last tab.
If the tab to be inserted is the only tab in this tabbed panel and the property "Auto Select Tab" is enabled then the tab will become selected in this tabbed panel after the tab has been inserted.
- Parameters:
tab
- tab to be insertedp
- the point to insert tab at. Must be relative to this tabbed panel.- See Also:
addTab(net.infonode.tabbedpanel.Tab)
,TabbedPanelProperties
-
removeTab
public void removeTab(Tab tab)
Removes a tab- Parameters:
tab
- tab to be removed from this TabbedPanel
-
moveTab
public void moveTab(Tab tab, java.awt.Point p)
Move tab to point p. If p is outside the tab area then the tab is not moved.- Parameters:
tab
- tab to move. Tab must be a member (added/inserted) of this tabbed panel.p
- point to move tab to. Must be relative to this tabbed panel.
-
setSelectedTab
public void setSelectedTab(Tab tab)
Selects a tab, i.e. displays the tab's content component in this tabbed panel's content area- Parameters:
tab
- tab to select. Tab must be a member (added/inserted) of this tabbed panel.
-
getSelectedTab
public Tab getSelectedTab()
Gets the selected tab, i.e. the tab who's content component is currently displayed in this tabbed panel's content area- Returns:
- the selected tab or null if no tab is selected in this tabbed panel
-
setHighlightedTab
public void setHighlightedTab(Tab highlightedTab)
Sets which tab that should be highlighted, i.e. signal highlighted state to the tab- Parameters:
highlightedTab
- tab that should be highlighted or null if no tab should be highlighted. The tab must be a member (added/inserted) of this tabbed panel.
-
getHighlightedTab
public Tab getHighlightedTab()
Gets the highlighted tab- Returns:
- the highlighted tab or null if no tab is highlighted in this tabbed panel
-
getTabCount
public int getTabCount()
Gets the number of tabs- Returns:
- number of tabs
-
getTabAt
public Tab getTabAt(int index)
Gets the tab at index- Parameters:
index
- index of tab- Returns:
- tab at index
- Throws:
java.lang.ArrayIndexOutOfBoundsException
- if there is no tab at index
-
getTabIndex
public int getTabIndex(Tab tab)
Gets the index for tab- Parameters:
tab
- tab- Returns:
- index or -1 if tab is not a member of this TabbedPanel
-
scrollTabToVisibleArea
public void scrollTabToVisibleArea(Tab tab)
Scrolls the given tab into the visible area of the tab area.
Note: This only has effect if the active tab layout policy is scrolling.
- Parameters:
tab
- tab to scroll into visible tab area- Since:
- ITP 1.4.0
-
setTabAreaComponents
public void setTabAreaComponents(javax.swing.JComponent[] tabAreaComponents)
Sets an array of components that will be shown in the tab area next to the tabs, i.e. to the right or below the tabs depending on the tab area orientation. The components will be laid out in a line and the direction will change depending on the tab area orientation. Tab drop down list and scroll buttons are also tab area components but those are handled automatically by the tabbed panel and are not affected by calling this method.- Parameters:
tabAreaComponents
- array of components, null for no components- Since:
- ITP 1.1.0
-
isTabAreaComponentsVisible
public boolean isTabAreaComponentsVisible()
Gets if any tab area components i.e. scroll buttons etc are visible at the moment- Returns:
- true if visible, otherwise false
- Since:
- ITP 1.2.0
-
getTabAreaComponents
public javax.swing.JComponent[] getTabAreaComponents()
Gets the tab area components. Tab drop down list and scroll buttons are also tab area components but those are handled automatically by the tabbed panel and no references to them will be returned. This method only returns the components that have been set with the setTabAreaComponents method.- Returns:
- an array of tab area components or null if none
- Since:
- ITP 1.1.0
- See Also:
setTabAreaComponents(javax.swing.JComponent[])
-
addTabListener
public void addTabListener(TabListener listener)
Adds a TablListener that will receive events for all the tabs in this TabbedPanel- Parameters:
listener
- the TabListener to add
-
removeTabListener
public void removeTabListener(TabListener listener)
Removes a TabListener- Parameters:
listener
- the TabListener to remove
-
getProperties
public TabbedPanelProperties getProperties()
Gets the TabbedPanelProperties- Returns:
- the TabbedPanelProperties for this tabbed panel
-
hasContentArea
public boolean hasContentArea()
Checks if this tabbed panel has a content area- Returns:
- true if content area exist, otherwise false
- Since:
- ITP 1.3.0
-
processMouseEvent
protected void processMouseEvent(java.awt.event.MouseEvent event)
- Overrides:
processMouseEvent
in classjavax.swing.JComponent
-
-