mirror of
https://github.com/JFormDesigner/FlatLaf.git
synced 2025-12-06 22:10:54 +03:00
TabbedPane: support rotated/vertical tabs (issue #633)
This commit is contained in:
@@ -5,6 +5,7 @@ FlatLaf Change Log
|
|||||||
|
|
||||||
#### New features and improvements
|
#### New features and improvements
|
||||||
|
|
||||||
|
- TabbedPane: Support vertical tabs. (PR #758, issue #633)
|
||||||
- ToolBar: Added styling properties `separatorWidth` and `separatorColor`.
|
- ToolBar: Added styling properties `separatorWidth` and `separatorColor`.
|
||||||
|
|
||||||
#### Fixed bugs
|
#### Fixed bugs
|
||||||
|
|||||||
@@ -932,6 +932,59 @@ public interface FlatClientProperties
|
|||||||
*/
|
*/
|
||||||
String TABBED_PANE_TAB_ICON_PLACEMENT = "JTabbedPane.tabIconPlacement";
|
String TABBED_PANE_TAB_ICON_PLACEMENT = "JTabbedPane.tabIconPlacement";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specifies the rotation of the tabs (title, icon, etc).
|
||||||
|
* <p>
|
||||||
|
* <strong>Component</strong> {@link javax.swing.JTabbedPane}<br>
|
||||||
|
* <strong>Value type</strong> {@link java.lang.Integer} or {@link java.lang.String}<br>
|
||||||
|
* <strong>Allowed Values</strong>
|
||||||
|
* {@link SwingConstants#LEFT},
|
||||||
|
* {@link SwingConstants#RIGHT},
|
||||||
|
* {@link #TABBED_PANE_TAB_ROTATION_NONE}, (default)
|
||||||
|
* {@link #TABBED_PANE_TAB_ROTATION_AUTO},
|
||||||
|
* {@link #TABBED_PANE_TAB_ROTATION_LEFT} or
|
||||||
|
* {@link #TABBED_PANE_TAB_ROTATION_RIGHT}
|
||||||
|
*
|
||||||
|
* @since 3.3
|
||||||
|
*/
|
||||||
|
String TABBED_PANE_TAB_ROTATION = "JTabbedPane.tabRotation";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tabs are not rotated.
|
||||||
|
*
|
||||||
|
* @see #TABBED_PANE_TAB_ROTATION
|
||||||
|
* @since 3.3
|
||||||
|
*/
|
||||||
|
String TABBED_PANE_TAB_ROTATION_NONE = "none";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tabs are rotated depending on tab placement.
|
||||||
|
* <p>
|
||||||
|
* For top and bottom tab placement, the tabs are not rotated.<br>
|
||||||
|
* For left tab placement, the tabs are rotated counter clockwise.<br>
|
||||||
|
* For right tab placement, the tabs are rotated clockwise.
|
||||||
|
*
|
||||||
|
* @see #TABBED_PANE_TAB_ROTATION
|
||||||
|
* @since 3.3
|
||||||
|
*/
|
||||||
|
String TABBED_PANE_TAB_ROTATION_AUTO = "auto";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tabs are rotated counter clockwise.
|
||||||
|
*
|
||||||
|
* @see #TABBED_PANE_TAB_ROTATION
|
||||||
|
* @since 3.3
|
||||||
|
*/
|
||||||
|
String TABBED_PANE_TAB_ROTATION_LEFT = "left";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Tabs are rotated clockwise.
|
||||||
|
*
|
||||||
|
* @see #TABBED_PANE_TAB_ROTATION
|
||||||
|
* @since 3.3
|
||||||
|
*/
|
||||||
|
String TABBED_PANE_TAB_ROTATION_RIGHT = "right";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Specifies a component that will be placed at the leading edge of the tabs area.
|
* Specifies a component that will be placed at the leading edge of the tabs area.
|
||||||
* <p>
|
* <p>
|
||||||
|
|||||||
@@ -49,6 +49,7 @@ import java.awt.event.MouseEvent;
|
|||||||
import java.awt.event.MouseListener;
|
import java.awt.event.MouseListener;
|
||||||
import java.awt.event.MouseMotionListener;
|
import java.awt.event.MouseMotionListener;
|
||||||
import java.awt.event.MouseWheelEvent;
|
import java.awt.event.MouseWheelEvent;
|
||||||
|
import java.awt.geom.AffineTransform;
|
||||||
import java.awt.geom.Area;
|
import java.awt.geom.Area;
|
||||||
import java.awt.geom.Path2D;
|
import java.awt.geom.Path2D;
|
||||||
import java.awt.geom.Rectangle2D;
|
import java.awt.geom.Rectangle2D;
|
||||||
@@ -164,6 +165,7 @@ import com.formdev.flatlaf.util.UIScale;
|
|||||||
* @uiDefault TabbedPane.tabAreaAlignment String leading (default), center, trailing or fill
|
* @uiDefault TabbedPane.tabAreaAlignment String leading (default), center, trailing or fill
|
||||||
* @uiDefault TabbedPane.tabAlignment String leading, center (default) or trailing
|
* @uiDefault TabbedPane.tabAlignment String leading, center (default) or trailing
|
||||||
* @uiDefault TabbedPane.tabWidthMode String preferred (default), equal or compact
|
* @uiDefault TabbedPane.tabWidthMode String preferred (default), equal or compact
|
||||||
|
* @uiDefault TabbedPane.tabRotation String none (default), auto, left or right
|
||||||
* @uiDefault ScrollPane.smoothScrolling boolean
|
* @uiDefault ScrollPane.smoothScrolling boolean
|
||||||
* @uiDefault TabbedPane.closeIcon Icon
|
* @uiDefault TabbedPane.closeIcon Icon
|
||||||
*
|
*
|
||||||
@@ -198,10 +200,15 @@ public class FlatTabbedPaneUI
|
|||||||
// tab area alignment
|
// tab area alignment
|
||||||
protected static final int FILL = 100;
|
protected static final int FILL = 100;
|
||||||
|
|
||||||
|
// tab width mode
|
||||||
protected static final int WIDTH_MODE_PREFERRED = 0;
|
protected static final int WIDTH_MODE_PREFERRED = 0;
|
||||||
protected static final int WIDTH_MODE_EQUAL = 1;
|
protected static final int WIDTH_MODE_EQUAL = 1;
|
||||||
protected static final int WIDTH_MODE_COMPACT = 2;
|
protected static final int WIDTH_MODE_COMPACT = 2;
|
||||||
|
|
||||||
|
// tab rotation
|
||||||
|
/** @since 3.3 */ protected static final int NONE = -1;
|
||||||
|
/** @since 3.3 */ protected static final int AUTO = -2;
|
||||||
|
|
||||||
private static Set<KeyStroke> focusForwardTraversalKeys;
|
private static Set<KeyStroke> focusForwardTraversalKeys;
|
||||||
private static Set<KeyStroke> focusBackwardTraversalKeys;
|
private static Set<KeyStroke> focusBackwardTraversalKeys;
|
||||||
|
|
||||||
@@ -245,6 +252,7 @@ public class FlatTabbedPaneUI
|
|||||||
@Styleable(type=String.class) private int tabAreaAlignment;
|
@Styleable(type=String.class) private int tabAreaAlignment;
|
||||||
@Styleable(type=String.class) private int tabAlignment;
|
@Styleable(type=String.class) private int tabAlignment;
|
||||||
@Styleable(type=String.class) private int tabWidthMode;
|
@Styleable(type=String.class) private int tabWidthMode;
|
||||||
|
/** @since 3.3 */ @Styleable(type=String.class) private int tabRotation;
|
||||||
protected Icon closeIcon;
|
protected Icon closeIcon;
|
||||||
|
|
||||||
@Styleable protected String arrowType;
|
@Styleable protected String arrowType;
|
||||||
@@ -375,6 +383,7 @@ public class FlatTabbedPaneUI
|
|||||||
tabAreaAlignment = parseAlignment( UIManager.getString( "TabbedPane.tabAreaAlignment" ), LEADING );
|
tabAreaAlignment = parseAlignment( UIManager.getString( "TabbedPane.tabAreaAlignment" ), LEADING );
|
||||||
tabAlignment = parseAlignment( UIManager.getString( "TabbedPane.tabAlignment" ), CENTER );
|
tabAlignment = parseAlignment( UIManager.getString( "TabbedPane.tabAlignment" ), CENTER );
|
||||||
tabWidthMode = parseTabWidthMode( UIManager.getString( "TabbedPane.tabWidthMode" ) );
|
tabWidthMode = parseTabWidthMode( UIManager.getString( "TabbedPane.tabWidthMode" ) );
|
||||||
|
tabRotation = parseTabRotation( UIManager.getString( "TabbedPane.tabRotation" ) );
|
||||||
closeIcon = UIManager.getIcon( "TabbedPane.closeIcon" );
|
closeIcon = UIManager.getIcon( "TabbedPane.closeIcon" );
|
||||||
closeIconShared = true;
|
closeIconShared = true;
|
||||||
|
|
||||||
@@ -680,6 +689,7 @@ public class FlatTabbedPaneUI
|
|||||||
case "tabAreaAlignment": value = parseAlignment( (String) value, LEADING ); break;
|
case "tabAreaAlignment": value = parseAlignment( (String) value, LEADING ); break;
|
||||||
case "tabAlignment": value = parseAlignment( (String) value, CENTER ); break;
|
case "tabAlignment": value = parseAlignment( (String) value, CENTER ); break;
|
||||||
case "tabWidthMode": value = parseTabWidthMode( (String) value ); break;
|
case "tabWidthMode": value = parseTabWidthMode( (String) value ); break;
|
||||||
|
case "tabRotation": value = parseTabRotation( (String) value ); break;
|
||||||
|
|
||||||
case "tabIconPlacement": value = parseTabIconPlacement( (String) value ); break;
|
case "tabIconPlacement": value = parseTabIconPlacement( (String) value ); break;
|
||||||
}
|
}
|
||||||
@@ -770,6 +780,15 @@ public class FlatTabbedPaneUI
|
|||||||
case WIDTH_MODE_COMPACT: return TABBED_PANE_TAB_WIDTH_MODE_COMPACT;
|
case WIDTH_MODE_COMPACT: return TABBED_PANE_TAB_WIDTH_MODE_COMPACT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
case "tabRotation":
|
||||||
|
switch( tabRotation ) {
|
||||||
|
default:
|
||||||
|
case NONE: return TABBED_PANE_TAB_ROTATION_NONE;
|
||||||
|
case AUTO: return TABBED_PANE_TAB_ROTATION_AUTO;
|
||||||
|
case LEFT: return TABBED_PANE_TAB_ROTATION_LEFT;
|
||||||
|
case RIGHT: return TABBED_PANE_TAB_ROTATION_RIGHT;
|
||||||
|
}
|
||||||
|
|
||||||
case "tabIconPlacement":
|
case "tabIconPlacement":
|
||||||
switch( tabIconPlacement ) {
|
switch( tabIconPlacement ) {
|
||||||
default:
|
default:
|
||||||
@@ -856,11 +875,19 @@ public class FlatTabbedPaneUI
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected int calculateTabWidth( int tabPlacement, int tabIndex, FontMetrics metrics ) {
|
protected int calculateTabWidth( int tabPlacement, int tabIndex, FontMetrics metrics ) {
|
||||||
|
return (getRealTabRotation( tabPlacement ) == NONE)
|
||||||
|
? calculateTabWidthImpl( tabPlacement, tabIndex, metrics, false )
|
||||||
|
: calculateTabHeightImpl( tabPlacement, tabIndex, metrics.getHeight(), true );
|
||||||
|
}
|
||||||
|
|
||||||
|
private int calculateTabWidthImpl( int tabPlacement, int tabIndex, FontMetrics metrics, boolean rotated ) {
|
||||||
int tabWidthMode = getTabWidthMode();
|
int tabWidthMode = getTabWidthMode();
|
||||||
if( tabWidthMode == WIDTH_MODE_EQUAL && isHorizontalTabPlacement() && !inCalculateEqual ) {
|
if( tabWidthMode == WIDTH_MODE_EQUAL && isHorizontalOrRotated( tabPlacement ) && !inCalculateEqual ) {
|
||||||
inCalculateEqual = true;
|
inCalculateEqual = true;
|
||||||
try {
|
try {
|
||||||
return calculateMaxTabWidth( tabPlacement );
|
return isHorizontalTabPlacement( tabPlacement )
|
||||||
|
? calculateMaxTabWidth( tabPlacement )
|
||||||
|
: calculateMaxTabHeight( tabPlacement );
|
||||||
} finally {
|
} finally {
|
||||||
inCalculateEqual = false;
|
inCalculateEqual = false;
|
||||||
}
|
}
|
||||||
@@ -873,7 +900,7 @@ public class FlatTabbedPaneUI
|
|||||||
Icon icon;
|
Icon icon;
|
||||||
if( tabWidthMode == WIDTH_MODE_COMPACT &&
|
if( tabWidthMode == WIDTH_MODE_COMPACT &&
|
||||||
tabIndex != tabPane.getSelectedIndex() &&
|
tabIndex != tabPane.getSelectedIndex() &&
|
||||||
isHorizontalTabPlacement() &&
|
isHorizontalOrRotated( tabPlacement ) &&
|
||||||
tabPane.getTabComponentAt( tabIndex ) == null &&
|
tabPane.getTabComponentAt( tabIndex ) == null &&
|
||||||
(icon = getIconForTab( tabIndex )) != null )
|
(icon = getIconForTab( tabIndex )) != null )
|
||||||
{
|
{
|
||||||
@@ -899,8 +926,16 @@ public class FlatTabbedPaneUI
|
|||||||
|
|
||||||
Insets tabInsets = getTabInsets( tabPlacement, tabIndex );
|
Insets tabInsets = getTabInsets( tabPlacement, tabIndex );
|
||||||
tabWidth += tabInsets.left + tabInsets.right;
|
tabWidth += tabInsets.left + tabInsets.right;
|
||||||
} else
|
} else {
|
||||||
tabWidth = super.calculateTabWidth( tabPlacement, tabIndex, metrics ) - 3 /* was added by superclass */;
|
tabWidth = super.calculateTabWidth( tabPlacement, tabIndex, metrics ) - 3 /* was added by superclass */;
|
||||||
|
|
||||||
|
// tab components are not rotated
|
||||||
|
Component tabComponent;
|
||||||
|
if( rotated && (tabComponent = tabPane.getTabComponentAt( tabIndex )) != null ) {
|
||||||
|
Dimension prefSize = tabComponent.getPreferredSize();
|
||||||
|
tabWidth = tabWidth - prefSize.width + prefSize.height;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// make tab wider if closable
|
// make tab wider if closable
|
||||||
@@ -920,6 +955,12 @@ public class FlatTabbedPaneUI
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected int calculateTabHeight( int tabPlacement, int tabIndex, int fontHeight ) {
|
protected int calculateTabHeight( int tabPlacement, int tabIndex, int fontHeight ) {
|
||||||
|
return (getRealTabRotation( tabPlacement ) == NONE)
|
||||||
|
? calculateTabHeightImpl( tabPlacement, tabIndex, fontHeight, false )
|
||||||
|
: calculateTabWidthImpl( tabPlacement, tabIndex, getFontMetrics(), true );
|
||||||
|
}
|
||||||
|
|
||||||
|
private int calculateTabHeightImpl( int tabPlacement, int tabIndex, int fontHeight, boolean rotated ) {
|
||||||
int tabHeight;
|
int tabHeight;
|
||||||
|
|
||||||
Icon icon;
|
Icon icon;
|
||||||
@@ -939,9 +980,17 @@ public class FlatTabbedPaneUI
|
|||||||
|
|
||||||
Insets tabInsets = getTabInsets( tabPlacement, tabIndex );
|
Insets tabInsets = getTabInsets( tabPlacement, tabIndex );
|
||||||
tabHeight += tabInsets.top + tabInsets.bottom;
|
tabHeight += tabInsets.top + tabInsets.bottom;
|
||||||
} else
|
} else {
|
||||||
tabHeight = super.calculateTabHeight( tabPlacement, tabIndex, fontHeight ) - 2 /* was added by superclass */;
|
tabHeight = super.calculateTabHeight( tabPlacement, tabIndex, fontHeight ) - 2 /* was added by superclass */;
|
||||||
|
|
||||||
|
// tab components are not rotated
|
||||||
|
Component tabComponent;
|
||||||
|
if( rotated && (tabComponent = tabPane.getTabComponentAt( tabIndex )) != null ) {
|
||||||
|
Dimension prefSize = tabComponent.getPreferredSize();
|
||||||
|
tabHeight = tabHeight - prefSize.height + prefSize.width;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return Math.max( tabHeight, scale( clientPropertyInt( tabPane, TABBED_PANE_TAB_HEIGHT, this.tabHeight ) ) );
|
return Math.max( tabHeight, scale( clientPropertyInt( tabPane, TABBED_PANE_TAB_HEIGHT, this.tabHeight ) ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -973,6 +1022,16 @@ public class FlatTabbedPaneUI
|
|||||||
: super.getTabInsets( tabPlacement, tabIndex ) );
|
: super.getTabInsets( tabPlacement, tabIndex ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @since 3.3 */
|
||||||
|
protected Insets getTabInsetsRotated( int tabPlacement, int tabIndex, int rotation ) {
|
||||||
|
Insets insets = getTabInsets( tabPlacement, tabIndex );
|
||||||
|
switch( rotation ) {
|
||||||
|
case LEFT: return new Insets( insets.right, insets.top, insets.left, insets.bottom );
|
||||||
|
case RIGHT: return new Insets( insets.left, insets.bottom, insets.right, insets.top );
|
||||||
|
default: return insets;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Insets getSelectedTabPadInsets( int tabPlacement ) {
|
protected Insets getSelectedTabPadInsets( int tabPlacement ) {
|
||||||
return new Insets( 0, 0, 0, 0 );
|
return new Insets( 0, 0, 0, 0 );
|
||||||
@@ -1012,7 +1071,7 @@ public class FlatTabbedPaneUI
|
|||||||
|
|
||||||
// increase insets for wrap layout if using leading/trailing components
|
// increase insets for wrap layout if using leading/trailing components
|
||||||
if( tabPane.getTabLayoutPolicy() == JTabbedPane.WRAP_TAB_LAYOUT ) {
|
if( tabPane.getTabLayoutPolicy() == JTabbedPane.WRAP_TAB_LAYOUT ) {
|
||||||
if( isHorizontalTabPlacement() ) {
|
if( isHorizontalTabPlacement( tabPlacement ) ) {
|
||||||
insets.left += getLeadingPreferredWidth();
|
insets.left += getLeadingPreferredWidth();
|
||||||
insets.right += getTrailingPreferredWidth();
|
insets.right += getTrailingPreferredWidth();
|
||||||
} else {
|
} else {
|
||||||
@@ -1045,7 +1104,7 @@ public class FlatTabbedPaneUI
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected int getTabLabelShiftX( int tabPlacement, int tabIndex, boolean isSelected ) {
|
protected int getTabLabelShiftX( int tabPlacement, int tabIndex, boolean isSelected ) {
|
||||||
if( isTabClosable( tabIndex ) ) {
|
if( isTabClosable( tabIndex ) && getRealTabRotation( tabPlacement ) == NONE ) {
|
||||||
int shift = closeIcon.getIconWidth() / 2;
|
int shift = closeIcon.getIconWidth() / 2;
|
||||||
return isLeftToRight() ? -shift : shift;
|
return isLeftToRight() ? -shift : shift;
|
||||||
}
|
}
|
||||||
@@ -1054,6 +1113,10 @@ public class FlatTabbedPaneUI
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected int getTabLabelShiftY( int tabPlacement, int tabIndex, boolean isSelected ) {
|
protected int getTabLabelShiftY( int tabPlacement, int tabIndex, boolean isSelected ) {
|
||||||
|
if( isTabClosable( tabIndex ) && getRealTabRotation( tabPlacement ) != NONE ) {
|
||||||
|
int shift = closeIcon.getIconHeight() / 2;
|
||||||
|
return isLeftToRight() ? shift : -shift;
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1128,11 +1191,31 @@ public class FlatTabbedPaneUI
|
|||||||
Icon icon = getIconForTab( tabIndex );
|
Icon icon = getIconForTab( tabIndex );
|
||||||
Font font = tabPane.getFont();
|
Font font = tabPane.getFont();
|
||||||
FontMetrics metrics = tabPane.getFontMetrics( font );
|
FontMetrics metrics = tabPane.getFontMetrics( font );
|
||||||
boolean isCompact = (icon != null && !isSelected && getTabWidthMode() == WIDTH_MODE_COMPACT && isHorizontalTabPlacement());
|
boolean isCompact = (icon != null && !isSelected && getTabWidthMode() == WIDTH_MODE_COMPACT && isHorizontalOrRotated( tabPlacement ));
|
||||||
if( isCompact )
|
if( isCompact )
|
||||||
title = null;
|
title = null;
|
||||||
String clippedTitle = layoutAndClipLabel( tabPlacement, metrics, tabIndex, title, icon, tabRect, iconRect, textRect, isSelected );
|
String clippedTitle = layoutAndClipLabel( tabPlacement, metrics, tabIndex, title, icon, tabRect, iconRect, textRect, isSelected );
|
||||||
|
|
||||||
|
/*debug
|
||||||
|
g.setColor( Color.red );
|
||||||
|
g.drawRect( tabRect.x, tabRect.y, tabRect.width - 1, tabRect.height - 1 );
|
||||||
|
g.setColor( Color.green );
|
||||||
|
Rectangle tabRect2 = FlatUIUtils.subtractInsets( tabRect, getTabInsetsRotated( tabPlacement, tabIndex, getRealTabRotation( tabPlacement ) ) );
|
||||||
|
g.drawRect( tabRect2.x, tabRect2.y, tabRect2.width - 1, tabRect2.height - 1 );
|
||||||
|
g.setColor( Color.blue );
|
||||||
|
g.drawRect( iconRect.x, iconRect.y, iconRect.width - 1, iconRect.height - 1 );
|
||||||
|
g.setColor( Color.magenta );
|
||||||
|
g.drawRect( textRect.x, textRect.y, textRect.width - 1, textRect.height - 1 );
|
||||||
|
g.setColor( Color.orange );
|
||||||
|
Rectangle closeHitArea = getTabCloseHitArea( tabIndex );
|
||||||
|
if( moreTabsButton != null ) {
|
||||||
|
Point viewPosition = tabViewport.getViewPosition();
|
||||||
|
closeHitArea.x -= tabViewport.getX() - viewPosition.x;
|
||||||
|
closeHitArea.y -= tabViewport.getY() - viewPosition.y;
|
||||||
|
}
|
||||||
|
g.drawRect( closeHitArea.x, closeHitArea.y, closeHitArea.width - 1, closeHitArea.height - 1 );
|
||||||
|
debug*/
|
||||||
|
|
||||||
// special title clipping for scroll layout where title of last visible tab on right side may be truncated
|
// special title clipping for scroll layout where title of last visible tab on right side may be truncated
|
||||||
if( tabViewport != null && (tabPlacement == TOP || tabPlacement == BOTTOM) ) {
|
if( tabViewport != null && (tabPlacement == TOP || tabPlacement == BOTTOM) ) {
|
||||||
Rectangle viewRect = tabViewport.getViewRect();
|
Rectangle viewRect = tabViewport.getViewRect();
|
||||||
@@ -1160,18 +1243,70 @@ public class FlatTabbedPaneUI
|
|||||||
// html
|
// html
|
||||||
View view = getTextViewForTab( tabIndex );
|
View view = getTextViewForTab( tabIndex );
|
||||||
if( view != null ) {
|
if( view != null ) {
|
||||||
view.paint( g, textRect );
|
AffineTransform oldTransform = rotateGraphics( g, tabPlacement, textRect );
|
||||||
|
Rectangle textRect2 = (oldTransform != null)
|
||||||
|
? new Rectangle( textRect.x, textRect.y, textRect.height, textRect.width )
|
||||||
|
: textRect;
|
||||||
|
|
||||||
|
view.paint( g, textRect2 );
|
||||||
|
|
||||||
|
if( oldTransform != null )
|
||||||
|
((Graphics2D)g).setTransform( oldTransform );
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// rotate text if necessary
|
||||||
|
AffineTransform oldTransform = rotateGraphics( g, tabPlacement, textRect );
|
||||||
|
|
||||||
// plain text
|
// plain text
|
||||||
int mnemIndex = FlatLaf.isShowMnemonics() ? tabPane.getDisplayedMnemonicIndexAt( tabIndex ) : -1;
|
int mnemIndex = FlatLaf.isShowMnemonics() ? tabPane.getDisplayedMnemonicIndexAt( tabIndex ) : -1;
|
||||||
g.setColor( getTabForeground( tabPlacement, tabIndex, isSelected ) );
|
g.setColor( getTabForeground( tabPlacement, tabIndex, isSelected ) );
|
||||||
FlatUIUtils.drawStringUnderlineCharAt( tabPane, g, title, mnemIndex,
|
FlatUIUtils.drawStringUnderlineCharAt( tabPane, g, title, mnemIndex,
|
||||||
textRect.x, textRect.y + metrics.getAscent() );
|
textRect.x, textRect.y + metrics.getAscent() );
|
||||||
|
|
||||||
|
if( oldTransform != null )
|
||||||
|
((Graphics2D)g).setTransform( oldTransform );
|
||||||
} );
|
} );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void paintIcon( Graphics g, int tabPlacement, int tabIndex, Icon icon, Rectangle iconRect, boolean isSelected ) {
|
||||||
|
if( icon == null )
|
||||||
|
return;
|
||||||
|
|
||||||
|
// clip icon painting (also done in JDK since Java 10)
|
||||||
|
Shape oldClip = g.getClip();
|
||||||
|
((Graphics2D)g).clip( iconRect );
|
||||||
|
|
||||||
|
// rotate icon if necessary
|
||||||
|
AffineTransform oldTransform = rotateGraphics( g, tabPlacement, iconRect );
|
||||||
|
|
||||||
|
// paint icon
|
||||||
|
icon.paintIcon( tabPane, g, iconRect.x, iconRect.y );
|
||||||
|
|
||||||
|
if( oldTransform != null )
|
||||||
|
((Graphics2D)g).setTransform( oldTransform );
|
||||||
|
g.setClip( oldClip );
|
||||||
|
}
|
||||||
|
|
||||||
|
private AffineTransform rotateGraphics( Graphics g, int tabPlacement, Rectangle r ) {
|
||||||
|
Graphics2D g2 = (Graphics2D) g;
|
||||||
|
AffineTransform oldTransform = null;
|
||||||
|
|
||||||
|
int rotation = getRealTabRotation( tabPlacement );
|
||||||
|
if( rotation == LEFT ) {
|
||||||
|
oldTransform = g2.getTransform();
|
||||||
|
g2.translate( 0, r.height );
|
||||||
|
g2.rotate( Math.toRadians( 270 ), r.x, r.y );
|
||||||
|
} else if( rotation == RIGHT ) {
|
||||||
|
oldTransform = g2.getTransform();
|
||||||
|
g2.translate( r.width, 0 );
|
||||||
|
g2.rotate( Math.toRadians( 90 ), r.x, r.y );
|
||||||
|
}
|
||||||
|
|
||||||
|
return oldTransform;
|
||||||
|
}
|
||||||
|
|
||||||
/** @since 3.1 */
|
/** @since 3.1 */
|
||||||
protected Color getTabForeground( int tabPlacement, int tabIndex, boolean isSelected ) {
|
protected Color getTabForeground( int tabPlacement, int tabIndex, boolean isSelected ) {
|
||||||
// tabbed pane or tab is disabled
|
// tabbed pane or tab is disabled
|
||||||
@@ -1518,7 +1653,7 @@ public class FlatTabbedPaneUI
|
|||||||
Rectangle2D.intersect( tabViewport.getBounds(), innerTabRect, innerTabRect );
|
Rectangle2D.intersect( tabViewport.getBounds(), innerTabRect, innerTabRect );
|
||||||
|
|
||||||
Rectangle2D.Float gap = null;
|
Rectangle2D.Float gap = null;
|
||||||
if( isHorizontalTabPlacement() ) {
|
if( isHorizontalTabPlacement( tabPlacement ) ) {
|
||||||
if( innerTabRect.width > 0 ) {
|
if( innerTabRect.width > 0 ) {
|
||||||
float y2 = (tabPlacement == TOP) ? y : y + h - csh;
|
float y2 = (tabPlacement == TOP) ? y : y + h - csh;
|
||||||
gap = new Rectangle2D.Float( innerTabRect.x, y2, innerTabRect.width, csh );
|
gap = new Rectangle2D.Float( innerTabRect.x, y2, innerTabRect.width, csh );
|
||||||
@@ -1553,7 +1688,7 @@ public class FlatTabbedPaneUI
|
|||||||
// (left and right if horizontal, top and bottom if vertical)
|
// (left and right if horizontal, top and bottom if vertical)
|
||||||
Shape oldClip = g.getClip();
|
Shape oldClip = g.getClip();
|
||||||
Rectangle vr = tabViewport.getBounds();
|
Rectangle vr = tabViewport.getBounds();
|
||||||
if( isHorizontalTabPlacement() )
|
if( isHorizontalTabPlacement( tabPlacement ) )
|
||||||
g.clipRect( vr.x, 0, vr.width, tabPane.getHeight() );
|
g.clipRect( vr.x, 0, vr.width, tabPane.getHeight() );
|
||||||
else
|
else
|
||||||
g.clipRect( 0, vr.y, tabPane.getWidth(), vr.height );
|
g.clipRect( 0, vr.y, tabPane.getWidth(), vr.height );
|
||||||
@@ -1572,13 +1707,24 @@ public class FlatTabbedPaneUI
|
|||||||
protected String layoutAndClipLabel( int tabPlacement, FontMetrics metrics, int tabIndex,
|
protected String layoutAndClipLabel( int tabPlacement, FontMetrics metrics, int tabIndex,
|
||||||
String title, Icon icon, Rectangle tabRect, Rectangle iconRect, Rectangle textRect, boolean isSelected )
|
String title, Icon icon, Rectangle tabRect, Rectangle iconRect, Rectangle textRect, boolean isSelected )
|
||||||
{
|
{
|
||||||
|
int rotation = getRealTabRotation( tabPlacement );
|
||||||
|
boolean leftToRight = isLeftToRight();
|
||||||
|
|
||||||
// remove tab insets and space for close button from the tab rectangle
|
// remove tab insets and space for close button from the tab rectangle
|
||||||
// to get correctly clipped title
|
// to get correctly clipped title
|
||||||
tabRect = FlatUIUtils.subtractInsets( tabRect, getTabInsets( tabPlacement, tabIndex ) );
|
tabRect = FlatUIUtils.subtractInsets( tabRect, getTabInsetsRotated( tabPlacement, tabIndex, rotation ) );
|
||||||
if( isTabClosable( tabIndex ) ) {
|
if( isTabClosable( tabIndex ) ) {
|
||||||
tabRect.width -= closeIcon.getIconWidth();
|
if( rotation == NONE ) {
|
||||||
if( !isLeftToRight() )
|
int iconWidth = closeIcon.getIconWidth();
|
||||||
tabRect.x += closeIcon.getIconWidth();
|
tabRect.width -= iconWidth;
|
||||||
|
if( !leftToRight )
|
||||||
|
tabRect.x += iconWidth;
|
||||||
|
} else {
|
||||||
|
int iconHeight = closeIcon.getIconHeight();
|
||||||
|
tabRect.height -= iconHeight;
|
||||||
|
if( (rotation == LEFT && leftToRight) || (rotation == RIGHT && !leftToRight) )
|
||||||
|
tabRect.y += iconHeight;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// icon placement
|
// icon placement
|
||||||
@@ -1602,9 +1748,13 @@ public class FlatTabbedPaneUI
|
|||||||
tabPane.putClientProperty( "html", view );
|
tabPane.putClientProperty( "html", view );
|
||||||
|
|
||||||
// layout label
|
// layout label
|
||||||
String clippedTitle = SwingUtilities.layoutCompoundLabel( tabPane, metrics, title, icon,
|
String clippedTitle = (rotation == NONE)
|
||||||
CENTER, getTabAlignment( tabIndex ), verticalTextPosition, horizontalTextPosition,
|
? SwingUtilities.layoutCompoundLabel( tabPane, metrics, title, icon,
|
||||||
tabRect, iconRect, textRect, scale( textIconGapUnscaled ) );
|
CENTER, getTabAlignment( tabIndex ), verticalTextPosition, horizontalTextPosition,
|
||||||
|
tabRect, iconRect, textRect, scale( textIconGapUnscaled ) )
|
||||||
|
: layoutVerticalCompoundLabel( rotation, tabPane, metrics, title, icon,
|
||||||
|
CENTER, getTabAlignment( tabIndex ), verticalTextPosition, horizontalTextPosition,
|
||||||
|
tabRect, iconRect, textRect, scale( textIconGapUnscaled ) );
|
||||||
|
|
||||||
// remove temporary client property
|
// remove temporary client property
|
||||||
tabPane.putClientProperty( "html", null );
|
tabPane.putClientProperty( "html", null );
|
||||||
@@ -1612,6 +1762,50 @@ public class FlatTabbedPaneUI
|
|||||||
return clippedTitle;
|
return clippedTitle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String layoutVerticalCompoundLabel( int rotation, JComponent c, FontMetrics fm, String text, Icon icon,
|
||||||
|
int verticalAlignment, int horizontalAlignment, int verticalTextPosition, int horizontalTextPosition,
|
||||||
|
Rectangle viewR, Rectangle iconR, Rectangle textR, int textIconGap )
|
||||||
|
{
|
||||||
|
// layout non-rotated
|
||||||
|
Rectangle viewR2 = new Rectangle( viewR.height, viewR.width );
|
||||||
|
String clippedTitle = SwingUtilities.layoutCompoundLabel( c, fm, text, icon,
|
||||||
|
verticalAlignment, horizontalAlignment, verticalTextPosition, horizontalTextPosition,
|
||||||
|
viewR2, iconR, textR, textIconGap );
|
||||||
|
|
||||||
|
// rotate icon and text rectangles
|
||||||
|
if( rotation == LEFT ) {
|
||||||
|
rotateLeft( viewR, iconR );
|
||||||
|
rotateLeft( viewR, textR );
|
||||||
|
} else {
|
||||||
|
rotateRight( viewR, iconR );
|
||||||
|
rotateRight( viewR, textR );
|
||||||
|
}
|
||||||
|
|
||||||
|
return clippedTitle;
|
||||||
|
}
|
||||||
|
|
||||||
|
private void rotateLeft( Rectangle viewR, Rectangle r ) {
|
||||||
|
int x = viewR.x + r.y;
|
||||||
|
int y = viewR.y + (viewR.height - (r.x + r.width));
|
||||||
|
r.setBounds( x, y, r.height, r.width );
|
||||||
|
}
|
||||||
|
|
||||||
|
private void rotateRight( Rectangle viewR, Rectangle r ) {
|
||||||
|
int x = viewR.x + (viewR.width - (r.y + r.height));
|
||||||
|
int y = viewR.y + r.x;
|
||||||
|
r.setBounds( x, y, r.height, r.width );
|
||||||
|
}
|
||||||
|
|
||||||
|
/** @since 3.3 */
|
||||||
|
protected int getRealTabRotation( int tabPlacement ) {
|
||||||
|
int rotation = getTabRotation();
|
||||||
|
int realRotation = (rotation == AUTO)
|
||||||
|
? (tabPlacement == LEFT ? LEFT : (tabPlacement == RIGHT ? RIGHT : NONE))
|
||||||
|
: (rotation == LEFT || rotation == RIGHT ? rotation : NONE);
|
||||||
|
assert realRotation == NONE || realRotation == LEFT || realRotation == RIGHT;
|
||||||
|
return realRotation;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int tabForCoordinate( JTabbedPane pane, int x, int y ) {
|
public int tabForCoordinate( JTabbedPane pane, int x, int y ) {
|
||||||
if( moreTabsButton != null ) {
|
if( moreTabsButton != null ) {
|
||||||
@@ -1646,13 +1840,23 @@ public class FlatTabbedPaneUI
|
|||||||
protected Rectangle getTabCloseBounds( int tabIndex, int x, int y, int w, int h, Rectangle dest ) {
|
protected Rectangle getTabCloseBounds( int tabIndex, int x, int y, int w, int h, Rectangle dest ) {
|
||||||
int iconWidth = closeIcon.getIconWidth();
|
int iconWidth = closeIcon.getIconWidth();
|
||||||
int iconHeight = closeIcon.getIconHeight();
|
int iconHeight = closeIcon.getIconHeight();
|
||||||
Insets tabInsets = getTabInsets( tabPane.getTabPlacement(), tabIndex );
|
int tabPlacement = tabPane.getTabPlacement();
|
||||||
|
int rotation = getRealTabRotation( tabPlacement );
|
||||||
|
Insets tabInsets = getTabInsetsRotated( tabPlacement, tabIndex, rotation );
|
||||||
|
boolean leftToRight = isLeftToRight();
|
||||||
|
|
||||||
// use one-third of right/left tab insets as gap between tab text and close button
|
// use one-third of right/left tab insets as gap between tab text and close button
|
||||||
dest.x = isLeftToRight()
|
if( rotation == NONE ) {
|
||||||
? (x + w - (tabInsets.right / 3 * 2) - iconWidth)
|
dest.x = leftToRight
|
||||||
: (x + (tabInsets.left / 3 * 2));
|
? (x + w - (tabInsets.right / 3 * 2) - iconWidth) // right
|
||||||
dest.y = y + (h - iconHeight) / 2;
|
: (x + (tabInsets.left / 3 * 2)); // left
|
||||||
|
dest.y = y + (h - iconHeight) / 2;
|
||||||
|
} else {
|
||||||
|
dest.x = x + (w - iconWidth) / 2;
|
||||||
|
dest.y = ((rotation == RIGHT && leftToRight) || (rotation == LEFT && !leftToRight))
|
||||||
|
? (y + h - (tabInsets.bottom / 3 * 2) - iconHeight) // bottom
|
||||||
|
: (y + (tabInsets.top / 3 * 2)); // top
|
||||||
|
}
|
||||||
dest.width = iconWidth;
|
dest.width = iconWidth;
|
||||||
dest.height = iconHeight;
|
dest.height = iconHeight;
|
||||||
return dest;
|
return dest;
|
||||||
@@ -1661,7 +1865,9 @@ public class FlatTabbedPaneUI
|
|||||||
protected Rectangle getTabCloseHitArea( int tabIndex ) {
|
protected Rectangle getTabCloseHitArea( int tabIndex ) {
|
||||||
Rectangle tabRect = getTabBounds( tabPane, tabIndex );
|
Rectangle tabRect = getTabBounds( tabPane, tabIndex );
|
||||||
Rectangle tabCloseRect = getTabCloseBounds( tabIndex, tabRect.x, tabRect.y, tabRect.width, tabRect.height, calcRect );
|
Rectangle tabCloseRect = getTabCloseBounds( tabIndex, tabRect.x, tabRect.y, tabRect.width, tabRect.height, calcRect );
|
||||||
return new Rectangle( tabCloseRect.x, tabRect.y, tabCloseRect.width, tabRect.height );
|
return (getRealTabRotation( tabPane.getTabPlacement() ) == NONE)
|
||||||
|
? new Rectangle( tabCloseRect.x, tabRect.y, tabCloseRect.width, tabRect.height )
|
||||||
|
: new Rectangle( tabRect.x, tabCloseRect.y, tabRect.width, tabCloseRect.height );
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean isTabClosable( int tabIndex ) {
|
protected boolean isTabClosable( int tabIndex ) {
|
||||||
@@ -1729,11 +1935,19 @@ public class FlatTabbedPaneUI
|
|||||||
return tabPane.getComponentOrientation().isLeftToRight();
|
return tabPane.getComponentOrientation().isLeftToRight();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean isHorizontalTabPlacement() {
|
/** @since 3.3 */
|
||||||
int tabPlacement = tabPane.getTabPlacement();
|
protected boolean isHorizontalTabPlacement( int tabPlacement ) {
|
||||||
return tabPlacement == TOP || tabPlacement == BOTTOM;
|
return tabPlacement == TOP || tabPlacement == BOTTOM;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns {@code true} if tab placement is top/bottom and text is painted horizontally or
|
||||||
|
* if tab placement is left/right and text is painted vertically (rotated).
|
||||||
|
*/
|
||||||
|
private boolean isHorizontalOrRotated( int tabPlacement ) {
|
||||||
|
return isHorizontalTabPlacement( tabPlacement ) == (getRealTabRotation( tabPlacement ) == NONE);
|
||||||
|
}
|
||||||
|
|
||||||
protected boolean isSmoothScrollingEnabled() {
|
protected boolean isSmoothScrollingEnabled() {
|
||||||
if( !Animator.useAnimation() )
|
if( !Animator.useAnimation() )
|
||||||
return false;
|
return false;
|
||||||
@@ -1812,6 +2026,17 @@ public class FlatTabbedPaneUI
|
|||||||
: tabWidthMode;
|
: tabWidthMode;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @since 3.3 */
|
||||||
|
protected int getTabRotation() {
|
||||||
|
Object value = tabPane.getClientProperty( TABBED_PANE_TAB_ROTATION );
|
||||||
|
if( value instanceof Integer )
|
||||||
|
return (Integer) value;
|
||||||
|
|
||||||
|
return (value instanceof String)
|
||||||
|
? parseTabRotation( (String) value )
|
||||||
|
: tabRotation;
|
||||||
|
}
|
||||||
|
|
||||||
/** @since 2 */
|
/** @since 2 */
|
||||||
protected static int parseTabType( String str ) {
|
protected static int parseTabType( String str ) {
|
||||||
if( str == null )
|
if( str == null )
|
||||||
@@ -1893,6 +2118,20 @@ public class FlatTabbedPaneUI
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @since 3.3 */
|
||||||
|
protected static int parseTabRotation( String str ) {
|
||||||
|
if( str == null )
|
||||||
|
return WIDTH_MODE_PREFERRED;
|
||||||
|
|
||||||
|
switch( str ) {
|
||||||
|
default:
|
||||||
|
case TABBED_PANE_TAB_ROTATION_NONE: return NONE;
|
||||||
|
case TABBED_PANE_TAB_ROTATION_AUTO: return AUTO;
|
||||||
|
case TABBED_PANE_TAB_ROTATION_LEFT: return LEFT;
|
||||||
|
case TABBED_PANE_TAB_ROTATION_RIGHT: return RIGHT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected static int parseTabIconPlacement( String str ) {
|
protected static int parseTabIconPlacement( String str ) {
|
||||||
if( str == null )
|
if( str == null )
|
||||||
return LEADING;
|
return LEADING;
|
||||||
@@ -2432,7 +2671,7 @@ public class FlatTabbedPaneUI
|
|||||||
? targetViewPosition
|
? targetViewPosition
|
||||||
: tabViewport.getViewPosition();
|
: tabViewport.getViewPosition();
|
||||||
Dimension viewSize = tabViewport.getViewSize();
|
Dimension viewSize = tabViewport.getViewSize();
|
||||||
boolean horizontal = isHorizontalTabPlacement();
|
boolean horizontal = isHorizontalTabPlacement( tabPane.getTabPlacement() );
|
||||||
int x = viewPosition.x;
|
int x = viewPosition.x;
|
||||||
int y = viewPosition.y;
|
int y = viewPosition.y;
|
||||||
if( horizontal )
|
if( horizontal )
|
||||||
@@ -2839,6 +3078,7 @@ public class FlatTabbedPaneUI
|
|||||||
case TABBED_PANE_TAB_AREA_ALIGNMENT:
|
case TABBED_PANE_TAB_AREA_ALIGNMENT:
|
||||||
case TABBED_PANE_TAB_ALIGNMENT:
|
case TABBED_PANE_TAB_ALIGNMENT:
|
||||||
case TABBED_PANE_TAB_WIDTH_MODE:
|
case TABBED_PANE_TAB_WIDTH_MODE:
|
||||||
|
case TABBED_PANE_TAB_ROTATION:
|
||||||
case TABBED_PANE_TAB_ICON_PLACEMENT:
|
case TABBED_PANE_TAB_ICON_PLACEMENT:
|
||||||
case TABBED_PANE_TAB_CLOSABLE:
|
case TABBED_PANE_TAB_CLOSABLE:
|
||||||
tabPane.revalidate();
|
tabPane.revalidate();
|
||||||
@@ -2974,8 +3214,8 @@ public class FlatTabbedPaneUI
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected Dimension calculateTabAreaSize() {
|
protected Dimension calculateTabAreaSize() {
|
||||||
boolean horizontal = isHorizontalTabPlacement();
|
|
||||||
int tabPlacement = tabPane.getTabPlacement();
|
int tabPlacement = tabPane.getTabPlacement();
|
||||||
|
boolean horizontal = isHorizontalTabPlacement( tabPlacement );
|
||||||
FontMetrics metrics = getFontMetrics();
|
FontMetrics metrics = getFontMetrics();
|
||||||
int fontHeight = metrics.getHeight();
|
int fontHeight = metrics.getHeight();
|
||||||
|
|
||||||
@@ -3172,7 +3412,7 @@ public class FlatTabbedPaneUI
|
|||||||
Dimension size = super.calculateTabAreaSize();
|
Dimension size = super.calculateTabAreaSize();
|
||||||
|
|
||||||
// limit width/height in scroll layout
|
// limit width/height in scroll layout
|
||||||
if( isHorizontalTabPlacement() )
|
if( isHorizontalTabPlacement( tabPane.getTabPlacement() ) )
|
||||||
size.width = Math.min( size.width, scale( 100 ) );
|
size.width = Math.min( size.width, scale( 100 ) );
|
||||||
else
|
else
|
||||||
size.height = Math.min( size.height, scale( 100 ) );
|
size.height = Math.min( size.height, scale( 100 ) );
|
||||||
@@ -3230,7 +3470,7 @@ public class FlatTabbedPaneUI
|
|||||||
// because methods scrollForward() and scrollBackward() in class
|
// because methods scrollForward() and scrollBackward() in class
|
||||||
// BasicTabbedPaneUI.ScrollableTabSupport do not work for right-to-left
|
// BasicTabbedPaneUI.ScrollableTabSupport do not work for right-to-left
|
||||||
boolean leftToRight = isLeftToRight();
|
boolean leftToRight = isLeftToRight();
|
||||||
if( !leftToRight && isHorizontalTabPlacement() ) {
|
if( !leftToRight && isHorizontalTabPlacement( tabPane.getTabPlacement() ) ) {
|
||||||
useMoreTabsButton = true;
|
useMoreTabsButton = true;
|
||||||
useScrollButtons = false;
|
useScrollButtons = false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -697,6 +697,8 @@ TabbedPane.tabAreaAlignment = leading
|
|||||||
TabbedPane.tabAlignment = center
|
TabbedPane.tabAlignment = center
|
||||||
# allowed values: preferred, equal or compact
|
# allowed values: preferred, equal or compact
|
||||||
TabbedPane.tabWidthMode = preferred
|
TabbedPane.tabWidthMode = preferred
|
||||||
|
# allowed values: none, auto, left or right
|
||||||
|
TabbedPane.tabRotation = none
|
||||||
|
|
||||||
# allowed values: underlined or card
|
# allowed values: underlined or card
|
||||||
TabbedPane.tabType = underlined
|
TabbedPane.tabType = underlined
|
||||||
|
|||||||
@@ -752,6 +752,7 @@ public class TestFlatStyleableInfo
|
|||||||
"tabAreaAlignment", String.class,
|
"tabAreaAlignment", String.class,
|
||||||
"tabAlignment", String.class,
|
"tabAlignment", String.class,
|
||||||
"tabWidthMode", String.class,
|
"tabWidthMode", String.class,
|
||||||
|
"tabRotation", String.class,
|
||||||
|
|
||||||
"arrowType", String.class,
|
"arrowType", String.class,
|
||||||
"buttonInsets", Insets.class,
|
"buttonInsets", Insets.class,
|
||||||
|
|||||||
@@ -758,6 +758,7 @@ public class TestFlatStyleableValue
|
|||||||
testString( c, ui, "tabAreaAlignment", "leading" );
|
testString( c, ui, "tabAreaAlignment", "leading" );
|
||||||
testString( c, ui, "tabAlignment", "center" );
|
testString( c, ui, "tabAlignment", "center" );
|
||||||
testString( c, ui, "tabWidthMode", "preferred" );
|
testString( c, ui, "tabWidthMode", "preferred" );
|
||||||
|
testString( c, ui, "tabRotation", "none" );
|
||||||
|
|
||||||
testString( c, ui, "arrowType", "chevron" );
|
testString( c, ui, "arrowType", "chevron" );
|
||||||
testInsets( c, ui, "buttonInsets", 1,2,3,4 );
|
testInsets( c, ui, "buttonInsets", 1,2,3,4 );
|
||||||
|
|||||||
@@ -937,6 +937,7 @@ public class TestFlatStyling
|
|||||||
ui.applyStyle( "tabAreaAlignment: leading" );
|
ui.applyStyle( "tabAreaAlignment: leading" );
|
||||||
ui.applyStyle( "tabAlignment: center" );
|
ui.applyStyle( "tabAlignment: center" );
|
||||||
ui.applyStyle( "tabWidthMode: preferred" );
|
ui.applyStyle( "tabWidthMode: preferred" );
|
||||||
|
ui.applyStyle( "tabRotation: none" );
|
||||||
|
|
||||||
ui.applyStyle( "arrowType: chevron" );
|
ui.applyStyle( "arrowType: chevron" );
|
||||||
ui.applyStyle( "buttonInsets: 1,2,3,4" );
|
ui.applyStyle( "buttonInsets: 1,2,3,4" );
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ public class ScrollablePanel
|
|||||||
{
|
{
|
||||||
@Override
|
@Override
|
||||||
public Dimension getPreferredScrollableViewportSize() {
|
public Dimension getPreferredScrollableViewportSize() {
|
||||||
return UIScale.scale( new Dimension( 400, 400 ) );
|
return new Dimension( getPreferredSize().width, UIScale.scale( 400 ) );
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -49,7 +49,7 @@ public class ScrollablePanel
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean getScrollableTracksViewportWidth() {
|
public boolean getScrollableTracksViewportWidth() {
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -313,6 +313,14 @@ class TabsPanel
|
|||||||
putTabbedPanesClientProperty( TABBED_PANE_SHOW_TAB_SEPARATORS, showTabSeparators );
|
putTabbedPanesClientProperty( TABBED_PANE_SHOW_TAB_SEPARATORS, showTabSeparators );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void tabRotationChanged() {
|
||||||
|
String tabRotation = rotationAutoButton.isSelected() ? TABBED_PANE_TAB_ROTATION_AUTO
|
||||||
|
: rotationLeftButton.isSelected() ? TABBED_PANE_TAB_ROTATION_LEFT
|
||||||
|
: rotationRightButton.isSelected() ? TABBED_PANE_TAB_ROTATION_RIGHT
|
||||||
|
: null;
|
||||||
|
putTabbedPanesClientProperty( TABBED_PANE_TAB_ROTATION, tabRotation );
|
||||||
|
}
|
||||||
|
|
||||||
private void putTabbedPanesClientProperty( String key, Object value ) {
|
private void putTabbedPanesClientProperty( String key, Object value ) {
|
||||||
updateTabbedPanesRecur( this, tabbedPane -> tabbedPane.putClientProperty( key, value ) );
|
updateTabbedPanesRecur( this, tabbedPane -> tabbedPane.putClientProperty( key, value ) );
|
||||||
}
|
}
|
||||||
@@ -331,6 +339,8 @@ class TabsPanel
|
|||||||
|
|
||||||
private void initComponents() {
|
private void initComponents() {
|
||||||
// JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents
|
// JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents
|
||||||
|
JScrollPane tabsScrollPane = new JScrollPane();
|
||||||
|
ScrollablePanel panel6 = new ScrollablePanel();
|
||||||
JPanel panel1 = new JPanel();
|
JPanel panel1 = new JPanel();
|
||||||
JLabel tabPlacementLabel = new JLabel();
|
JLabel tabPlacementLabel = new JLabel();
|
||||||
tabPlacementToolBar = new JToolBar();
|
tabPlacementToolBar = new JToolBar();
|
||||||
@@ -397,344 +407,369 @@ class TabsPanel
|
|||||||
scrollAsNeededSingleButton = new JToggleButton();
|
scrollAsNeededSingleButton = new JToggleButton();
|
||||||
scrollAsNeededButton = new JToggleButton();
|
scrollAsNeededButton = new JToggleButton();
|
||||||
scrollNeverButton = new JToggleButton();
|
scrollNeverButton = new JToggleButton();
|
||||||
scrollButtonsPlacementLabel = new JLabel();
|
|
||||||
scrollButtonsPlacementToolBar = new JToolBar();
|
|
||||||
scrollBothButton = new JToggleButton();
|
|
||||||
scrollTrailingButton = new JToggleButton();
|
|
||||||
showTabSeparatorsCheckBox = new JCheckBox();
|
|
||||||
tabsPopupPolicyLabel = new JLabel();
|
tabsPopupPolicyLabel = new JLabel();
|
||||||
tabsPopupPolicyToolBar = new JToolBar();
|
tabsPopupPolicyToolBar = new JToolBar();
|
||||||
popupAsNeededButton = new JToggleButton();
|
popupAsNeededButton = new JToggleButton();
|
||||||
popupNeverButton = new JToggleButton();
|
popupNeverButton = new JToggleButton();
|
||||||
|
showTabSeparatorsCheckBox = new JCheckBox();
|
||||||
|
scrollButtonsPlacementLabel = new JLabel();
|
||||||
|
scrollButtonsPlacementToolBar = new JToolBar();
|
||||||
|
scrollBothButton = new JToggleButton();
|
||||||
|
scrollTrailingButton = new JToggleButton();
|
||||||
tabTypeLabel = new JLabel();
|
tabTypeLabel = new JLabel();
|
||||||
tabTypeToolBar = new JToolBar();
|
tabTypeToolBar = new JToolBar();
|
||||||
underlinedTabTypeButton = new JToggleButton();
|
underlinedTabTypeButton = new JToggleButton();
|
||||||
cardTabTypeButton = new JToggleButton();
|
cardTabTypeButton = new JToggleButton();
|
||||||
|
tabRotationLabel = new JLabel();
|
||||||
|
tabRotationToolBar = new JToolBar();
|
||||||
|
rotationNoneButton = new JToggleButton();
|
||||||
|
rotationAutoButton = new JToggleButton();
|
||||||
|
rotationLeftButton = new JToggleButton();
|
||||||
|
rotationRightButton = new JToggleButton();
|
||||||
|
|
||||||
//======== this ========
|
//======== this ========
|
||||||
setLayout(new MigLayout(
|
setLayout(new MigLayout(
|
||||||
"insets dialog,hidemode 3",
|
"insets 0,hidemode 3",
|
||||||
// columns
|
// columns
|
||||||
"[grow,fill]para" +
|
"[grow,fill]",
|
||||||
"[fill]para" +
|
|
||||||
"[fill]",
|
|
||||||
// rows
|
// rows
|
||||||
"[grow,fill]para" +
|
"[grow,fill]0" +
|
||||||
"[]" +
|
"[]0" +
|
||||||
"[]"));
|
"[]"));
|
||||||
|
|
||||||
//======== panel1 ========
|
//======== tabsScrollPane ========
|
||||||
{
|
{
|
||||||
panel1.setLayout(new MigLayout(
|
tabsScrollPane.setBorder(BorderFactory.createEmptyBorder());
|
||||||
"insets 0,hidemode 3",
|
|
||||||
// columns
|
|
||||||
"[grow,fill]",
|
|
||||||
// rows
|
|
||||||
"[]" +
|
|
||||||
"[fill]para" +
|
|
||||||
"[]0" +
|
|
||||||
"[]" +
|
|
||||||
"[]para" +
|
|
||||||
"[]" +
|
|
||||||
"[]para" +
|
|
||||||
"[]" +
|
|
||||||
"[]"));
|
|
||||||
|
|
||||||
//---- tabPlacementLabel ----
|
//======== panel6 ========
|
||||||
tabPlacementLabel.setText("Tab placement");
|
|
||||||
tabPlacementLabel.putClientProperty("FlatLaf.styleClass", "h3");
|
|
||||||
panel1.add(tabPlacementLabel, "cell 0 0");
|
|
||||||
|
|
||||||
//======== tabPlacementToolBar ========
|
|
||||||
{
|
{
|
||||||
tabPlacementToolBar.setFloatable(false);
|
panel6.setLayout(new MigLayout(
|
||||||
tabPlacementToolBar.setBorder(BorderFactory.createEmptyBorder());
|
"insets dialog,hidemode 3",
|
||||||
|
|
||||||
//---- topPlacementButton ----
|
|
||||||
topPlacementButton.setText("top");
|
|
||||||
topPlacementButton.setSelected(true);
|
|
||||||
topPlacementButton.putClientProperty("FlatLaf.styleClass", "small");
|
|
||||||
topPlacementButton.addActionListener(e -> tabPlacementChanged());
|
|
||||||
tabPlacementToolBar.add(topPlacementButton);
|
|
||||||
|
|
||||||
//---- bottomPlacementButton ----
|
|
||||||
bottomPlacementButton.setText("bottom");
|
|
||||||
bottomPlacementButton.putClientProperty("FlatLaf.styleClass", "small");
|
|
||||||
bottomPlacementButton.addActionListener(e -> tabPlacementChanged());
|
|
||||||
tabPlacementToolBar.add(bottomPlacementButton);
|
|
||||||
|
|
||||||
//---- leftPlacementButton ----
|
|
||||||
leftPlacementButton.setText("left");
|
|
||||||
leftPlacementButton.putClientProperty("FlatLaf.styleClass", "small");
|
|
||||||
leftPlacementButton.addActionListener(e -> tabPlacementChanged());
|
|
||||||
tabPlacementToolBar.add(leftPlacementButton);
|
|
||||||
|
|
||||||
//---- rightPlacementButton ----
|
|
||||||
rightPlacementButton.setText("right");
|
|
||||||
rightPlacementButton.putClientProperty("FlatLaf.styleClass", "small");
|
|
||||||
rightPlacementButton.addActionListener(e -> tabPlacementChanged());
|
|
||||||
tabPlacementToolBar.add(rightPlacementButton);
|
|
||||||
tabPlacementToolBar.addSeparator();
|
|
||||||
|
|
||||||
//---- scrollButton ----
|
|
||||||
scrollButton.setText("scroll");
|
|
||||||
scrollButton.putClientProperty("FlatLaf.styleClass", "small");
|
|
||||||
scrollButton.addActionListener(e -> scrollChanged());
|
|
||||||
tabPlacementToolBar.add(scrollButton);
|
|
||||||
|
|
||||||
//---- borderButton ----
|
|
||||||
borderButton.setText("border");
|
|
||||||
borderButton.putClientProperty("FlatLaf.styleClass", "small");
|
|
||||||
borderButton.addActionListener(e -> borderChanged());
|
|
||||||
tabPlacementToolBar.add(borderButton);
|
|
||||||
}
|
|
||||||
panel1.add(tabPlacementToolBar, "cell 0 0,alignx right,growx 0");
|
|
||||||
panel1.add(tabPlacementTabbedPane, "cell 0 1,width 300:300,height 100:100");
|
|
||||||
|
|
||||||
//---- tabLayoutLabel ----
|
|
||||||
tabLayoutLabel.setText("Tab layout");
|
|
||||||
tabLayoutLabel.putClientProperty("FlatLaf.styleClass", "h3");
|
|
||||||
panel1.add(tabLayoutLabel, "cell 0 2");
|
|
||||||
|
|
||||||
//======== tabLayoutToolBar ========
|
|
||||||
{
|
|
||||||
tabLayoutToolBar.setFloatable(false);
|
|
||||||
tabLayoutToolBar.setBorder(BorderFactory.createEmptyBorder());
|
|
||||||
|
|
||||||
//---- scrollTabLayoutButton ----
|
|
||||||
scrollTabLayoutButton.setText("scroll");
|
|
||||||
scrollTabLayoutButton.setSelected(true);
|
|
||||||
scrollTabLayoutButton.putClientProperty("FlatLaf.styleClass", "small");
|
|
||||||
scrollTabLayoutButton.addActionListener(e -> tabLayoutChanged());
|
|
||||||
tabLayoutToolBar.add(scrollTabLayoutButton);
|
|
||||||
|
|
||||||
//---- wrapTabLayoutButton ----
|
|
||||||
wrapTabLayoutButton.setText("wrap");
|
|
||||||
wrapTabLayoutButton.putClientProperty("FlatLaf.styleClass", "small");
|
|
||||||
wrapTabLayoutButton.addActionListener(e -> tabLayoutChanged());
|
|
||||||
tabLayoutToolBar.add(wrapTabLayoutButton);
|
|
||||||
}
|
|
||||||
panel1.add(tabLayoutToolBar, "cell 0 2,alignx right,growx 0");
|
|
||||||
|
|
||||||
//---- scrollLayoutNoteLabel ----
|
|
||||||
scrollLayoutNoteLabel.setText("(use mouse wheel to scroll; arrow button shows hidden tabs)");
|
|
||||||
scrollLayoutNoteLabel.setEnabled(false);
|
|
||||||
scrollLayoutNoteLabel.putClientProperty("FlatLaf.styleClass", "small");
|
|
||||||
panel1.add(scrollLayoutNoteLabel, "cell 0 3");
|
|
||||||
|
|
||||||
//---- wrapLayoutNoteLabel ----
|
|
||||||
wrapLayoutNoteLabel.setText("(probably better to use scroll layout?)");
|
|
||||||
wrapLayoutNoteLabel.setEnabled(false);
|
|
||||||
wrapLayoutNoteLabel.putClientProperty("FlatLaf.styleClass", "small");
|
|
||||||
panel1.add(wrapLayoutNoteLabel, "cell 0 3");
|
|
||||||
panel1.add(scrollLayoutTabbedPane, "cell 0 4");
|
|
||||||
panel1.add(wrapLayoutTabbedPane, "cell 0 4,width 100:100,height pref*2px");
|
|
||||||
|
|
||||||
//---- closableTabsLabel ----
|
|
||||||
closableTabsLabel.setText("Closable tabs");
|
|
||||||
closableTabsLabel.putClientProperty("FlatLaf.styleClass", "h3");
|
|
||||||
panel1.add(closableTabsLabel, "cell 0 5");
|
|
||||||
|
|
||||||
//======== closableTabsToolBar ========
|
|
||||||
{
|
|
||||||
closableTabsToolBar.setFloatable(false);
|
|
||||||
closableTabsToolBar.setBorder(BorderFactory.createEmptyBorder());
|
|
||||||
|
|
||||||
//---- squareCloseButton ----
|
|
||||||
squareCloseButton.setText("square");
|
|
||||||
squareCloseButton.setSelected(true);
|
|
||||||
squareCloseButton.putClientProperty("FlatLaf.styleClass", "small");
|
|
||||||
squareCloseButton.addActionListener(e -> closeButtonStyleChanged());
|
|
||||||
closableTabsToolBar.add(squareCloseButton);
|
|
||||||
|
|
||||||
//---- circleCloseButton ----
|
|
||||||
circleCloseButton.setText("circle");
|
|
||||||
circleCloseButton.putClientProperty("FlatLaf.styleClass", "small");
|
|
||||||
circleCloseButton.addActionListener(e -> closeButtonStyleChanged());
|
|
||||||
closableTabsToolBar.add(circleCloseButton);
|
|
||||||
|
|
||||||
//---- redCrossCloseButton ----
|
|
||||||
redCrossCloseButton.setText("red cross");
|
|
||||||
redCrossCloseButton.putClientProperty("FlatLaf.styleClass", "small");
|
|
||||||
redCrossCloseButton.addActionListener(e -> closeButtonStyleChanged());
|
|
||||||
closableTabsToolBar.add(redCrossCloseButton);
|
|
||||||
}
|
|
||||||
panel1.add(closableTabsToolBar, "cell 0 5,alignx right,growx 0");
|
|
||||||
panel1.add(closableTabsTabbedPane, "cell 0 6");
|
|
||||||
|
|
||||||
//---- tabAreaComponentsLabel ----
|
|
||||||
tabAreaComponentsLabel.setText("Custom tab area components");
|
|
||||||
tabAreaComponentsLabel.putClientProperty("FlatLaf.styleClass", "h3");
|
|
||||||
panel1.add(tabAreaComponentsLabel, "cell 0 7");
|
|
||||||
|
|
||||||
//======== tabAreaComponentsToolBar ========
|
|
||||||
{
|
|
||||||
tabAreaComponentsToolBar.setFloatable(false);
|
|
||||||
tabAreaComponentsToolBar.setBorder(BorderFactory.createEmptyBorder());
|
|
||||||
|
|
||||||
//---- leadingComponentButton ----
|
|
||||||
leadingComponentButton.setText("leading");
|
|
||||||
leadingComponentButton.setSelected(true);
|
|
||||||
leadingComponentButton.putClientProperty("FlatLaf.styleClass", "small");
|
|
||||||
leadingComponentButton.addActionListener(e -> customComponentsChanged());
|
|
||||||
tabAreaComponentsToolBar.add(leadingComponentButton);
|
|
||||||
|
|
||||||
//---- trailingComponentButton ----
|
|
||||||
trailingComponentButton.setText("trailing");
|
|
||||||
trailingComponentButton.setSelected(true);
|
|
||||||
trailingComponentButton.putClientProperty("FlatLaf.styleClass", "small");
|
|
||||||
trailingComponentButton.addActionListener(e -> customComponentsChanged());
|
|
||||||
tabAreaComponentsToolBar.add(trailingComponentButton);
|
|
||||||
}
|
|
||||||
panel1.add(tabAreaComponentsToolBar, "cell 0 7,alignx right,growx 0");
|
|
||||||
panel1.add(customComponentsTabbedPane, "cell 0 8");
|
|
||||||
}
|
|
||||||
add(panel1, "cell 0 0");
|
|
||||||
|
|
||||||
//======== panel2 ========
|
|
||||||
{
|
|
||||||
panel2.setLayout(new MigLayout(
|
|
||||||
"insets 0,hidemode 3",
|
|
||||||
// columns
|
|
||||||
"[grow,fill]",
|
|
||||||
// rows
|
|
||||||
"[]0" +
|
|
||||||
"[]" +
|
|
||||||
"[fill]" +
|
|
||||||
"[center]" +
|
|
||||||
"[center]" +
|
|
||||||
"[center]para" +
|
|
||||||
"[center]0" +
|
|
||||||
"[]" +
|
|
||||||
"[center]" +
|
|
||||||
"[center]" +
|
|
||||||
"[center]" +
|
|
||||||
"[]"));
|
|
||||||
|
|
||||||
//---- tabIconPlacementLabel ----
|
|
||||||
tabIconPlacementLabel.setText("Tab icon placement");
|
|
||||||
tabIconPlacementLabel.putClientProperty("FlatLaf.styleClass", "h3");
|
|
||||||
panel2.add(tabIconPlacementLabel, "cell 0 0");
|
|
||||||
|
|
||||||
//---- tabIconPlacementNodeLabel ----
|
|
||||||
tabIconPlacementNodeLabel.setText("(top/bottom/leading/trailing)");
|
|
||||||
tabIconPlacementNodeLabel.setEnabled(false);
|
|
||||||
tabIconPlacementNodeLabel.putClientProperty("FlatLaf.styleClass", "small");
|
|
||||||
panel2.add(tabIconPlacementNodeLabel, "cell 0 1");
|
|
||||||
panel2.add(iconTopTabbedPane, "cell 0 2");
|
|
||||||
panel2.add(iconBottomTabbedPane, "cell 0 3");
|
|
||||||
panel2.add(iconLeadingTabbedPane, "cell 0 4");
|
|
||||||
panel2.add(iconTrailingTabbedPane, "cell 0 5");
|
|
||||||
|
|
||||||
//---- tabAreaAlignmentLabel ----
|
|
||||||
tabAreaAlignmentLabel.setText("Tab area alignment");
|
|
||||||
tabAreaAlignmentLabel.putClientProperty("FlatLaf.styleClass", "h3");
|
|
||||||
panel2.add(tabAreaAlignmentLabel, "cell 0 6");
|
|
||||||
|
|
||||||
//---- tabAreaAlignmentNoteLabel ----
|
|
||||||
tabAreaAlignmentNoteLabel.setText("(leading/center/trailing/fill)");
|
|
||||||
tabAreaAlignmentNoteLabel.setEnabled(false);
|
|
||||||
tabAreaAlignmentNoteLabel.putClientProperty("FlatLaf.styleClass", "small");
|
|
||||||
panel2.add(tabAreaAlignmentNoteLabel, "cell 0 7");
|
|
||||||
panel2.add(alignLeadingTabbedPane, "cell 0 8");
|
|
||||||
panel2.add(alignCenterTabbedPane, "cell 0 9");
|
|
||||||
panel2.add(alignTrailingTabbedPane, "cell 0 10");
|
|
||||||
panel2.add(alignFillTabbedPane, "cell 0 11");
|
|
||||||
}
|
|
||||||
add(panel2, "cell 1 0,growy");
|
|
||||||
|
|
||||||
//======== panel3 ========
|
|
||||||
{
|
|
||||||
panel3.setLayout(new MigLayout(
|
|
||||||
"insets 0,hidemode 3",
|
|
||||||
// columns
|
|
||||||
"[grow,fill]",
|
|
||||||
// rows
|
|
||||||
"[]0" +
|
|
||||||
"[]" +
|
|
||||||
"[]" +
|
|
||||||
"[]" +
|
|
||||||
"[]para" +
|
|
||||||
"[]" +
|
|
||||||
"[]" +
|
|
||||||
"[]para" +
|
|
||||||
"[]0" +
|
|
||||||
"[]"));
|
|
||||||
|
|
||||||
//---- tabWidthModeLabel ----
|
|
||||||
tabWidthModeLabel.setText("Tab width mode");
|
|
||||||
tabWidthModeLabel.putClientProperty("FlatLaf.styleClass", "h3");
|
|
||||||
panel3.add(tabWidthModeLabel, "cell 0 0");
|
|
||||||
|
|
||||||
//---- tabWidthModeNoteLabel ----
|
|
||||||
tabWidthModeNoteLabel.setText("(preferred/equal/compact)");
|
|
||||||
tabWidthModeNoteLabel.setEnabled(false);
|
|
||||||
tabWidthModeNoteLabel.putClientProperty("FlatLaf.styleClass", "small");
|
|
||||||
panel3.add(tabWidthModeNoteLabel, "cell 0 1");
|
|
||||||
panel3.add(widthPreferredTabbedPane, "cell 0 2");
|
|
||||||
panel3.add(widthEqualTabbedPane, "cell 0 3");
|
|
||||||
panel3.add(widthCompactTabbedPane, "cell 0 4");
|
|
||||||
|
|
||||||
//---- minMaxTabWidthLabel ----
|
|
||||||
minMaxTabWidthLabel.setText("Minimum/maximum tab width");
|
|
||||||
minMaxTabWidthLabel.putClientProperty("FlatLaf.styleClass", "h3");
|
|
||||||
panel3.add(minMaxTabWidthLabel, "cell 0 5");
|
|
||||||
panel3.add(minimumTabWidthTabbedPane, "cell 0 6");
|
|
||||||
panel3.add(maximumTabWidthTabbedPane, "cell 0 7");
|
|
||||||
|
|
||||||
//---- tabAlignmentLabel ----
|
|
||||||
tabAlignmentLabel.setText("Tab title alignment");
|
|
||||||
tabAlignmentLabel.putClientProperty("FlatLaf.styleClass", "h3");
|
|
||||||
panel3.add(tabAlignmentLabel, "cell 0 8");
|
|
||||||
|
|
||||||
//======== panel5 ========
|
|
||||||
{
|
|
||||||
panel5.setLayout(new MigLayout(
|
|
||||||
"insets 0,hidemode 3",
|
|
||||||
// columns
|
// columns
|
||||||
"[grow,fill]para" +
|
"[grow,fill]para" +
|
||||||
|
"[fill]para" +
|
||||||
"[fill]",
|
"[fill]",
|
||||||
// rows
|
// rows
|
||||||
"[]" +
|
"[grow,fill]"));
|
||||||
"[]" +
|
|
||||||
"[]" +
|
|
||||||
"[]"));
|
|
||||||
|
|
||||||
//---- tabAlignmentNoteLabel ----
|
//======== panel1 ========
|
||||||
tabAlignmentNoteLabel.setText("(leading/center/trailing)");
|
|
||||||
tabAlignmentNoteLabel.setEnabled(false);
|
|
||||||
tabAlignmentNoteLabel.putClientProperty("FlatLaf.styleClass", "small");
|
|
||||||
panel5.add(tabAlignmentNoteLabel, "cell 0 0");
|
|
||||||
|
|
||||||
//---- tabAlignmentNoteLabel2 ----
|
|
||||||
tabAlignmentNoteLabel2.setText("(trailing)");
|
|
||||||
tabAlignmentNoteLabel2.setEnabled(false);
|
|
||||||
tabAlignmentNoteLabel2.putClientProperty("FlatLaf.styleClass", "small");
|
|
||||||
panel5.add(tabAlignmentNoteLabel2, "cell 1 0,alignx right,growx 0");
|
|
||||||
panel5.add(tabAlignLeadingTabbedPane, "cell 0 1");
|
|
||||||
|
|
||||||
//======== tabAlignVerticalTabbedPane ========
|
|
||||||
{
|
{
|
||||||
tabAlignVerticalTabbedPane.setTabPlacement(SwingConstants.LEFT);
|
panel1.setLayout(new MigLayout(
|
||||||
|
"insets 0,hidemode 3",
|
||||||
|
// columns
|
||||||
|
"[grow,fill]",
|
||||||
|
// rows
|
||||||
|
"[]" +
|
||||||
|
"[fill]para" +
|
||||||
|
"[]0" +
|
||||||
|
"[]" +
|
||||||
|
"[]para" +
|
||||||
|
"[]" +
|
||||||
|
"[]para" +
|
||||||
|
"[]" +
|
||||||
|
"[]"));
|
||||||
|
|
||||||
|
//---- tabPlacementLabel ----
|
||||||
|
tabPlacementLabel.setText("Tab placement");
|
||||||
|
tabPlacementLabel.putClientProperty("FlatLaf.styleClass", "h3");
|
||||||
|
panel1.add(tabPlacementLabel, "cell 0 0");
|
||||||
|
|
||||||
|
//======== tabPlacementToolBar ========
|
||||||
|
{
|
||||||
|
tabPlacementToolBar.setFloatable(false);
|
||||||
|
tabPlacementToolBar.setBorder(BorderFactory.createEmptyBorder());
|
||||||
|
|
||||||
|
//---- topPlacementButton ----
|
||||||
|
topPlacementButton.setText("top");
|
||||||
|
topPlacementButton.setSelected(true);
|
||||||
|
topPlacementButton.putClientProperty("FlatLaf.styleClass", "small");
|
||||||
|
topPlacementButton.addActionListener(e -> tabPlacementChanged());
|
||||||
|
tabPlacementToolBar.add(topPlacementButton);
|
||||||
|
|
||||||
|
//---- bottomPlacementButton ----
|
||||||
|
bottomPlacementButton.setText("bottom");
|
||||||
|
bottomPlacementButton.putClientProperty("FlatLaf.styleClass", "small");
|
||||||
|
bottomPlacementButton.addActionListener(e -> tabPlacementChanged());
|
||||||
|
tabPlacementToolBar.add(bottomPlacementButton);
|
||||||
|
|
||||||
|
//---- leftPlacementButton ----
|
||||||
|
leftPlacementButton.setText("left");
|
||||||
|
leftPlacementButton.putClientProperty("FlatLaf.styleClass", "small");
|
||||||
|
leftPlacementButton.addActionListener(e -> tabPlacementChanged());
|
||||||
|
tabPlacementToolBar.add(leftPlacementButton);
|
||||||
|
|
||||||
|
//---- rightPlacementButton ----
|
||||||
|
rightPlacementButton.setText("right");
|
||||||
|
rightPlacementButton.putClientProperty("FlatLaf.styleClass", "small");
|
||||||
|
rightPlacementButton.addActionListener(e -> tabPlacementChanged());
|
||||||
|
tabPlacementToolBar.add(rightPlacementButton);
|
||||||
|
tabPlacementToolBar.addSeparator();
|
||||||
|
|
||||||
|
//---- scrollButton ----
|
||||||
|
scrollButton.setText("scroll");
|
||||||
|
scrollButton.putClientProperty("FlatLaf.styleClass", "small");
|
||||||
|
scrollButton.addActionListener(e -> scrollChanged());
|
||||||
|
tabPlacementToolBar.add(scrollButton);
|
||||||
|
|
||||||
|
//---- borderButton ----
|
||||||
|
borderButton.setText("border");
|
||||||
|
borderButton.putClientProperty("FlatLaf.styleClass", "small");
|
||||||
|
borderButton.addActionListener(e -> borderChanged());
|
||||||
|
tabPlacementToolBar.add(borderButton);
|
||||||
|
}
|
||||||
|
panel1.add(tabPlacementToolBar, "cell 0 0,alignx right,growx 0");
|
||||||
|
panel1.add(tabPlacementTabbedPane, "cell 0 1,width 300:300,height 100:100");
|
||||||
|
|
||||||
|
//---- tabLayoutLabel ----
|
||||||
|
tabLayoutLabel.setText("Tab layout");
|
||||||
|
tabLayoutLabel.putClientProperty("FlatLaf.styleClass", "h3");
|
||||||
|
panel1.add(tabLayoutLabel, "cell 0 2");
|
||||||
|
|
||||||
|
//======== tabLayoutToolBar ========
|
||||||
|
{
|
||||||
|
tabLayoutToolBar.setFloatable(false);
|
||||||
|
tabLayoutToolBar.setBorder(BorderFactory.createEmptyBorder());
|
||||||
|
|
||||||
|
//---- scrollTabLayoutButton ----
|
||||||
|
scrollTabLayoutButton.setText("scroll");
|
||||||
|
scrollTabLayoutButton.setSelected(true);
|
||||||
|
scrollTabLayoutButton.putClientProperty("FlatLaf.styleClass", "small");
|
||||||
|
scrollTabLayoutButton.addActionListener(e -> tabLayoutChanged());
|
||||||
|
tabLayoutToolBar.add(scrollTabLayoutButton);
|
||||||
|
|
||||||
|
//---- wrapTabLayoutButton ----
|
||||||
|
wrapTabLayoutButton.setText("wrap");
|
||||||
|
wrapTabLayoutButton.putClientProperty("FlatLaf.styleClass", "small");
|
||||||
|
wrapTabLayoutButton.addActionListener(e -> tabLayoutChanged());
|
||||||
|
tabLayoutToolBar.add(wrapTabLayoutButton);
|
||||||
|
}
|
||||||
|
panel1.add(tabLayoutToolBar, "cell 0 2,alignx right,growx 0");
|
||||||
|
|
||||||
|
//---- scrollLayoutNoteLabel ----
|
||||||
|
scrollLayoutNoteLabel.setText("(use mouse wheel to scroll; arrow button shows hidden tabs)");
|
||||||
|
scrollLayoutNoteLabel.setEnabled(false);
|
||||||
|
scrollLayoutNoteLabel.putClientProperty("FlatLaf.styleClass", "small");
|
||||||
|
panel1.add(scrollLayoutNoteLabel, "cell 0 3");
|
||||||
|
|
||||||
|
//---- wrapLayoutNoteLabel ----
|
||||||
|
wrapLayoutNoteLabel.setText("(probably better to use scroll layout?)");
|
||||||
|
wrapLayoutNoteLabel.setEnabled(false);
|
||||||
|
wrapLayoutNoteLabel.putClientProperty("FlatLaf.styleClass", "small");
|
||||||
|
panel1.add(wrapLayoutNoteLabel, "cell 0 3");
|
||||||
|
panel1.add(scrollLayoutTabbedPane, "cell 0 4");
|
||||||
|
panel1.add(wrapLayoutTabbedPane, "cell 0 4,width 100:100,height pref*2px");
|
||||||
|
|
||||||
|
//---- closableTabsLabel ----
|
||||||
|
closableTabsLabel.setText("Closable tabs");
|
||||||
|
closableTabsLabel.putClientProperty("FlatLaf.styleClass", "h3");
|
||||||
|
panel1.add(closableTabsLabel, "cell 0 5");
|
||||||
|
|
||||||
|
//======== closableTabsToolBar ========
|
||||||
|
{
|
||||||
|
closableTabsToolBar.setFloatable(false);
|
||||||
|
closableTabsToolBar.setBorder(BorderFactory.createEmptyBorder());
|
||||||
|
|
||||||
|
//---- squareCloseButton ----
|
||||||
|
squareCloseButton.setText("square");
|
||||||
|
squareCloseButton.setSelected(true);
|
||||||
|
squareCloseButton.putClientProperty("FlatLaf.styleClass", "small");
|
||||||
|
squareCloseButton.addActionListener(e -> closeButtonStyleChanged());
|
||||||
|
closableTabsToolBar.add(squareCloseButton);
|
||||||
|
|
||||||
|
//---- circleCloseButton ----
|
||||||
|
circleCloseButton.setText("circle");
|
||||||
|
circleCloseButton.putClientProperty("FlatLaf.styleClass", "small");
|
||||||
|
circleCloseButton.addActionListener(e -> closeButtonStyleChanged());
|
||||||
|
closableTabsToolBar.add(circleCloseButton);
|
||||||
|
|
||||||
|
//---- redCrossCloseButton ----
|
||||||
|
redCrossCloseButton.setText("red cross");
|
||||||
|
redCrossCloseButton.putClientProperty("FlatLaf.styleClass", "small");
|
||||||
|
redCrossCloseButton.addActionListener(e -> closeButtonStyleChanged());
|
||||||
|
closableTabsToolBar.add(redCrossCloseButton);
|
||||||
|
}
|
||||||
|
panel1.add(closableTabsToolBar, "cell 0 5,alignx right,growx 0");
|
||||||
|
panel1.add(closableTabsTabbedPane, "cell 0 6");
|
||||||
|
|
||||||
|
//---- tabAreaComponentsLabel ----
|
||||||
|
tabAreaComponentsLabel.setText("Custom tab area components");
|
||||||
|
tabAreaComponentsLabel.putClientProperty("FlatLaf.styleClass", "h3");
|
||||||
|
panel1.add(tabAreaComponentsLabel, "cell 0 7");
|
||||||
|
|
||||||
|
//======== tabAreaComponentsToolBar ========
|
||||||
|
{
|
||||||
|
tabAreaComponentsToolBar.setFloatable(false);
|
||||||
|
tabAreaComponentsToolBar.setBorder(BorderFactory.createEmptyBorder());
|
||||||
|
|
||||||
|
//---- leadingComponentButton ----
|
||||||
|
leadingComponentButton.setText("leading");
|
||||||
|
leadingComponentButton.setSelected(true);
|
||||||
|
leadingComponentButton.putClientProperty("FlatLaf.styleClass", "small");
|
||||||
|
leadingComponentButton.addActionListener(e -> customComponentsChanged());
|
||||||
|
tabAreaComponentsToolBar.add(leadingComponentButton);
|
||||||
|
|
||||||
|
//---- trailingComponentButton ----
|
||||||
|
trailingComponentButton.setText("trailing");
|
||||||
|
trailingComponentButton.setSelected(true);
|
||||||
|
trailingComponentButton.putClientProperty("FlatLaf.styleClass", "small");
|
||||||
|
trailingComponentButton.addActionListener(e -> customComponentsChanged());
|
||||||
|
tabAreaComponentsToolBar.add(trailingComponentButton);
|
||||||
|
}
|
||||||
|
panel1.add(tabAreaComponentsToolBar, "cell 0 7,alignx right,growx 0");
|
||||||
|
panel1.add(customComponentsTabbedPane, "cell 0 8");
|
||||||
}
|
}
|
||||||
panel5.add(tabAlignVerticalTabbedPane, "cell 1 1 1 3,growy");
|
panel6.add(panel1, "cell 0 0");
|
||||||
panel5.add(tabAlignCenterTabbedPane, "cell 0 2");
|
|
||||||
panel5.add(tabAlignTrailingTabbedPane, "cell 0 3");
|
//======== panel2 ========
|
||||||
|
{
|
||||||
|
panel2.setLayout(new MigLayout(
|
||||||
|
"insets 0,hidemode 3",
|
||||||
|
// columns
|
||||||
|
"[grow,fill]",
|
||||||
|
// rows
|
||||||
|
"[]0" +
|
||||||
|
"[]" +
|
||||||
|
"[fill]" +
|
||||||
|
"[center]" +
|
||||||
|
"[center]" +
|
||||||
|
"[center]para" +
|
||||||
|
"[center]0" +
|
||||||
|
"[]" +
|
||||||
|
"[center]" +
|
||||||
|
"[center]" +
|
||||||
|
"[center]" +
|
||||||
|
"[]"));
|
||||||
|
|
||||||
|
//---- tabIconPlacementLabel ----
|
||||||
|
tabIconPlacementLabel.setText("Tab icon placement");
|
||||||
|
tabIconPlacementLabel.putClientProperty("FlatLaf.styleClass", "h3");
|
||||||
|
panel2.add(tabIconPlacementLabel, "cell 0 0");
|
||||||
|
|
||||||
|
//---- tabIconPlacementNodeLabel ----
|
||||||
|
tabIconPlacementNodeLabel.setText("(top/bottom/leading/trailing)");
|
||||||
|
tabIconPlacementNodeLabel.setEnabled(false);
|
||||||
|
tabIconPlacementNodeLabel.putClientProperty("FlatLaf.styleClass", "small");
|
||||||
|
panel2.add(tabIconPlacementNodeLabel, "cell 0 1");
|
||||||
|
panel2.add(iconTopTabbedPane, "cell 0 2");
|
||||||
|
panel2.add(iconBottomTabbedPane, "cell 0 3");
|
||||||
|
panel2.add(iconLeadingTabbedPane, "cell 0 4");
|
||||||
|
panel2.add(iconTrailingTabbedPane, "cell 0 5");
|
||||||
|
|
||||||
|
//---- tabAreaAlignmentLabel ----
|
||||||
|
tabAreaAlignmentLabel.setText("Tab area alignment");
|
||||||
|
tabAreaAlignmentLabel.putClientProperty("FlatLaf.styleClass", "h3");
|
||||||
|
panel2.add(tabAreaAlignmentLabel, "cell 0 6");
|
||||||
|
|
||||||
|
//---- tabAreaAlignmentNoteLabel ----
|
||||||
|
tabAreaAlignmentNoteLabel.setText("(leading/center/trailing/fill)");
|
||||||
|
tabAreaAlignmentNoteLabel.setEnabled(false);
|
||||||
|
tabAreaAlignmentNoteLabel.putClientProperty("FlatLaf.styleClass", "small");
|
||||||
|
panel2.add(tabAreaAlignmentNoteLabel, "cell 0 7");
|
||||||
|
panel2.add(alignLeadingTabbedPane, "cell 0 8");
|
||||||
|
panel2.add(alignCenterTabbedPane, "cell 0 9");
|
||||||
|
panel2.add(alignTrailingTabbedPane, "cell 0 10");
|
||||||
|
panel2.add(alignFillTabbedPane, "cell 0 11");
|
||||||
|
}
|
||||||
|
panel6.add(panel2, "cell 1 0,growy");
|
||||||
|
|
||||||
|
//======== panel3 ========
|
||||||
|
{
|
||||||
|
panel3.setLayout(new MigLayout(
|
||||||
|
"insets 0,hidemode 3",
|
||||||
|
// columns
|
||||||
|
"[grow,fill]",
|
||||||
|
// rows
|
||||||
|
"[]0" +
|
||||||
|
"[]" +
|
||||||
|
"[]" +
|
||||||
|
"[]" +
|
||||||
|
"[]para" +
|
||||||
|
"[]" +
|
||||||
|
"[]" +
|
||||||
|
"[]para" +
|
||||||
|
"[]0" +
|
||||||
|
"[]"));
|
||||||
|
|
||||||
|
//---- tabWidthModeLabel ----
|
||||||
|
tabWidthModeLabel.setText("Tab width mode");
|
||||||
|
tabWidthModeLabel.putClientProperty("FlatLaf.styleClass", "h3");
|
||||||
|
panel3.add(tabWidthModeLabel, "cell 0 0");
|
||||||
|
|
||||||
|
//---- tabWidthModeNoteLabel ----
|
||||||
|
tabWidthModeNoteLabel.setText("(preferred/equal/compact)");
|
||||||
|
tabWidthModeNoteLabel.setEnabled(false);
|
||||||
|
tabWidthModeNoteLabel.putClientProperty("FlatLaf.styleClass", "small");
|
||||||
|
panel3.add(tabWidthModeNoteLabel, "cell 0 1");
|
||||||
|
panel3.add(widthPreferredTabbedPane, "cell 0 2");
|
||||||
|
panel3.add(widthEqualTabbedPane, "cell 0 3");
|
||||||
|
panel3.add(widthCompactTabbedPane, "cell 0 4");
|
||||||
|
|
||||||
|
//---- minMaxTabWidthLabel ----
|
||||||
|
minMaxTabWidthLabel.setText("Minimum/maximum tab width");
|
||||||
|
minMaxTabWidthLabel.putClientProperty("FlatLaf.styleClass", "h3");
|
||||||
|
panel3.add(minMaxTabWidthLabel, "cell 0 5");
|
||||||
|
panel3.add(minimumTabWidthTabbedPane, "cell 0 6");
|
||||||
|
panel3.add(maximumTabWidthTabbedPane, "cell 0 7");
|
||||||
|
|
||||||
|
//---- tabAlignmentLabel ----
|
||||||
|
tabAlignmentLabel.setText("Tab title alignment");
|
||||||
|
tabAlignmentLabel.putClientProperty("FlatLaf.styleClass", "h3");
|
||||||
|
panel3.add(tabAlignmentLabel, "cell 0 8");
|
||||||
|
|
||||||
|
//======== panel5 ========
|
||||||
|
{
|
||||||
|
panel5.setLayout(new MigLayout(
|
||||||
|
"insets 0,hidemode 3",
|
||||||
|
// columns
|
||||||
|
"[grow,fill]para" +
|
||||||
|
"[fill]",
|
||||||
|
// rows
|
||||||
|
"[]" +
|
||||||
|
"[]" +
|
||||||
|
"[]" +
|
||||||
|
"[]" +
|
||||||
|
"[]"));
|
||||||
|
|
||||||
|
//---- tabAlignmentNoteLabel ----
|
||||||
|
tabAlignmentNoteLabel.setText("(leading/center/trailing)");
|
||||||
|
tabAlignmentNoteLabel.setEnabled(false);
|
||||||
|
tabAlignmentNoteLabel.putClientProperty("FlatLaf.styleClass", "small");
|
||||||
|
panel5.add(tabAlignmentNoteLabel, "cell 0 0");
|
||||||
|
|
||||||
|
//---- tabAlignmentNoteLabel2 ----
|
||||||
|
tabAlignmentNoteLabel2.setText("(trailing)");
|
||||||
|
tabAlignmentNoteLabel2.setEnabled(false);
|
||||||
|
tabAlignmentNoteLabel2.putClientProperty("FlatLaf.styleClass", "small");
|
||||||
|
panel5.add(tabAlignmentNoteLabel2, "cell 1 0,alignx right,growx 0");
|
||||||
|
panel5.add(tabAlignLeadingTabbedPane, "cell 0 1");
|
||||||
|
|
||||||
|
//======== tabAlignVerticalTabbedPane ========
|
||||||
|
{
|
||||||
|
tabAlignVerticalTabbedPane.setTabPlacement(SwingConstants.LEFT);
|
||||||
|
}
|
||||||
|
panel5.add(tabAlignVerticalTabbedPane, "cell 1 1 1 4,growy");
|
||||||
|
panel5.add(tabAlignCenterTabbedPane, "cell 0 2");
|
||||||
|
panel5.add(tabAlignTrailingTabbedPane, "cell 0 3");
|
||||||
|
}
|
||||||
|
panel3.add(panel5, "cell 0 9");
|
||||||
|
}
|
||||||
|
panel6.add(panel3, "cell 2 0");
|
||||||
}
|
}
|
||||||
panel3.add(panel5, "cell 0 9");
|
tabsScrollPane.setViewportView(panel6);
|
||||||
}
|
}
|
||||||
add(panel3, "cell 2 0");
|
add(tabsScrollPane, "cell 0 0");
|
||||||
add(separator2, "cell 0 1 3 1");
|
add(separator2, "cell 0 1");
|
||||||
|
|
||||||
//======== panel4 ========
|
//======== panel4 ========
|
||||||
{
|
{
|
||||||
panel4.setLayout(new MigLayout(
|
panel4.setLayout(new MigLayout(
|
||||||
"insets 0,hidemode 3",
|
"insets panel,hidemode 3",
|
||||||
// columns
|
// columns
|
||||||
"[]" +
|
"[]" +
|
||||||
"[fill]para" +
|
"[fill]para" +
|
||||||
"[fill]" +
|
"[fill]" +
|
||||||
"[fill]para" +
|
"[fill]para" +
|
||||||
|
"[fill]" +
|
||||||
"[fill]",
|
"[fill]",
|
||||||
// rows
|
// rows
|
||||||
"[]" +
|
"[]" +
|
||||||
@@ -770,38 +805,9 @@ class TabsPanel
|
|||||||
}
|
}
|
||||||
panel4.add(scrollButtonsPolicyToolBar, "cell 1 0");
|
panel4.add(scrollButtonsPolicyToolBar, "cell 1 0");
|
||||||
|
|
||||||
//---- scrollButtonsPlacementLabel ----
|
|
||||||
scrollButtonsPlacementLabel.setText("Scroll buttons placement:");
|
|
||||||
panel4.add(scrollButtonsPlacementLabel, "cell 2 0");
|
|
||||||
|
|
||||||
//======== scrollButtonsPlacementToolBar ========
|
|
||||||
{
|
|
||||||
scrollButtonsPlacementToolBar.setFloatable(false);
|
|
||||||
scrollButtonsPlacementToolBar.setBorder(BorderFactory.createEmptyBorder());
|
|
||||||
|
|
||||||
//---- scrollBothButton ----
|
|
||||||
scrollBothButton.setText("both");
|
|
||||||
scrollBothButton.setSelected(true);
|
|
||||||
scrollBothButton.putClientProperty("FlatLaf.styleClass", "small");
|
|
||||||
scrollBothButton.addActionListener(e -> scrollButtonsPlacementChanged());
|
|
||||||
scrollButtonsPlacementToolBar.add(scrollBothButton);
|
|
||||||
|
|
||||||
//---- scrollTrailingButton ----
|
|
||||||
scrollTrailingButton.setText("trailing");
|
|
||||||
scrollTrailingButton.putClientProperty("FlatLaf.styleClass", "small");
|
|
||||||
scrollTrailingButton.addActionListener(e -> scrollButtonsPlacementChanged());
|
|
||||||
scrollButtonsPlacementToolBar.add(scrollTrailingButton);
|
|
||||||
}
|
|
||||||
panel4.add(scrollButtonsPlacementToolBar, "cell 3 0");
|
|
||||||
|
|
||||||
//---- showTabSeparatorsCheckBox ----
|
|
||||||
showTabSeparatorsCheckBox.setText("Show tab separators");
|
|
||||||
showTabSeparatorsCheckBox.addActionListener(e -> showTabSeparatorsChanged());
|
|
||||||
panel4.add(showTabSeparatorsCheckBox, "cell 4 0");
|
|
||||||
|
|
||||||
//---- tabsPopupPolicyLabel ----
|
//---- tabsPopupPolicyLabel ----
|
||||||
tabsPopupPolicyLabel.setText("Tabs popup policy:");
|
tabsPopupPolicyLabel.setText("Tabs popup policy:");
|
||||||
panel4.add(tabsPopupPolicyLabel, "cell 0 1");
|
panel4.add(tabsPopupPolicyLabel, "cell 2 0");
|
||||||
|
|
||||||
//======== tabsPopupPolicyToolBar ========
|
//======== tabsPopupPolicyToolBar ========
|
||||||
{
|
{
|
||||||
@@ -821,7 +827,36 @@ class TabsPanel
|
|||||||
popupNeverButton.addActionListener(e -> tabsPopupPolicyChanged());
|
popupNeverButton.addActionListener(e -> tabsPopupPolicyChanged());
|
||||||
tabsPopupPolicyToolBar.add(popupNeverButton);
|
tabsPopupPolicyToolBar.add(popupNeverButton);
|
||||||
}
|
}
|
||||||
panel4.add(tabsPopupPolicyToolBar, "cell 1 1");
|
panel4.add(tabsPopupPolicyToolBar, "cell 3 0");
|
||||||
|
|
||||||
|
//---- showTabSeparatorsCheckBox ----
|
||||||
|
showTabSeparatorsCheckBox.setText("Show tab separators");
|
||||||
|
showTabSeparatorsCheckBox.addActionListener(e -> showTabSeparatorsChanged());
|
||||||
|
panel4.add(showTabSeparatorsCheckBox, "cell 4 0 2 1,alignx left,growx 0");
|
||||||
|
|
||||||
|
//---- scrollButtonsPlacementLabel ----
|
||||||
|
scrollButtonsPlacementLabel.setText("Scroll buttons placement:");
|
||||||
|
panel4.add(scrollButtonsPlacementLabel, "cell 0 1");
|
||||||
|
|
||||||
|
//======== scrollButtonsPlacementToolBar ========
|
||||||
|
{
|
||||||
|
scrollButtonsPlacementToolBar.setFloatable(false);
|
||||||
|
scrollButtonsPlacementToolBar.setBorder(BorderFactory.createEmptyBorder());
|
||||||
|
|
||||||
|
//---- scrollBothButton ----
|
||||||
|
scrollBothButton.setText("both");
|
||||||
|
scrollBothButton.setSelected(true);
|
||||||
|
scrollBothButton.putClientProperty("FlatLaf.styleClass", "small");
|
||||||
|
scrollBothButton.addActionListener(e -> scrollButtonsPlacementChanged());
|
||||||
|
scrollButtonsPlacementToolBar.add(scrollBothButton);
|
||||||
|
|
||||||
|
//---- scrollTrailingButton ----
|
||||||
|
scrollTrailingButton.setText("trailing");
|
||||||
|
scrollTrailingButton.putClientProperty("FlatLaf.styleClass", "small");
|
||||||
|
scrollTrailingButton.addActionListener(e -> scrollButtonsPlacementChanged());
|
||||||
|
scrollButtonsPlacementToolBar.add(scrollTrailingButton);
|
||||||
|
}
|
||||||
|
panel4.add(scrollButtonsPlacementToolBar, "cell 1 1");
|
||||||
|
|
||||||
//---- tabTypeLabel ----
|
//---- tabTypeLabel ----
|
||||||
tabTypeLabel.setText("Tab type:");
|
tabTypeLabel.setText("Tab type:");
|
||||||
@@ -845,8 +880,44 @@ class TabsPanel
|
|||||||
tabTypeToolBar.add(cardTabTypeButton);
|
tabTypeToolBar.add(cardTabTypeButton);
|
||||||
}
|
}
|
||||||
panel4.add(tabTypeToolBar, "cell 3 1");
|
panel4.add(tabTypeToolBar, "cell 3 1");
|
||||||
|
|
||||||
|
//---- tabRotationLabel ----
|
||||||
|
tabRotationLabel.setText("Tab rotation:");
|
||||||
|
panel4.add(tabRotationLabel, "cell 4 1");
|
||||||
|
|
||||||
|
//======== tabRotationToolBar ========
|
||||||
|
{
|
||||||
|
tabRotationToolBar.setFloatable(false);
|
||||||
|
tabRotationToolBar.setBorder(BorderFactory.createEmptyBorder());
|
||||||
|
|
||||||
|
//---- rotationNoneButton ----
|
||||||
|
rotationNoneButton.setText("none");
|
||||||
|
rotationNoneButton.setSelected(true);
|
||||||
|
rotationNoneButton.putClientProperty("FlatLaf.styleClass", "small");
|
||||||
|
rotationNoneButton.addActionListener(e -> tabRotationChanged());
|
||||||
|
tabRotationToolBar.add(rotationNoneButton);
|
||||||
|
|
||||||
|
//---- rotationAutoButton ----
|
||||||
|
rotationAutoButton.setText("auto");
|
||||||
|
rotationAutoButton.putClientProperty("FlatLaf.styleClass", "small");
|
||||||
|
rotationAutoButton.addActionListener(e -> tabRotationChanged());
|
||||||
|
tabRotationToolBar.add(rotationAutoButton);
|
||||||
|
|
||||||
|
//---- rotationLeftButton ----
|
||||||
|
rotationLeftButton.setText("left");
|
||||||
|
rotationLeftButton.putClientProperty("FlatLaf.styleClass", "small");
|
||||||
|
rotationLeftButton.addActionListener(e -> tabRotationChanged());
|
||||||
|
tabRotationToolBar.add(rotationLeftButton);
|
||||||
|
|
||||||
|
//---- rotationRightButton ----
|
||||||
|
rotationRightButton.setText("right");
|
||||||
|
rotationRightButton.putClientProperty("FlatLaf.styleClass", "small");
|
||||||
|
rotationRightButton.addActionListener(e -> tabRotationChanged());
|
||||||
|
tabRotationToolBar.add(rotationRightButton);
|
||||||
|
}
|
||||||
|
panel4.add(tabRotationToolBar, "cell 5 1");
|
||||||
}
|
}
|
||||||
add(panel4, "cell 0 2 3 1");
|
add(panel4, "cell 0 2");
|
||||||
|
|
||||||
//---- tabPlacementButtonGroup ----
|
//---- tabPlacementButtonGroup ----
|
||||||
ButtonGroup tabPlacementButtonGroup = new ButtonGroup();
|
ButtonGroup tabPlacementButtonGroup = new ButtonGroup();
|
||||||
@@ -872,20 +943,27 @@ class TabsPanel
|
|||||||
scrollButtonsPolicyButtonGroup.add(scrollAsNeededButton);
|
scrollButtonsPolicyButtonGroup.add(scrollAsNeededButton);
|
||||||
scrollButtonsPolicyButtonGroup.add(scrollNeverButton);
|
scrollButtonsPolicyButtonGroup.add(scrollNeverButton);
|
||||||
|
|
||||||
//---- scrollButtonsPlacementButtonGroup ----
|
|
||||||
ButtonGroup scrollButtonsPlacementButtonGroup = new ButtonGroup();
|
|
||||||
scrollButtonsPlacementButtonGroup.add(scrollBothButton);
|
|
||||||
scrollButtonsPlacementButtonGroup.add(scrollTrailingButton);
|
|
||||||
|
|
||||||
//---- tabsPopupPolicyButtonGroup ----
|
//---- tabsPopupPolicyButtonGroup ----
|
||||||
ButtonGroup tabsPopupPolicyButtonGroup = new ButtonGroup();
|
ButtonGroup tabsPopupPolicyButtonGroup = new ButtonGroup();
|
||||||
tabsPopupPolicyButtonGroup.add(popupAsNeededButton);
|
tabsPopupPolicyButtonGroup.add(popupAsNeededButton);
|
||||||
tabsPopupPolicyButtonGroup.add(popupNeverButton);
|
tabsPopupPolicyButtonGroup.add(popupNeverButton);
|
||||||
|
|
||||||
|
//---- scrollButtonsPlacementButtonGroup ----
|
||||||
|
ButtonGroup scrollButtonsPlacementButtonGroup = new ButtonGroup();
|
||||||
|
scrollButtonsPlacementButtonGroup.add(scrollBothButton);
|
||||||
|
scrollButtonsPlacementButtonGroup.add(scrollTrailingButton);
|
||||||
|
|
||||||
//---- tabTypeButtonGroup ----
|
//---- tabTypeButtonGroup ----
|
||||||
ButtonGroup tabTypeButtonGroup = new ButtonGroup();
|
ButtonGroup tabTypeButtonGroup = new ButtonGroup();
|
||||||
tabTypeButtonGroup.add(underlinedTabTypeButton);
|
tabTypeButtonGroup.add(underlinedTabTypeButton);
|
||||||
tabTypeButtonGroup.add(cardTabTypeButton);
|
tabTypeButtonGroup.add(cardTabTypeButton);
|
||||||
|
|
||||||
|
//---- tabRotationButtonGroup ----
|
||||||
|
ButtonGroup tabRotationButtonGroup = new ButtonGroup();
|
||||||
|
tabRotationButtonGroup.add(rotationNoneButton);
|
||||||
|
tabRotationButtonGroup.add(rotationAutoButton);
|
||||||
|
tabRotationButtonGroup.add(rotationLeftButton);
|
||||||
|
tabRotationButtonGroup.add(rotationRightButton);
|
||||||
// JFormDesigner - End of component initialization //GEN-END:initComponents
|
// JFormDesigner - End of component initialization //GEN-END:initComponents
|
||||||
|
|
||||||
if( FlatLafDemo.screenshotsMode ) {
|
if( FlatLafDemo.screenshotsMode ) {
|
||||||
@@ -961,18 +1039,24 @@ class TabsPanel
|
|||||||
private JToggleButton scrollAsNeededSingleButton;
|
private JToggleButton scrollAsNeededSingleButton;
|
||||||
private JToggleButton scrollAsNeededButton;
|
private JToggleButton scrollAsNeededButton;
|
||||||
private JToggleButton scrollNeverButton;
|
private JToggleButton scrollNeverButton;
|
||||||
private JLabel scrollButtonsPlacementLabel;
|
|
||||||
private JToolBar scrollButtonsPlacementToolBar;
|
|
||||||
private JToggleButton scrollBothButton;
|
|
||||||
private JToggleButton scrollTrailingButton;
|
|
||||||
private JCheckBox showTabSeparatorsCheckBox;
|
|
||||||
private JLabel tabsPopupPolicyLabel;
|
private JLabel tabsPopupPolicyLabel;
|
||||||
private JToolBar tabsPopupPolicyToolBar;
|
private JToolBar tabsPopupPolicyToolBar;
|
||||||
private JToggleButton popupAsNeededButton;
|
private JToggleButton popupAsNeededButton;
|
||||||
private JToggleButton popupNeverButton;
|
private JToggleButton popupNeverButton;
|
||||||
|
private JCheckBox showTabSeparatorsCheckBox;
|
||||||
|
private JLabel scrollButtonsPlacementLabel;
|
||||||
|
private JToolBar scrollButtonsPlacementToolBar;
|
||||||
|
private JToggleButton scrollBothButton;
|
||||||
|
private JToggleButton scrollTrailingButton;
|
||||||
private JLabel tabTypeLabel;
|
private JLabel tabTypeLabel;
|
||||||
private JToolBar tabTypeToolBar;
|
private JToolBar tabTypeToolBar;
|
||||||
private JToggleButton underlinedTabTypeButton;
|
private JToggleButton underlinedTabTypeButton;
|
||||||
private JToggleButton cardTabTypeButton;
|
private JToggleButton cardTabTypeButton;
|
||||||
|
private JLabel tabRotationLabel;
|
||||||
|
private JToolBar tabRotationToolBar;
|
||||||
|
private JToggleButton rotationNoneButton;
|
||||||
|
private JToggleButton rotationAutoButton;
|
||||||
|
private JToggleButton rotationLeftButton;
|
||||||
|
private JToggleButton rotationRightButton;
|
||||||
// JFormDesigner - End of variables declaration //GEN-END:variables
|
// JFormDesigner - End of variables declaration //GEN-END:variables
|
||||||
}
|
}
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -502,6 +502,29 @@ public class FlatTabbedPane
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// NOTE: enum names must be equal to allowed strings
|
||||||
|
/** @since 3.3 */ public enum TabRotation { none, auto, left, right }
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns how the tabs should be rotated.
|
||||||
|
*
|
||||||
|
* @since 3.3
|
||||||
|
*/
|
||||||
|
public TabRotation getTabRotation() {
|
||||||
|
return getClientPropertyEnumString( TABBED_PANE_TAB_ROTATION, TabRotation.class,
|
||||||
|
"TabbedPane.tabRotation", TabRotation.none );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specifies how the tabs should be rotated.
|
||||||
|
*
|
||||||
|
* @since 3.3
|
||||||
|
*/
|
||||||
|
public void setTabRotation( TabRotation tabRotation ) {
|
||||||
|
putClientPropertyEnumString( TABBED_PANE_TAB_ROTATION, tabRotation );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the tab icon placement (relative to tab title).
|
* Returns the tab icon placement (relative to tab title).
|
||||||
*/
|
*/
|
||||||
|
|||||||
@@ -1081,6 +1081,7 @@ TabbedPane.tabAreaAlignment leading
|
|||||||
TabbedPane.tabAreaInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI]
|
TabbedPane.tabAreaInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI]
|
||||||
TabbedPane.tabHeight 32
|
TabbedPane.tabHeight 32
|
||||||
TabbedPane.tabInsets 4,12,4,12 javax.swing.plaf.InsetsUIResource [UI]
|
TabbedPane.tabInsets 4,12,4,12 javax.swing.plaf.InsetsUIResource [UI]
|
||||||
|
TabbedPane.tabRotation none
|
||||||
TabbedPane.tabRunOverlay 0
|
TabbedPane.tabRunOverlay 0
|
||||||
TabbedPane.tabSelectionArc 0
|
TabbedPane.tabSelectionArc 0
|
||||||
TabbedPane.tabSelectionHeight 3
|
TabbedPane.tabSelectionHeight 3
|
||||||
|
|||||||
@@ -1086,6 +1086,7 @@ TabbedPane.tabAreaAlignment leading
|
|||||||
TabbedPane.tabAreaInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI]
|
TabbedPane.tabAreaInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI]
|
||||||
TabbedPane.tabHeight 32
|
TabbedPane.tabHeight 32
|
||||||
TabbedPane.tabInsets 4,12,4,12 javax.swing.plaf.InsetsUIResource [UI]
|
TabbedPane.tabInsets 4,12,4,12 javax.swing.plaf.InsetsUIResource [UI]
|
||||||
|
TabbedPane.tabRotation none
|
||||||
TabbedPane.tabRunOverlay 0
|
TabbedPane.tabRunOverlay 0
|
||||||
TabbedPane.tabSelectionArc 0
|
TabbedPane.tabSelectionArc 0
|
||||||
TabbedPane.tabSelectionHeight 3
|
TabbedPane.tabSelectionHeight 3
|
||||||
|
|||||||
@@ -1091,6 +1091,7 @@ TabbedPane.tabAreaAlignment leading
|
|||||||
TabbedPane.tabAreaInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI]
|
TabbedPane.tabAreaInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI]
|
||||||
TabbedPane.tabHeight 32
|
TabbedPane.tabHeight 32
|
||||||
TabbedPane.tabInsets 4,12,4,12 javax.swing.plaf.InsetsUIResource [UI]
|
TabbedPane.tabInsets 4,12,4,12 javax.swing.plaf.InsetsUIResource [UI]
|
||||||
|
TabbedPane.tabRotation none
|
||||||
TabbedPane.tabRunOverlay 0
|
TabbedPane.tabRunOverlay 0
|
||||||
TabbedPane.tabSelectionArc 999
|
TabbedPane.tabSelectionArc 999
|
||||||
TabbedPane.tabSelectionHeight 3
|
TabbedPane.tabSelectionHeight 3
|
||||||
|
|||||||
@@ -1095,6 +1095,7 @@ TabbedPane.tabAreaAlignment leading
|
|||||||
TabbedPane.tabAreaInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI]
|
TabbedPane.tabAreaInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI]
|
||||||
TabbedPane.tabHeight 32
|
TabbedPane.tabHeight 32
|
||||||
TabbedPane.tabInsets 4,12,4,12 javax.swing.plaf.InsetsUIResource [UI]
|
TabbedPane.tabInsets 4,12,4,12 javax.swing.plaf.InsetsUIResource [UI]
|
||||||
|
TabbedPane.tabRotation none
|
||||||
TabbedPane.tabRunOverlay 0
|
TabbedPane.tabRunOverlay 0
|
||||||
TabbedPane.tabSelectionArc 999
|
TabbedPane.tabSelectionArc 999
|
||||||
TabbedPane.tabSelectionHeight 3
|
TabbedPane.tabSelectionHeight 3
|
||||||
|
|||||||
@@ -1116,6 +1116,7 @@ TabbedPane.tabAreaAlignment leading
|
|||||||
TabbedPane.tabAreaInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI]
|
TabbedPane.tabAreaInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI]
|
||||||
TabbedPane.tabHeight 32
|
TabbedPane.tabHeight 32
|
||||||
TabbedPane.tabInsets 4,12,4,12 javax.swing.plaf.InsetsUIResource [UI]
|
TabbedPane.tabInsets 4,12,4,12 javax.swing.plaf.InsetsUIResource [UI]
|
||||||
|
TabbedPane.tabRotation none
|
||||||
TabbedPane.tabRunOverlay 0
|
TabbedPane.tabRunOverlay 0
|
||||||
TabbedPane.tabSelectionArc 0
|
TabbedPane.tabSelectionArc 0
|
||||||
TabbedPane.tabSelectionHeight 3
|
TabbedPane.tabSelectionHeight 3
|
||||||
|
|||||||
@@ -32,6 +32,7 @@ import com.formdev.flatlaf.extras.components.FlatTabbedPane.*;
|
|||||||
import com.formdev.flatlaf.extras.components.FlatTriStateCheckBox;
|
import com.formdev.flatlaf.extras.components.FlatTriStateCheckBox;
|
||||||
import com.formdev.flatlaf.icons.FlatInternalFrameCloseIcon;
|
import com.formdev.flatlaf.icons.FlatInternalFrameCloseIcon;
|
||||||
import com.formdev.flatlaf.util.ScaledImageIcon;
|
import com.formdev.flatlaf.util.ScaledImageIcon;
|
||||||
|
import com.jgoodies.forms.factories.CC;
|
||||||
import com.jgoodies.forms.layout.*;
|
import com.jgoodies.forms.layout.*;
|
||||||
import net.miginfocom.swing.*;
|
import net.miginfocom.swing.*;
|
||||||
|
|
||||||
@@ -62,6 +63,7 @@ public class FlatContainerTest
|
|||||||
tabAreaAlignmentField.init( TabAreaAlignment.class, true );
|
tabAreaAlignmentField.init( TabAreaAlignment.class, true );
|
||||||
tabAlignmentField.init( TabAlignment.class, true );
|
tabAlignmentField.init( TabAlignment.class, true );
|
||||||
tabWidthModeField.init( TabWidthMode.class, true );
|
tabWidthModeField.init( TabWidthMode.class, true );
|
||||||
|
tabRotationField.init( TabRotation.class, true );
|
||||||
|
|
||||||
tabCountChanged();
|
tabCountChanged();
|
||||||
|
|
||||||
@@ -74,6 +76,18 @@ public class FlatContainerTest
|
|||||||
tabScrollChanged();
|
tabScrollChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void showOnlyOne() {
|
||||||
|
boolean showOnlyOne = showOnlyOneCheckBox.isSelected();
|
||||||
|
|
||||||
|
tabbedPane2.setVisible( !showOnlyOne );
|
||||||
|
tabbedPane3.setVisible( !showOnlyOne );
|
||||||
|
tabbedPane4.setVisible( !showOnlyOne );
|
||||||
|
|
||||||
|
int span = showOnlyOne ? 3 : 1;
|
||||||
|
FormLayout formLayout = (FormLayout) tabbedPane1.getParent().getLayout();
|
||||||
|
formLayout.setConstraints( tabbedPane1, CC.xywh( 1, 7, span, span ) );
|
||||||
|
}
|
||||||
|
|
||||||
private void tabScrollChanged() {
|
private void tabScrollChanged() {
|
||||||
int tabLayoutPolicy = tabScrollCheckBox.isSelected() ? JTabbedPane.SCROLL_TAB_LAYOUT : JTabbedPane.WRAP_TAB_LAYOUT;
|
int tabLayoutPolicy = tabScrollCheckBox.isSelected() ? JTabbedPane.SCROLL_TAB_LAYOUT : JTabbedPane.WRAP_TAB_LAYOUT;
|
||||||
for( JTabbedPane tabbedPane : allTabbedPanes )
|
for( JTabbedPane tabbedPane : allTabbedPanes )
|
||||||
@@ -314,6 +328,12 @@ public class FlatContainerTest
|
|||||||
tabbedPane.setTabWidthMode( value );
|
tabbedPane.setTabWidthMode( value );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void tabRotationChanged() {
|
||||||
|
TabRotation value = tabRotationField.getSelectedValue();
|
||||||
|
for( FlatTabbedPane tabbedPane : allTabbedPanes )
|
||||||
|
tabbedPane.setTabRotation( value );
|
||||||
|
}
|
||||||
|
|
||||||
private void tabTypeChanged() {
|
private void tabTypeChanged() {
|
||||||
TabType value = tabTypeComboBox.getSelectedValue();
|
TabType value = tabTypeComboBox.getSelectedValue();
|
||||||
for( FlatTabbedPane tabbedPane : allTabbedPanes )
|
for( FlatTabbedPane tabbedPane : allTabbedPanes )
|
||||||
@@ -509,6 +529,7 @@ public class FlatContainerTest
|
|||||||
JPanel panel13 = new JPanel();
|
JPanel panel13 = new JPanel();
|
||||||
JLabel label4 = new JLabel();
|
JLabel label4 = new JLabel();
|
||||||
JLabel tabbedPaneLabel = new JLabel();
|
JLabel tabbedPaneLabel = new JLabel();
|
||||||
|
showOnlyOneCheckBox = new JCheckBox();
|
||||||
tabbedPane1 = new FlatTabbedPane();
|
tabbedPane1 = new FlatTabbedPane();
|
||||||
tabbedPane3 = new FlatTabbedPane();
|
tabbedPane3 = new FlatTabbedPane();
|
||||||
tabbedPane2 = new FlatTabbedPane();
|
tabbedPane2 = new FlatTabbedPane();
|
||||||
@@ -520,19 +541,19 @@ public class FlatContainerTest
|
|||||||
customTabsCheckBox = new JCheckBox();
|
customTabsCheckBox = new JCheckBox();
|
||||||
htmlTabsCheckBox = new JCheckBox();
|
htmlTabsCheckBox = new JCheckBox();
|
||||||
multiLineTabsCheckBox = new JCheckBox();
|
multiLineTabsCheckBox = new JCheckBox();
|
||||||
|
JLabel tabPlacementLabel = new JLabel();
|
||||||
|
tabPlacementField = new FlatTestEnumSelector<>();
|
||||||
|
tabBackForegroundCheckBox = new JCheckBox();
|
||||||
JLabel tabsPopupPolicyLabel = new JLabel();
|
JLabel tabsPopupPolicyLabel = new JLabel();
|
||||||
tabsPopupPolicyField = new FlatTestEnumSelector<>();
|
tabsPopupPolicyField = new FlatTestEnumSelector<>();
|
||||||
tabBackForegroundCheckBox = new JCheckBox();
|
|
||||||
JLabel scrollButtonsPolicyLabel = new JLabel();
|
|
||||||
scrollButtonsPolicyField = new FlatTestEnumSelector<>();
|
|
||||||
tabIconsCheckBox = new JCheckBox();
|
tabIconsCheckBox = new JCheckBox();
|
||||||
tabIconSizeSpinner = new JSpinner();
|
tabIconSizeSpinner = new JSpinner();
|
||||||
iconPlacementField = new FlatTestEnumSelector<>();
|
iconPlacementField = new FlatTestEnumSelector<>();
|
||||||
|
JLabel scrollButtonsPolicyLabel = new JLabel();
|
||||||
|
scrollButtonsPolicyField = new FlatTestEnumSelector<>();
|
||||||
|
tabsClosableCheckBox = new JCheckBox();
|
||||||
JLabel scrollButtonsPlacementLabel = new JLabel();
|
JLabel scrollButtonsPlacementLabel = new JLabel();
|
||||||
scrollButtonsPlacementField = new FlatTestEnumSelector<>();
|
scrollButtonsPlacementField = new FlatTestEnumSelector<>();
|
||||||
tabsClosableCheckBox = new JCheckBox();
|
|
||||||
JLabel tabPlacementLabel = new JLabel();
|
|
||||||
tabPlacementField = new FlatTestEnumSelector<>();
|
|
||||||
secondTabClosableCheckBox = new FlatTriStateCheckBox();
|
secondTabClosableCheckBox = new FlatTriStateCheckBox();
|
||||||
JLabel tabAreaAlignmentLabel = new JLabel();
|
JLabel tabAreaAlignmentLabel = new JLabel();
|
||||||
tabAreaAlignmentField = new FlatTestEnumSelector<>();
|
tabAreaAlignmentField = new FlatTestEnumSelector<>();
|
||||||
@@ -540,6 +561,8 @@ public class FlatContainerTest
|
|||||||
tabWidthModeField = new FlatTestEnumSelector<>();
|
tabWidthModeField = new FlatTestEnumSelector<>();
|
||||||
JLabel tabAlignmentLabel = new JLabel();
|
JLabel tabAlignmentLabel = new JLabel();
|
||||||
tabAlignmentField = new FlatTestEnumSelector<>();
|
tabAlignmentField = new FlatTestEnumSelector<>();
|
||||||
|
JLabel tabRotationLabel = new JLabel();
|
||||||
|
tabRotationField = new FlatTestEnumSelector<>();
|
||||||
JLabel tabTypeLabel = new JLabel();
|
JLabel tabTypeLabel = new JLabel();
|
||||||
tabTypeComboBox = new FlatTestEnumSelector<>();
|
tabTypeComboBox = new FlatTestEnumSelector<>();
|
||||||
leadingComponentCheckBox = new JCheckBox();
|
leadingComponentCheckBox = new JCheckBox();
|
||||||
@@ -636,6 +659,12 @@ public class FlatContainerTest
|
|||||||
//---- tabbedPaneLabel ----
|
//---- tabbedPaneLabel ----
|
||||||
tabbedPaneLabel.setText("JTabbedPane:");
|
tabbedPaneLabel.setText("JTabbedPane:");
|
||||||
panel9.add(tabbedPaneLabel, cc.xy(1, 5));
|
panel9.add(tabbedPaneLabel, cc.xy(1, 5));
|
||||||
|
|
||||||
|
//---- showOnlyOneCheckBox ----
|
||||||
|
showOnlyOneCheckBox.setText("show only one tabbed pane");
|
||||||
|
showOnlyOneCheckBox.setMnemonic('W');
|
||||||
|
showOnlyOneCheckBox.addActionListener(e -> showOnlyOne());
|
||||||
|
panel9.add(showOnlyOneCheckBox, cc.xy(3, 5, CellConstraints.RIGHT, CellConstraints.DEFAULT));
|
||||||
panel9.add(tabbedPane1, cc.xy(1, 7));
|
panel9.add(tabbedPane1, cc.xy(1, 7));
|
||||||
|
|
||||||
//======== tabbedPane3 ========
|
//======== tabbedPane3 ========
|
||||||
@@ -713,26 +742,26 @@ public class FlatContainerTest
|
|||||||
multiLineTabsCheckBox.addActionListener(e -> htmlTabsChanged());
|
multiLineTabsCheckBox.addActionListener(e -> htmlTabsChanged());
|
||||||
tabbedPaneControlPanel.add(multiLineTabsCheckBox, "cell 2 0 2 1");
|
tabbedPaneControlPanel.add(multiLineTabsCheckBox, "cell 2 0 2 1");
|
||||||
|
|
||||||
//---- tabsPopupPolicyLabel ----
|
//---- tabPlacementLabel ----
|
||||||
tabsPopupPolicyLabel.setText("Tabs popup policy:");
|
tabPlacementLabel.setText("Tab placement:");
|
||||||
tabbedPaneControlPanel.add(tabsPopupPolicyLabel, "cell 0 1");
|
tabbedPaneControlPanel.add(tabPlacementLabel, "cell 0 1");
|
||||||
|
|
||||||
//---- tabsPopupPolicyField ----
|
//---- tabPlacementField ----
|
||||||
tabsPopupPolicyField.addActionListener(e -> tabsPopupPolicyChanged());
|
tabPlacementField.addActionListener(e -> tabPlacementChanged());
|
||||||
tabbedPaneControlPanel.add(tabsPopupPolicyField, "cell 1 1");
|
tabbedPaneControlPanel.add(tabPlacementField, "cell 1 1");
|
||||||
|
|
||||||
//---- tabBackForegroundCheckBox ----
|
//---- tabBackForegroundCheckBox ----
|
||||||
tabBackForegroundCheckBox.setText("Tab back/foreground");
|
tabBackForegroundCheckBox.setText("Tab back/foreground");
|
||||||
tabBackForegroundCheckBox.addActionListener(e -> tabBackForegroundChanged());
|
tabBackForegroundCheckBox.addActionListener(e -> tabBackForegroundChanged());
|
||||||
tabbedPaneControlPanel.add(tabBackForegroundCheckBox, "cell 2 1 2 1");
|
tabbedPaneControlPanel.add(tabBackForegroundCheckBox, "cell 2 1 2 1");
|
||||||
|
|
||||||
//---- scrollButtonsPolicyLabel ----
|
//---- tabsPopupPolicyLabel ----
|
||||||
scrollButtonsPolicyLabel.setText("Scroll buttons policy:");
|
tabsPopupPolicyLabel.setText("Tabs popup policy:");
|
||||||
tabbedPaneControlPanel.add(scrollButtonsPolicyLabel, "cell 0 2");
|
tabbedPaneControlPanel.add(tabsPopupPolicyLabel, "cell 0 2");
|
||||||
|
|
||||||
//---- scrollButtonsPolicyField ----
|
//---- tabsPopupPolicyField ----
|
||||||
scrollButtonsPolicyField.addActionListener(e -> scrollButtonsPolicyChanged());
|
tabsPopupPolicyField.addActionListener(e -> tabsPopupPolicyChanged());
|
||||||
tabbedPaneControlPanel.add(scrollButtonsPolicyField, "cell 1 2");
|
tabbedPaneControlPanel.add(tabsPopupPolicyField, "cell 1 2");
|
||||||
|
|
||||||
//---- tabIconsCheckBox ----
|
//---- tabIconsCheckBox ----
|
||||||
tabIconsCheckBox.setText("Tab icons");
|
tabIconsCheckBox.setText("Tab icons");
|
||||||
@@ -750,26 +779,26 @@ public class FlatContainerTest
|
|||||||
iconPlacementField.addActionListener(e -> iconPlacementChanged());
|
iconPlacementField.addActionListener(e -> iconPlacementChanged());
|
||||||
tabbedPaneControlPanel.add(iconPlacementField, "cell 2 2 2 1");
|
tabbedPaneControlPanel.add(iconPlacementField, "cell 2 2 2 1");
|
||||||
|
|
||||||
//---- scrollButtonsPlacementLabel ----
|
//---- scrollButtonsPolicyLabel ----
|
||||||
scrollButtonsPlacementLabel.setText("Scroll buttons placement:");
|
scrollButtonsPolicyLabel.setText("Scroll buttons policy:");
|
||||||
tabbedPaneControlPanel.add(scrollButtonsPlacementLabel, "cell 0 3");
|
tabbedPaneControlPanel.add(scrollButtonsPolicyLabel, "cell 0 3");
|
||||||
|
|
||||||
//---- scrollButtonsPlacementField ----
|
//---- scrollButtonsPolicyField ----
|
||||||
scrollButtonsPlacementField.addActionListener(e -> scrollButtonsPlacementChanged());
|
scrollButtonsPolicyField.addActionListener(e -> scrollButtonsPolicyChanged());
|
||||||
tabbedPaneControlPanel.add(scrollButtonsPlacementField, "cell 1 3");
|
tabbedPaneControlPanel.add(scrollButtonsPolicyField, "cell 1 3");
|
||||||
|
|
||||||
//---- tabsClosableCheckBox ----
|
//---- tabsClosableCheckBox ----
|
||||||
tabsClosableCheckBox.setText("Tabs closable");
|
tabsClosableCheckBox.setText("Tabs closable");
|
||||||
tabsClosableCheckBox.addActionListener(e -> tabsClosableChanged());
|
tabsClosableCheckBox.addActionListener(e -> tabsClosableChanged());
|
||||||
tabbedPaneControlPanel.add(tabsClosableCheckBox, "cell 2 3 2 1");
|
tabbedPaneControlPanel.add(tabsClosableCheckBox, "cell 2 3 2 1");
|
||||||
|
|
||||||
//---- tabPlacementLabel ----
|
//---- scrollButtonsPlacementLabel ----
|
||||||
tabPlacementLabel.setText("Tab placement:");
|
scrollButtonsPlacementLabel.setText("Scroll buttons placement:");
|
||||||
tabbedPaneControlPanel.add(tabPlacementLabel, "cell 0 4");
|
tabbedPaneControlPanel.add(scrollButtonsPlacementLabel, "cell 0 4");
|
||||||
|
|
||||||
//---- tabPlacementField ----
|
//---- scrollButtonsPlacementField ----
|
||||||
tabPlacementField.addActionListener(e -> tabPlacementChanged());
|
scrollButtonsPlacementField.addActionListener(e -> scrollButtonsPlacementChanged());
|
||||||
tabbedPaneControlPanel.add(tabPlacementField, "cell 1 4");
|
tabbedPaneControlPanel.add(scrollButtonsPlacementField, "cell 1 4");
|
||||||
|
|
||||||
//---- secondTabClosableCheckBox ----
|
//---- secondTabClosableCheckBox ----
|
||||||
secondTabClosableCheckBox.setText("Second Tab closable");
|
secondTabClosableCheckBox.setText("Second Tab closable");
|
||||||
@@ -800,6 +829,14 @@ public class FlatContainerTest
|
|||||||
tabAlignmentField.addActionListener(e -> tabAlignmentChanged());
|
tabAlignmentField.addActionListener(e -> tabAlignmentChanged());
|
||||||
tabbedPaneControlPanel.add(tabAlignmentField, "cell 1 6");
|
tabbedPaneControlPanel.add(tabAlignmentField, "cell 1 6");
|
||||||
|
|
||||||
|
//---- tabRotationLabel ----
|
||||||
|
tabRotationLabel.setText("Tab rotation:");
|
||||||
|
tabbedPaneControlPanel.add(tabRotationLabel, "cell 2 6");
|
||||||
|
|
||||||
|
//---- tabRotationField ----
|
||||||
|
tabRotationField.addActionListener(e -> tabRotationChanged());
|
||||||
|
tabbedPaneControlPanel.add(tabRotationField, "cell 3 6");
|
||||||
|
|
||||||
//---- tabTypeLabel ----
|
//---- tabTypeLabel ----
|
||||||
tabTypeLabel.setText("Tab type:");
|
tabTypeLabel.setText("Tab type:");
|
||||||
tabbedPaneControlPanel.add(tabTypeLabel, "cell 0 7");
|
tabbedPaneControlPanel.add(tabTypeLabel, "cell 0 7");
|
||||||
@@ -892,6 +929,7 @@ public class FlatContainerTest
|
|||||||
}
|
}
|
||||||
|
|
||||||
// JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables
|
// JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables
|
||||||
|
private JCheckBox showOnlyOneCheckBox;
|
||||||
private FlatTabbedPane tabbedPane1;
|
private FlatTabbedPane tabbedPane1;
|
||||||
private FlatTabbedPane tabbedPane3;
|
private FlatTabbedPane tabbedPane3;
|
||||||
private FlatTabbedPane tabbedPane2;
|
private FlatTabbedPane tabbedPane2;
|
||||||
@@ -901,19 +939,20 @@ public class FlatContainerTest
|
|||||||
private JCheckBox customTabsCheckBox;
|
private JCheckBox customTabsCheckBox;
|
||||||
private JCheckBox htmlTabsCheckBox;
|
private JCheckBox htmlTabsCheckBox;
|
||||||
private JCheckBox multiLineTabsCheckBox;
|
private JCheckBox multiLineTabsCheckBox;
|
||||||
private FlatTestEnumSelector<TabsPopupPolicy> tabsPopupPolicyField;
|
private FlatTestEnumSelector<TabPlacement> tabPlacementField;
|
||||||
private JCheckBox tabBackForegroundCheckBox;
|
private JCheckBox tabBackForegroundCheckBox;
|
||||||
private FlatTestEnumSelector<ScrollButtonsPolicy> scrollButtonsPolicyField;
|
private FlatTestEnumSelector<TabsPopupPolicy> tabsPopupPolicyField;
|
||||||
private JCheckBox tabIconsCheckBox;
|
private JCheckBox tabIconsCheckBox;
|
||||||
private JSpinner tabIconSizeSpinner;
|
private JSpinner tabIconSizeSpinner;
|
||||||
private FlatTestEnumSelector<TabIconPlacement> iconPlacementField;
|
private FlatTestEnumSelector<TabIconPlacement> iconPlacementField;
|
||||||
private FlatTestEnumSelector<ScrollButtonsPlacement> scrollButtonsPlacementField;
|
private FlatTestEnumSelector<ScrollButtonsPolicy> scrollButtonsPolicyField;
|
||||||
private JCheckBox tabsClosableCheckBox;
|
private JCheckBox tabsClosableCheckBox;
|
||||||
private FlatTestEnumSelector<TabPlacement> tabPlacementField;
|
private FlatTestEnumSelector<ScrollButtonsPlacement> scrollButtonsPlacementField;
|
||||||
private FlatTriStateCheckBox secondTabClosableCheckBox;
|
private FlatTriStateCheckBox secondTabClosableCheckBox;
|
||||||
private FlatTestEnumSelector<TabAreaAlignment> tabAreaAlignmentField;
|
private FlatTestEnumSelector<TabAreaAlignment> tabAreaAlignmentField;
|
||||||
private FlatTestEnumSelector<TabWidthMode> tabWidthModeField;
|
private FlatTestEnumSelector<TabWidthMode> tabWidthModeField;
|
||||||
private FlatTestEnumSelector<TabAlignment> tabAlignmentField;
|
private FlatTestEnumSelector<TabAlignment> tabAlignmentField;
|
||||||
|
private FlatTestEnumSelector<TabRotation> tabRotationField;
|
||||||
private FlatTestEnumSelector<TabType> tabTypeComboBox;
|
private FlatTestEnumSelector<TabType> tabTypeComboBox;
|
||||||
private JCheckBox leadingComponentCheckBox;
|
private JCheckBox leadingComponentCheckBox;
|
||||||
private JCheckBox customBorderCheckBox;
|
private JCheckBox customBorderCheckBox;
|
||||||
|
|||||||
@@ -91,13 +91,25 @@ new FormModel {
|
|||||||
"gridX": 1
|
"gridX": 1
|
||||||
"gridY": 5
|
"gridY": 5
|
||||||
} )
|
} )
|
||||||
|
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||||
|
name: "showOnlyOneCheckBox"
|
||||||
|
"text": "show only one tabbed pane"
|
||||||
|
"mnemonic": 87
|
||||||
|
auxiliary() {
|
||||||
|
"JavaCodeGenerator.variableLocal": false
|
||||||
|
}
|
||||||
|
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "showOnlyOne", false ) )
|
||||||
|
}, new FormLayoutConstraints( class com.jgoodies.forms.layout.CellConstraints ) {
|
||||||
|
"gridX": 3
|
||||||
|
"gridY": 5
|
||||||
|
"hAlign": sfield com.jgoodies.forms.layout.CellConstraints RIGHT
|
||||||
|
} )
|
||||||
add( new FormContainer( "com.formdev.flatlaf.extras.components.FlatTabbedPane", new FormLayoutManager( class javax.swing.JTabbedPane ) ) {
|
add( new FormContainer( "com.formdev.flatlaf.extras.components.FlatTabbedPane", new FormLayoutManager( class javax.swing.JTabbedPane ) ) {
|
||||||
name: "tabbedPane1"
|
name: "tabbedPane1"
|
||||||
auxiliary() {
|
auxiliary() {
|
||||||
"JavaCodeGenerator.variableLocal": false
|
"JavaCodeGenerator.variableLocal": false
|
||||||
}
|
}
|
||||||
}, new FormLayoutConstraints( class com.jgoodies.forms.layout.CellConstraints ) {
|
}, new FormLayoutConstraints( class com.jgoodies.forms.layout.CellConstraints ) {
|
||||||
"gridX": 1
|
|
||||||
"gridY": 7
|
"gridY": 7
|
||||||
} )
|
} )
|
||||||
add( new FormContainer( "com.formdev.flatlaf.extras.components.FlatTabbedPane", new FormLayoutManager( class javax.swing.JTabbedPane ) ) {
|
add( new FormContainer( "com.formdev.flatlaf.extras.components.FlatTabbedPane", new FormLayoutManager( class javax.swing.JTabbedPane ) ) {
|
||||||
@@ -198,18 +210,18 @@ new FormModel {
|
|||||||
"value": "cell 2 0 2 1"
|
"value": "cell 2 0 2 1"
|
||||||
} )
|
} )
|
||||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||||
name: "tabsPopupPolicyLabel"
|
name: "tabPlacementLabel"
|
||||||
"text": "Tabs popup policy:"
|
"text": "Tab placement:"
|
||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||||
"value": "cell 0 1"
|
"value": "cell 0 1"
|
||||||
} )
|
} )
|
||||||
add( new FormComponent( "com.formdev.flatlaf.testing.FlatTestEnumSelector" ) {
|
add( new FormComponent( "com.formdev.flatlaf.testing.FlatTestEnumSelector" ) {
|
||||||
name: "tabsPopupPolicyField"
|
name: "tabPlacementField"
|
||||||
auxiliary() {
|
auxiliary() {
|
||||||
"JavaCodeGenerator.variableLocal": false
|
"JavaCodeGenerator.variableLocal": false
|
||||||
"JavaCodeGenerator.typeParameters": "TabsPopupPolicy"
|
"JavaCodeGenerator.typeParameters": "TabPlacement"
|
||||||
}
|
}
|
||||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "tabsPopupPolicyChanged", false ) )
|
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "tabPlacementChanged", false ) )
|
||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||||
"value": "cell 1 1"
|
"value": "cell 1 1"
|
||||||
} )
|
} )
|
||||||
@@ -224,18 +236,18 @@ new FormModel {
|
|||||||
"value": "cell 2 1 2 1"
|
"value": "cell 2 1 2 1"
|
||||||
} )
|
} )
|
||||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||||
name: "scrollButtonsPolicyLabel"
|
name: "tabsPopupPolicyLabel"
|
||||||
"text": "Scroll buttons policy:"
|
"text": "Tabs popup policy:"
|
||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||||
"value": "cell 0 2"
|
"value": "cell 0 2"
|
||||||
} )
|
} )
|
||||||
add( new FormComponent( "com.formdev.flatlaf.testing.FlatTestEnumSelector" ) {
|
add( new FormComponent( "com.formdev.flatlaf.testing.FlatTestEnumSelector" ) {
|
||||||
name: "scrollButtonsPolicyField"
|
name: "tabsPopupPolicyField"
|
||||||
auxiliary() {
|
auxiliary() {
|
||||||
"JavaCodeGenerator.variableLocal": false
|
"JavaCodeGenerator.variableLocal": false
|
||||||
"JavaCodeGenerator.typeParameters": "ScrollButtonsPolicy"
|
"JavaCodeGenerator.typeParameters": "TabsPopupPolicy"
|
||||||
}
|
}
|
||||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "scrollButtonsPolicyChanged", false ) )
|
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "tabsPopupPolicyChanged", false ) )
|
||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||||
"value": "cell 1 2"
|
"value": "cell 1 2"
|
||||||
} )
|
} )
|
||||||
@@ -280,18 +292,18 @@ new FormModel {
|
|||||||
"value": "cell 2 2 2 1"
|
"value": "cell 2 2 2 1"
|
||||||
} )
|
} )
|
||||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||||
name: "scrollButtonsPlacementLabel"
|
name: "scrollButtonsPolicyLabel"
|
||||||
"text": "Scroll buttons placement:"
|
"text": "Scroll buttons policy:"
|
||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||||
"value": "cell 0 3"
|
"value": "cell 0 3"
|
||||||
} )
|
} )
|
||||||
add( new FormComponent( "com.formdev.flatlaf.testing.FlatTestEnumSelector" ) {
|
add( new FormComponent( "com.formdev.flatlaf.testing.FlatTestEnumSelector" ) {
|
||||||
name: "scrollButtonsPlacementField"
|
name: "scrollButtonsPolicyField"
|
||||||
auxiliary() {
|
auxiliary() {
|
||||||
"JavaCodeGenerator.variableLocal": false
|
"JavaCodeGenerator.variableLocal": false
|
||||||
"JavaCodeGenerator.typeParameters": "ScrollButtonsPlacement"
|
"JavaCodeGenerator.typeParameters": "ScrollButtonsPolicy"
|
||||||
}
|
}
|
||||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "scrollButtonsPlacementChanged", false ) )
|
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "scrollButtonsPolicyChanged", false ) )
|
||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||||
"value": "cell 1 3"
|
"value": "cell 1 3"
|
||||||
} )
|
} )
|
||||||
@@ -306,18 +318,18 @@ new FormModel {
|
|||||||
"value": "cell 2 3 2 1"
|
"value": "cell 2 3 2 1"
|
||||||
} )
|
} )
|
||||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||||
name: "tabPlacementLabel"
|
name: "scrollButtonsPlacementLabel"
|
||||||
"text": "Tab placement:"
|
"text": "Scroll buttons placement:"
|
||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||||
"value": "cell 0 4"
|
"value": "cell 0 4"
|
||||||
} )
|
} )
|
||||||
add( new FormComponent( "com.formdev.flatlaf.testing.FlatTestEnumSelector" ) {
|
add( new FormComponent( "com.formdev.flatlaf.testing.FlatTestEnumSelector" ) {
|
||||||
name: "tabPlacementField"
|
name: "scrollButtonsPlacementField"
|
||||||
auxiliary() {
|
auxiliary() {
|
||||||
"JavaCodeGenerator.variableLocal": false
|
"JavaCodeGenerator.variableLocal": false
|
||||||
"JavaCodeGenerator.typeParameters": "TabPlacement"
|
"JavaCodeGenerator.typeParameters": "ScrollButtonsPlacement"
|
||||||
}
|
}
|
||||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "tabPlacementChanged", false ) )
|
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "scrollButtonsPlacementChanged", false ) )
|
||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||||
"value": "cell 1 4"
|
"value": "cell 1 4"
|
||||||
} )
|
} )
|
||||||
@@ -379,6 +391,22 @@ new FormModel {
|
|||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||||
"value": "cell 1 6"
|
"value": "cell 1 6"
|
||||||
} )
|
} )
|
||||||
|
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||||
|
name: "tabRotationLabel"
|
||||||
|
"text": "Tab rotation:"
|
||||||
|
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||||
|
"value": "cell 2 6"
|
||||||
|
} )
|
||||||
|
add( new FormComponent( "com.formdev.flatlaf.testing.FlatTestEnumSelector" ) {
|
||||||
|
name: "tabRotationField"
|
||||||
|
auxiliary() {
|
||||||
|
"JavaCodeGenerator.typeParameters": "TabRotation"
|
||||||
|
"JavaCodeGenerator.variableLocal": false
|
||||||
|
}
|
||||||
|
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "tabRotationChanged", false ) )
|
||||||
|
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||||
|
"value": "cell 3 6"
|
||||||
|
} )
|
||||||
add( new FormComponent( "javax.swing.JLabel" ) {
|
add( new FormComponent( "javax.swing.JLabel" ) {
|
||||||
name: "tabTypeLabel"
|
name: "tabTypeLabel"
|
||||||
"text": "Tab type:"
|
"text": "Tab type:"
|
||||||
|
|||||||
@@ -881,6 +881,7 @@ TabbedPane.tabAreaAlignment
|
|||||||
TabbedPane.tabAreaInsets
|
TabbedPane.tabAreaInsets
|
||||||
TabbedPane.tabHeight
|
TabbedPane.tabHeight
|
||||||
TabbedPane.tabInsets
|
TabbedPane.tabInsets
|
||||||
|
TabbedPane.tabRotation
|
||||||
TabbedPane.tabRunOverlay
|
TabbedPane.tabRunOverlay
|
||||||
TabbedPane.tabSelectionArc
|
TabbedPane.tabSelectionArc
|
||||||
TabbedPane.tabSelectionHeight
|
TabbedPane.tabSelectionHeight
|
||||||
|
|||||||
Reference in New Issue
Block a user