Class FlatTabbedPaneUI.FlatTabbedPaneScrollLayout

All Implemented Interfaces:
LayoutManager
Enclosing class:
FlatTabbedPaneUI

protected class FlatTabbedPaneUI.FlatTabbedPaneScrollLayout extends FlatTabbedPaneUI.FlatTabbedPaneLayout implements LayoutManager
Layout manager used for scroll tab layout policy.

Component hierarchy for scroll tab layout policy:


 JTabbedPane
    +- 1...n tab content components
    +- BasicTabbedPaneUI.ScrollableTabViewport (extends JViewport)
    |  +- BasicTabbedPaneUI.ScrollableTabPanel (extends JPanel)
    |     +- (optional) BasicTabbedPaneUI.TabContainer (extends JPanel)
    |        +- 1..n tab components (shown in tab area)
    +- FlatScrollableTabButton (scroll forward)
    +- FlatScrollableTabButton (scroll backward)
    +- FlatMoreTabsButton
    +- (optional) ContainerUIResource (extends JPanel)
    |  +- leading component
    +- (optional) ContainerUIResource (extends JPanel)
       +- trailing component
 

Instead of using super.layoutContainer(Container) and fixing some component bounds, this class implements layoutContainer(Container) and moves/resizes components only once. This avoids that some components are moved/resized twice, which would unnecessary repaint and relayout tabbed pane. In some special case this resulted in "endless" layouting and repainting when using nested tabbed panes (top and bottom tab placement) and RSyntaxTextArea (with enabled line-wrapping) as tab content.

Although this class delegates nearly all methods to the original layout manager BasicTabbedPaneUI.TabbedPaneScrollLayout, which extends BasicTabbedPaneUI.TabbedPaneLayout, it is necessary that this class also extends BasicTabbedPaneUI.TabbedPaneLayout to avoid a ClassCastException in BasicTabbedPaneUI.ensureCurrentLayout().