diff --git a/CHANGELOG.md b/CHANGELOG.md index c3f31cf0..e3c445fe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,7 +11,11 @@ FlatLaf Change Log - TabbedPane: Support forward/backward scroll arrow buttons on both sides of tab area. Backward button on left side, forward button on right side. Not applicable scroll buttons are hidden. (PR #211; issue #40) -- TabbedPane: Support scrolling tabs with mouse wheel in scroll tab layout. (PR +- TabbedPane: Support specifying default tab layout policy for all tabbed panes + in the application via UI value `TabbedPane.tabLayoutPolicy`. E.g. invoke + `UIManager.put( "TabbedPane.tabLayoutPolicy", "scroll" );` to use scroll + layout. +- TabbedPane: Support tab scrolling with mouse wheel (in scroll tab layout). (PR #187; issue #40) - TabbedPane: Repeat scrolling as long as scroll arrow buttons are pressed. (PR #187; issue #40) diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTabbedPaneUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTabbedPaneUI.java index b52534ef..013f397d 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTabbedPaneUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTabbedPaneUI.java @@ -131,8 +131,9 @@ import com.formdev.flatlaf.util.UIScale; * @uiDefault TabbedPane.tabSeparatorsFullHeight boolean * @uiDefault TabbedPane.hasFullBorder boolean * + * @uiDefault TabbedPane.tabLayoutPolicy String wrap (default) or scroll * @uiDefault TabbedPane.tabsPopupPolicy String never or asNeeded (default) - * @uiDefault TabbedPane.scrollButtonsPolicy String never, asNeeded or asNeededSingle (default) + * @uiDefault TabbedPane.scrollButtonsPolicy String never, asNeeded or asNeededSingle (default) * @uiDefault TabbedPane.scrollButtonsPlacement String both (default) or trailing * * @uiDefault TabbedPane.tabAreaAlignment String leading (default), center, trailing or fill @@ -231,6 +232,18 @@ public class FlatTabbedPaneUI @Override public void installUI( JComponent c ) { + // initialize tab layout policy (if specified) + String tabLayoutPolicyStr = UIManager.getString( "TabbedPane.tabLayoutPolicy" ); + if( tabLayoutPolicyStr != null ) { + int tabLayoutPolicy; + switch( tabLayoutPolicyStr ) { + default: + case "wrap": tabLayoutPolicy = JTabbedPane.WRAP_TAB_LAYOUT; break; + case "scroll": tabLayoutPolicy = JTabbedPane.SCROLL_TAB_LAYOUT; break; + } + ((JTabbedPane)c).setTabLayoutPolicy( tabLayoutPolicy ); + } + // initialize this defaults here because they are used in constructor // of FlatTabAreaButton, which is invoked before installDefaults() arrowType = UIManager.getString( "TabbedPane.arrowType" ); diff --git a/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLaf.properties b/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLaf.properties index 42786726..0b94527b 100644 --- a/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLaf.properties +++ b/flatlaf-core/src/main/resources/com/formdev/flatlaf/FlatLaf.properties @@ -573,6 +573,8 @@ TabbedPane.arrowType=chevron TabbedPane.buttonInsets=2,1,2,1 TabbedPane.buttonArc=$Button.arc +# allowed values: wrap or scroll +#TabbedPane.tabLayoutPolicy=scroll # allowed values: never or asNeeded TabbedPane.tabsPopupPolicy=asNeeded # allowed values: never, asNeeded or asNeededSingle