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().