Merge pull request #306 from JFormDesigner/jidetabbedpane

JideTabbedPane improvements
This commit is contained in:
Karl Tauber
2021-04-13 16:29:49 +02:00
11 changed files with 1626 additions and 285 deletions

View File

@@ -107,4 +107,22 @@ public class FlatJidePainter
} else } else
super.paintBackground( c, g, rect, borderColor, background, orientation ); super.paintBackground( c, g, rect, borderColor, background, orientation );
} }
@Override
public void paintGripper( JComponent c, Graphics g, Rectangle rect, int orientation, int state ) {
float userScaleFactor = UIScale.getUserScaleFactor();
if( userScaleFactor > 1 ) {
// scale gripper
Graphics2D g2 = (Graphics2D) g.create();
try {
g2.translate( rect.x, rect.y );
g2.scale( userScaleFactor, userScaleFactor );
Rectangle rect2 = new Rectangle( 0, 0, UIScale.unscale( rect.width ), UIScale.unscale( rect.height ) );
super.paintGripper( c, g2, rect2, orientation, state );
} finally {
g2.dispose();
}
} else
super.paintGripper( c, g, rect, orientation, state );
}
} }

View File

@@ -17,15 +17,19 @@
package com.formdev.flatlaf.jideoss.ui; package com.formdev.flatlaf.jideoss.ui;
import static com.formdev.flatlaf.FlatClientProperties.TABBED_PANE_HAS_FULL_BORDER; import static com.formdev.flatlaf.FlatClientProperties.TABBED_PANE_HAS_FULL_BORDER;
import static com.formdev.flatlaf.FlatClientProperties.TABBED_PANE_SHOW_TAB_SEPARATORS;
import static com.formdev.flatlaf.FlatClientProperties.clientPropertyBoolean; import static com.formdev.flatlaf.FlatClientProperties.clientPropertyBoolean;
import static com.formdev.flatlaf.util.UIScale.scale; import static com.formdev.flatlaf.util.UIScale.scale;
import java.awt.Color; import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension; import java.awt.Dimension;
import java.awt.Font; import java.awt.Font;
import java.awt.FontMetrics; import java.awt.FontMetrics;
import java.awt.Graphics; import java.awt.Graphics;
import java.awt.Graphics2D; import java.awt.Graphics2D;
import java.awt.Insets; import java.awt.Insets;
import java.awt.LayoutManager;
import java.awt.Rectangle; import java.awt.Rectangle;
import java.awt.Shape; import java.awt.Shape;
import java.awt.event.MouseListener; import java.awt.event.MouseListener;
@@ -33,15 +37,20 @@ import java.awt.event.MouseMotionListener;
import java.awt.geom.Path2D; import java.awt.geom.Path2D;
import java.awt.geom.Rectangle2D; import java.awt.geom.Rectangle2D;
import java.beans.PropertyChangeListener; import java.beans.PropertyChangeListener;
import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JComponent; import javax.swing.JComponent;
import javax.swing.UIManager; import javax.swing.UIManager;
import javax.swing.plaf.ComponentUI; import javax.swing.plaf.ComponentUI;
import com.formdev.flatlaf.FlatClientProperties; import com.formdev.flatlaf.icons.FlatTabbedPaneCloseIcon;
import com.formdev.flatlaf.ui.FlatUIUtils; import com.formdev.flatlaf.ui.FlatUIUtils;
import com.formdev.flatlaf.util.Graphics2DProxy;
import com.formdev.flatlaf.util.UIScale;
import com.jidesoft.plaf.LookAndFeelFactory; import com.jidesoft.plaf.LookAndFeelFactory;
import com.jidesoft.plaf.UIDefaultsLookup; import com.jidesoft.plaf.UIDefaultsLookup;
import com.jidesoft.plaf.basic.BasicJideTabbedPaneUI; import com.jidesoft.plaf.basic.BasicJideTabbedPaneUI;
import com.jidesoft.swing.JideTabbedPane; import com.jidesoft.swing.JideTabbedPane;
import com.jidesoft.swing.JideTabbedPane.NoFocusButton;
/** /**
* Provides the Flat LaF UI delegate for {@link com.jidesoft.swing.JideTabbedPane}. * Provides the Flat LaF UI delegate for {@link com.jidesoft.swing.JideTabbedPane}.
@@ -51,18 +60,36 @@ import com.jidesoft.swing.JideTabbedPane;
public class FlatJideTabbedPaneUI public class FlatJideTabbedPaneUI
extends BasicJideTabbedPaneUI extends BasicJideTabbedPaneUI
{ {
protected Color foreground;
protected Color disabledForeground;
protected Color selectedBackground;
protected Color underlineColor; protected Color underlineColor;
protected Color disabledUnderlineColor; protected Color disabledUnderlineColor;
protected Color hoverColor; protected Color hoverColor;
protected Color focusColor; protected Color focusColor;
protected Color tabSeparatorColor;
protected Color contentAreaColor; protected Color contentAreaColor;
protected int tabHeight; protected int tabHeight;
protected int tabSelectionHeight; protected int tabSelectionHeight;
protected int contentSeparatorHeight; protected int contentSeparatorHeight;
protected boolean showTabSeparators;
protected boolean tabSeparatorsFullHeight;
protected boolean hasFullBorder; protected boolean hasFullBorder;
protected boolean tabsOverlapBorder; protected boolean tabsOverlapBorder;
protected Icon closeIcon;
protected Icon arrowIcon;
protected String arrowType;
protected Insets buttonInsets;
protected int buttonArc;
protected Color buttonHoverBackground;
protected Color buttonPressedBackground;
protected int closeButtonLeftMarginUnscaled;
protected int closeButtonRightMarginUnscaled;
private Object[] oldRenderingHints; private Object[] oldRenderingHints;
public static ComponentUI createUI( JComponent c ) { public static ComponentUI createUI( JComponent c ) {
@@ -79,18 +106,33 @@ public class FlatJideTabbedPaneUI
_background = UIDefaultsLookup.getColor( "JideTabbedPane.background" ); _background = UIDefaultsLookup.getColor( "JideTabbedPane.background" );
foreground = UIManager.getColor( "TabbedPane.foreground" );
disabledForeground = UIManager.getColor( "TabbedPane.disabledForeground" );
selectedBackground = UIManager.getColor( "TabbedPane.selectedBackground" );
underlineColor = UIManager.getColor( "TabbedPane.underlineColor" ); underlineColor = UIManager.getColor( "TabbedPane.underlineColor" );
disabledUnderlineColor = UIManager.getColor( "TabbedPane.disabledUnderlineColor" ); disabledUnderlineColor = UIManager.getColor( "TabbedPane.disabledUnderlineColor" );
hoverColor = UIManager.getColor( "TabbedPane.hoverColor" ); hoverColor = UIManager.getColor( "TabbedPane.hoverColor" );
focusColor = UIManager.getColor( "TabbedPane.focusColor" ); focusColor = UIManager.getColor( "TabbedPane.focusColor" );
tabSeparatorColor = UIManager.getColor( "TabbedPane.tabSeparatorColor" );
contentAreaColor = UIManager.getColor( "TabbedPane.contentAreaColor" ); contentAreaColor = UIManager.getColor( "TabbedPane.contentAreaColor" );
tabHeight = UIManager.getInt( "TabbedPane.tabHeight" ); tabHeight = UIManager.getInt( "TabbedPane.tabHeight" );
tabSelectionHeight = UIManager.getInt( "TabbedPane.tabSelectionHeight" ); tabSelectionHeight = UIManager.getInt( "TabbedPane.tabSelectionHeight" );
contentSeparatorHeight = UIManager.getInt( "TabbedPane.contentSeparatorHeight" ); contentSeparatorHeight = UIManager.getInt( "TabbedPane.contentSeparatorHeight" );
showTabSeparators = UIManager.getBoolean( "TabbedPane.showTabSeparators" );
tabSeparatorsFullHeight = UIManager.getBoolean( "TabbedPane.tabSeparatorsFullHeight" );
hasFullBorder = UIManager.getBoolean( "TabbedPane.hasFullBorder" ); hasFullBorder = UIManager.getBoolean( "TabbedPane.hasFullBorder" );
tabsOverlapBorder = UIManager.getBoolean( "TabbedPane.tabsOverlapBorder" ); tabsOverlapBorder = UIManager.getBoolean( "TabbedPane.tabsOverlapBorder" );
arrowType = UIManager.getString( "TabbedPane.arrowType" );
buttonInsets = UIManager.getInsets( "TabbedPane.buttonInsets" );
buttonArc = UIManager.getInt( "TabbedPane.buttonArc" );
buttonHoverBackground = UIManager.getColor( "TabbedPane.buttonHoverBackground" );
buttonPressedBackground = UIManager.getColor( "TabbedPane.buttonPressedBackground" );
closeButtonLeftMarginUnscaled = _closeButtonLeftMargin;
closeButtonRightMarginUnscaled = _closeButtonRightMargin;
// scale // scale
_textIconGap = scale( _textIconGap ); _textIconGap = scale( _textIconGap );
tabHeight = scale( tabHeight ); tabHeight = scale( tabHeight );
@@ -101,11 +143,46 @@ public class FlatJideTabbedPaneUI
protected void uninstallDefaults() { protected void uninstallDefaults() {
super.uninstallDefaults(); super.uninstallDefaults();
foreground = null;
disabledForeground = null;
selectedBackground = null;
underlineColor = null; underlineColor = null;
disabledUnderlineColor = null; disabledUnderlineColor = null;
hoverColor = null; hoverColor = null;
focusColor = null; focusColor = null;
tabSeparatorColor = null;
contentAreaColor = null; contentAreaColor = null;
buttonHoverBackground = null;
buttonPressedBackground = null;
}
@Override
protected void installComponents() {
super.installComponents();
closeIcon = new FlatJideTabCloseIcon();
arrowIcon = new FlatJideTabAreaArrowIcon();
if( _tabScroller != null ) {
_tabScroller.scrollForwardButton.setIcon( arrowIcon );
_tabScroller.scrollBackwardButton.setIcon( arrowIcon );
_tabScroller.listButton.setIcon( arrowIcon );
_tabScroller.closeButton.setIcon( closeIcon );
_tabScroller.scrollForwardButton.setContentAreaFilled( false );
_tabScroller.scrollBackwardButton.setContentAreaFilled( false );
_tabScroller.listButton.setContentAreaFilled( false );
_tabScroller.closeButton.setContentAreaFilled( false );
}
}
@Override
protected void uninstallComponents() {
super.uninstallComponents();
closeIcon = null;
arrowIcon = null;
} }
@Override @Override
@@ -114,13 +191,20 @@ public class FlatJideTabbedPaneUI
return e -> { return e -> {
superListener.propertyChange( e ); superListener.propertyChange( e );
String propertyName = e.getPropertyName(); switch( e.getPropertyName() ) {
if( JideTabbedPane.PROPERTY_SELECTED_INDEX.equals( propertyName ) ) { case JideTabbedPane.PROPERTY_SELECTED_INDEX:
repaintTab( (Integer) e.getOldValue() ); repaintTab( (Integer) e.getOldValue() );
repaintTab( (Integer) e.getNewValue() ); repaintTab( (Integer) e.getNewValue() );
} else if( FlatClientProperties.TABBED_PANE_HAS_FULL_BORDER.equals( propertyName ) ) { break;
case JideTabbedPane.PROPERTY_TAB_AREA_INSETS:
case JideTabbedPane.PROPERTY_TAB_INSETS:
case JideTabbedPane.GRIPPER_PROPERTY:
case TABBED_PANE_SHOW_TAB_SEPARATORS:
case TABBED_PANE_HAS_FULL_BORDER:
_tabPane.revalidate(); _tabPane.revalidate();
_tabPane.repaint(); _tabPane.repaint();
break;
} }
}; };
} }
@@ -144,14 +228,23 @@ public class FlatJideTabbedPaneUI
return new RolloverMouseMotionHandler(); return new RolloverMouseMotionHandler();
} }
@Override
protected LayoutManager createLayoutManager() {
return (_tabPane.getTabLayoutPolicy() == JideTabbedPane.SCROLL_TAB_LAYOUT)
? new FlatJideTabbedPaneScrollLayout()
: super.createLayoutManager();
}
@Override @Override
protected int calculateTabHeight( int tabPlacement, int tabIndex, FontMetrics metrics ) { protected int calculateTabHeight( int tabPlacement, int tabIndex, FontMetrics metrics ) {
updateCloseButtonMargins();
return Math.max( tabHeight, super.calculateTabHeight( tabPlacement, tabIndex, metrics ) ); return Math.max( tabHeight, super.calculateTabHeight( tabPlacement, tabIndex, metrics ) );
} }
@Override @Override
protected int calculateTabWidth( int tabPlacement, int tabIndex, FontMetrics metrics ) { protected int calculateTabWidth( int tabPlacement, int tabIndex, FontMetrics metrics ) {
return Math.max( tabHeight, super.calculateTabWidth( tabPlacement, tabIndex, metrics ) ); updateCloseButtonMargins();
return Math.max( tabHeight, super.calculateTabWidth( tabPlacement, tabIndex, metrics ) - 3 );
} }
@Override @Override
@@ -174,6 +267,26 @@ public class FlatJideTabbedPaneUI
return JideTabbedPane.SHAPE_BOX; return JideTabbedPane.SHAPE_BOX;
} }
@Override
protected int getLeftMargin() {
return 0;
}
@Override
protected int getTabGap() {
return 0;
}
@Override
protected int getLayoutSize() {
return 0;
}
@Override
protected int getTabRightPadding() {
return 0;
}
/** /**
* The content border insets are used to create a separator between tabs and content. * The content border insets are used to create a separator between tabs and content.
* If client property JTabbedPane.hasFullBorder is true, then the content border insets * If client property JTabbedPane.hasFullBorder is true, then the content border insets
@@ -226,7 +339,9 @@ public class FlatJideTabbedPaneUI
? hoverColor ? hoverColor
: (enabled && isSelected && FlatUIUtils.isPermanentFocusOwner( _tabPane ) : (enabled && isSelected && FlatUIUtils.isPermanentFocusOwner( _tabPane )
? focusColor ? focusColor
: _tabPane.getBackgroundAt( tabIndex )) ); : (selectedBackground != null && enabled && isSelected
? selectedBackground
: _tabPane.getBackgroundAt( tabIndex ))) );
g.fillRect( x, y, w, h ); g.fillRect( x, y, w, h );
} }
@@ -234,8 +349,38 @@ public class FlatJideTabbedPaneUI
protected void paintText( Graphics g, int tabPlacement, Font font, FontMetrics metrics, protected void paintText( Graphics g, int tabPlacement, Font font, FontMetrics metrics,
int tabIndex, String title, Rectangle textRect, boolean isSelected ) int tabIndex, String title, Rectangle textRect, boolean isSelected )
{ {
if( !_tabPane.isEnabled() || !_tabPane.isEnabledAt( tabIndex ) ) {
// super method paints disabled text twice with different colors
// and one pixel offset to simulate disabled text
// --> draw only once with disabledForeground
class DisabledTextGraphics extends Graphics2DProxy {
private int count;
public DisabledTextGraphics( Graphics delegate ) {
super( (Graphics2D) delegate );
}
@Override
public Graphics create() {
return new DisabledTextGraphics( super.create() );
}
@Override
public void drawString( String str, int x, int y ) {
count++;
if( (count % 2) != 1 )
return;
setColor( disabledForeground );
super.drawString( str, x, y );
}
}
g = new DisabledTextGraphics( g );
}
Graphics g2 = g;
FlatUIUtils.runWithoutRenderingHints( g, oldRenderingHints, () -> { FlatUIUtils.runWithoutRenderingHints( g, oldRenderingHints, () -> {
super.paintText( g, tabPlacement, font, metrics, tabIndex, title, textRect, isSelected ); super.paintText( g2, tabPlacement, font, metrics, tabIndex, title, textRect, isSelected );
} ); } );
} }
@@ -243,11 +388,36 @@ public class FlatJideTabbedPaneUI
protected void paintTabBorder( Graphics g, int tabPlacement, int tabIndex, int x, int y, int w, int h, protected void paintTabBorder( Graphics g, int tabPlacement, int tabIndex, int x, int y, int w, int h,
boolean isSelected ) boolean isSelected )
{ {
// paint tab separators
if( clientPropertyBoolean( _tabPane, TABBED_PANE_SHOW_TAB_SEPARATORS, showTabSeparators ) &&
!isLastInRun( tabIndex ) )
paintTabSeparator( g, tabPlacement, x, y, w, h );
if( isSelected ) if( isSelected )
paintTabSelection( g, tabPlacement, x, y, w, h ); paintTabSelection( g, tabPlacement, x, y, w, h );
} }
protected void paintTabSeparator( Graphics g, int tabPlacement, int x, int y, int w, int h ) {
float sepWidth = UIScale.scale( 1f );
float offset = tabSeparatorsFullHeight ? 0 : UIScale.scale( 5f );
g.setColor( (tabSeparatorColor != null) ? tabSeparatorColor : contentAreaColor );
if( tabPlacement == LEFT || tabPlacement == RIGHT ) {
// paint tab separator at bottom side
((Graphics2D)g).fill( new Rectangle2D.Float( x + offset, y + h - sepWidth, w - (offset * 2), sepWidth ) );
} else if( _tabPane.getComponentOrientation().isLeftToRight() ) {
// paint tab separator at right side
((Graphics2D)g).fill( new Rectangle2D.Float( x + w - sepWidth, y + offset, sepWidth, h - (offset * 2) ) );
} else {
// paint tab separator at left side
((Graphics2D)g).fill( new Rectangle2D.Float( x, y + offset, sepWidth, h - (offset * 2) ) );
}
}
protected void paintTabSelection( Graphics g, int tabPlacement, int x, int y, int w, int h ) { protected void paintTabSelection( Graphics g, int tabPlacement, int x, int y, int w, int h ) {
if( !_tabPane.isTabShown() )
return;
// increase clip bounds in scroll-tab-layout to paint over the separator line // increase clip bounds in scroll-tab-layout to paint over the separator line
Rectangle clipBounds = scrollableTabLayoutEnabled() ? g.getClipBounds() : null; Rectangle clipBounds = scrollableTabLayoutEnabled() ? g.getClipBounds() : null;
if( clipBounds != null ) { if( clipBounds != null ) {
@@ -313,7 +483,7 @@ public class FlatJideTabbedPaneUI
*/ */
@Override @Override
protected void paintContentBorder( Graphics g, int tabPlacement, int selectedIndex ) { protected void paintContentBorder( Graphics g, int tabPlacement, int selectedIndex ) {
if( _tabPane.getTabCount() <= 0 ) if( !_tabPane.isTabShown() )
return; return;
Insets insets = _tabPane.getInsets(); Insets insets = _tabPane.getInsets();
@@ -386,4 +556,354 @@ public class FlatJideTabbedPaneUI
Rectangle iconRect, Rectangle textRect, boolean isSelected ) Rectangle iconRect, Rectangle textRect, boolean isSelected )
{ {
} }
@Override
protected void layoutLabel( int tabPlacement, FontMetrics metrics, int tabIndex, String title, Icon icon,
Rectangle tabRect, Rectangle iconRect, Rectangle textRect, boolean isSelected )
{
if( tabPlacement == LEFT || tabPlacement == RIGHT ) {
Rectangle tabRect2 = new Rectangle( 0, 0, tabRect.height, tabRect.width );
Rectangle iconRect2 = new Rectangle();
Rectangle textRect2 = new Rectangle();
super.layoutLabel( TOP, metrics, tabIndex, title, icon, tabRect2, iconRect2, textRect2, isSelected );
textRect.x = tabRect.x + textRect2.y;
textRect.y = tabRect.y + textRect2.x;
textRect.width = textRect2.height;
textRect.height = textRect2.width;
if( tabPlacement == LEFT )
textRect.y += metrics.getHeight() / 2;
iconRect.x = tabRect.x + iconRect2.y;
iconRect.y = tabRect.y + iconRect2.x;
iconRect.width = iconRect2.height;
iconRect.height = iconRect2.width;
} else
super.layoutLabel( tabPlacement, metrics, tabIndex, title, icon, tabRect, iconRect, textRect, isSelected );
}
@Override
protected Rectangle getTabsTextBoundsAt( int tabIndex ) {
Rectangle rect = super.getTabsTextBoundsAt( tabIndex );
rect.x += getTabInsets( _tabPane.getTabPlacement(), tabIndex ).left;
return rect;
}
private boolean isLastInRun( int tabIndex ) {
int run = getRunForTab( _tabPane.getTabCount(), tabIndex );
return lastTabInRun( _tabPane.getTabCount(), run ) == tabIndex;
}
private boolean isLeftToRight() {
return _tabPane.getComponentOrientation().isLeftToRight();
}
private boolean isHorizontalTabPlacement() {
int tabPlacement = _tabPane.getTabPlacement();
return tabPlacement == TOP || tabPlacement == BOTTOM;
}
@Override
protected void ensureCurrentRects( int leftMargin, int tabCount ) {
int oldFitStyleBoundSize = _fitStyleBoundSize;
int oldFitStyleFirstTabMargin = _fitStyleFirstTabMargin;
int oldCompressedStyleNoIconRectSize = _compressedStyleNoIconRectSize;
int oldCompressedStyleIconMargin = _compressedStyleIconMargin;
int oldFixedStyleRectSize = _fixedStyleRectSize;
_fitStyleBoundSize = scale( _fitStyleBoundSize );
_fitStyleFirstTabMargin = scale( _fitStyleFirstTabMargin );
_compressedStyleNoIconRectSize = scale( _compressedStyleNoIconRectSize );
_compressedStyleIconMargin = scale( _compressedStyleIconMargin );
_fixedStyleRectSize = scale( _fixedStyleRectSize );
super.ensureCurrentRects( leftMargin, tabCount );
_fitStyleBoundSize = oldFitStyleBoundSize;
_fitStyleFirstTabMargin = oldFitStyleFirstTabMargin;
_compressedStyleNoIconRectSize = oldCompressedStyleNoIconRectSize;
_compressedStyleIconMargin = oldCompressedStyleIconMargin;
_fixedStyleRectSize = oldFixedStyleRectSize;
}
@Override
public void ensureCloseButtonCreated() {
super.ensureCloseButtonCreated();
if( _closeButtons == null )
return;
// make sure that close buttons use our icon and do not fill background
for( JButton closeButton : _closeButtons ) {
if( closeButton.getIcon() != closeIcon )
closeButton.setIcon( closeIcon );
if( closeButton.isContentAreaFilled() )
closeButton.setContentAreaFilled( false );
}
}
protected void updateCloseButtonMargins() {
// scale close button margins
_closeButtonLeftMargin = scale( closeButtonLeftMarginUnscaled );
_closeButtonRightMargin = scale( closeButtonRightMarginUnscaled );
// since close button size is hardcoded to 16x16 in NoFocusButton.getPreferredSize(),
// add difference between scaled and unscaled close button size to margins
int offset = (closeIcon.getIconWidth() - 16) / 2;
_closeButtonLeftMargin += offset;
_closeButtonRightMargin += offset;
}
//---- class FlatJideTabbedPaneScrollLayout -------------------------------
protected class FlatJideTabbedPaneScrollLayout
extends TabbedPaneScrollLayout
{
@Override
public void layoutContainer( Container parent ) {
updateCloseButtonMargins();
super.layoutContainer( parent );
updateCloseButtons();
updateArrowButtons();
}
private void updateCloseButtons() {
if( !scrollableTabLayoutEnabled() || !isShowCloseButton() || !isShowCloseButtonOnTab() )
return;
Color background = _tabPane.getBackground();
for( int i = 0; i < _closeButtons.length; i++ ) {
JButton closeButton = _closeButtons[i];
if( closeButton.getWidth() == 0 || closeButton.getHeight() == 0 )
continue; // not visible
closeButton.setBounds( getTabCloseBounds( i ) );
closeButton.setBackground( background );
}
}
private Rectangle getTabCloseBounds( int tabIndex ) {
int iconWidth = closeIcon.getIconWidth();
int iconHeight = closeIcon.getIconHeight();
Rectangle tabRect = _rects[tabIndex];
Insets tabInsets = getTabInsets( _tabPane.getTabPlacement(), tabIndex );
// use one-third of right/left tab insets as gap between tab text and close button
if( _tabPane.getTabPlacement() == JideTabbedPane.TOP || _tabPane.getTabPlacement() == JideTabbedPane.BOTTOM ) {
return new Rectangle(
_tabPane.getComponentOrientation().isLeftToRight()
? (tabRect.x + tabRect.width - (tabInsets.right / 3 * 2) - iconWidth)
: (tabRect.x + (tabInsets.left / 3 * 2)),
tabRect.y + (tabRect.height - iconHeight) / 2,
iconWidth,
iconHeight );
} else {
return new Rectangle(
tabRect.x + (tabRect.width - iconWidth) / 2,
tabRect.y + tabRect.height - (tabInsets.bottom / 3 * 2) - iconHeight,
iconWidth,
iconHeight );
}
}
private void updateArrowButtons() {
if( !scrollableTabLayoutEnabled() || !_tabPane.isTabShown() )
return;
Insets insets = _tabPane.getInsets();
int tabPlacement = _tabPane.getTabPlacement();
Insets tabAreaInsets = getTabAreaInsets( tabPlacement );
Dimension tsize = isTabTrailingComponentVisible() ? _tabTrailingComponent.getSize() : new Dimension();
if( tabPlacement == TOP || tabPlacement == BOTTOM ) {
// for BOTTOM tab placement, _maxTabHeight is not correct if having tall leading/trailing component
int maxTabHeight = (tabPlacement == BOTTOM)
? calculateMaxTabHeight( tabPlacement )
: _maxTabHeight;
// button bounds
boolean leftToRight = isLeftToRight();
int x = leftToRight
? _tabPane.getWidth() - insets.right - tsize.width
: insets.left + tsize.width;
int y = _tabScroller.viewport.getY();
int h = maxTabHeight;
if( tabPlacement == TOP ) {
// if leading or trailing component is taller than tab area then
// _tabScroller.viewport has same height as leading/trailing component
// but tabs are painted smaller
y += (_tabScroller.viewport.getHeight() - h - tabAreaInsets.bottom);
} else
y += tabAreaInsets.top;
// layout buttons
if( !isShowCloseButtonOnTab() )
x = layoutButtonHorizontal( _tabScroller.closeButton, 16, x, y, h, leftToRight );
x = layoutButtonHorizontal( _tabScroller.listButton, 24, x, y, h, leftToRight );
x = layoutButtonHorizontal( _tabScroller.scrollForwardButton, 16, x, y, h, leftToRight );
x = layoutButtonHorizontal( _tabScroller.scrollBackwardButton, 16, x, y, h, leftToRight );
// layout tab area
Rectangle r = _tabScroller.viewport.getBounds();
if( leftToRight )
_tabScroller.viewport.setSize( x - r.x, r.height );
else
_tabScroller.viewport.setBounds( x, r.y, r.width - (x - r.x), r.height );
} else { // LEFT and RIGHT tab placement
// for RIGHT tab placement, _maxTabWidth is not correct if having wide leading/trailing component
int maxTabWidth = (tabPlacement == RIGHT)
? calculateMaxTabWidth( tabPlacement )
: _maxTabWidth;
// button bounds
int x = _tabScroller.viewport.getX();
int y = _tabPane.getHeight() - insets.bottom - tsize.height;
int w = maxTabWidth;
if( tabPlacement == LEFT ) {
// if leading or trailing component is wider than tab area then
// _tabScroller.viewport has same width as leading/trailing component
// but tabs are painted smaller
x += (_tabScroller.viewport.getWidth() - w - tabAreaInsets.right);
} else
x += tabAreaInsets.left;
// layout buttons
if( !isShowCloseButtonOnTab() )
y = layoutButtonVertical( _tabScroller.closeButton, 16, x, y, w );
y = layoutButtonVertical( _tabScroller.listButton, 24, x, y, w );
y = layoutButtonVertical( _tabScroller.scrollForwardButton, 16, x, y, w );
y = layoutButtonVertical( _tabScroller.scrollBackwardButton, 16, x, y, w );
// layout tab area
Rectangle r = _tabScroller.viewport.getBounds();
_tabScroller.viewport.setSize( r.width, y - r.y );
}
}
private int layoutButtonHorizontal( JButton button, int wu, int x, int y, int h, boolean leftToRight ) {
if( button.isVisible() ) {
int w = scale( wu );
if( leftToRight )
x -= w;
button.setBounds( x, y, w, h );
if( !leftToRight )
x += w;
}
return x;
}
private int layoutButtonVertical( JButton button, int hu, int x, int y, int w ) {
if( button.isVisible() ) {
int h = scale( hu );
y -= h;
button.setBounds( x, y, w, h );
}
return y;
}
}
//---- class FlatJideTabCloseIcon -----------------------------------------
protected class FlatJideTabCloseIcon
extends FlatTabbedPaneCloseIcon
{
@Override
public void paintIcon( Component c, Graphics g, int x, int y ) {
NoFocusButton button = (NoFocusButton) c;
if( _tabPane.isShowCloseButtonOnMouseOver() && !button.isMouseOver() ) {
Object property = _tabPane.getClientProperty( "JideTabbedPane.mouseOverTabIndex" );
if( property instanceof Integer && button.getIndex() >= 0 && (Integer) property != button.getIndex() )
return;
}
super.paintIcon( c, g, x, y );
}
}
//---- class FlatJideTabAreaArrowIcon -------------------------------------
protected class FlatJideTabAreaArrowIcon
implements Icon
{
@Override
public void paintIcon( Component c, Graphics g, int x, int y ) {
NoFocusButton button = (NoFocusButton) c;
Object[] oldRenderingHints = FlatUIUtils.setRenderingHints( g );
// paint hover or pressed background
if( button.isEnabled() ) {
Color background = (buttonPressedBackground != null && button.isMousePressed())
? buttonPressedBackground
: (buttonHoverBackground != null && button.isMouseOver()
? buttonHoverBackground
: null);
if( background != null ) {
// rotate button insets
Insets insets = new Insets( 0, 0, 0, 0 );
rotateInsets( buttonInsets, insets, _tabPane.getTabPlacement() );
// fill background
g.setColor( FlatUIUtils.deriveColor( background, _tabPane.getBackground() ) );
FlatUIUtils.paintComponentBackground( (Graphics2D) g,
insets.left, insets.top,
button.getWidth() - insets.left - insets.right,
button.getHeight() - insets.top - insets.bottom,
0, scale( (float) buttonArc ) );
}
}
// arrow direction
int direction = -1;
switch( button.getType() ) {
case JideTabbedPane.BUTTON_WEST:
direction = isHorizontalTabPlacement()
? (isLeftToRight() ? WEST : EAST)
: NORTH;
break;
case JideTabbedPane.BUTTON_EAST:
direction = isHorizontalTabPlacement()
? (isLeftToRight() ? EAST : WEST)
: SOUTH;
break;
case JideTabbedPane.BUTTON_LIST:
switch( _tabPane.getTabPlacement() ) {
default:
case TOP: direction = SOUTH; break;
case BOTTOM: direction = NORTH; break;
case LEFT: direction = EAST; break;
case RIGHT: direction = WEST; break;
}
break;
}
// paint arrow
g.setColor( button.isEnabled() ? foreground : disabledForeground );
FlatUIUtils.paintArrow( (Graphics2D) g,
0, 0, button.getWidth(), button.getHeight(),
direction, FlatUIUtils.isChevron( arrowType ), 10, 0, 0 );
FlatUIUtils.resetRenderingHints( g, oldRenderingHints );
}
@Override
public int getIconWidth() {
return scale( 16 );
}
@Override
public int getIconHeight() {
return scale( 16 );
}
}
} }

View File

@@ -81,3 +81,8 @@ JideTabbedPane.tabAreaInsets = $TabbedPane.tabAreaInsets
JideTabbedPane.contentBorderInsets = 0,0,0,0 JideTabbedPane.contentBorderInsets = 0,0,0,0
JideTabbedPane.tabRunOverlay = $TabbedPane.tabRunOverlay JideTabbedPane.tabRunOverlay = $TabbedPane.tabRunOverlay
JideTabbedPane.shadow = $TabbedPane.shadow JideTabbedPane.shadow = $TabbedPane.shadow
JideTabbedPane.closeButtonLeftMargin = 0
JideTabbedPane.closeButtonRightMargin = 0
JideTabbedPane.fitStyleBoundSize = {integer}0
JideTabbedPane.fitStyleFirstTabMargin = 0

View File

@@ -489,7 +489,11 @@ JideSplitButtonUI com.formdev.flatlaf.jideoss.ui.FlatJideSplitButto
#---- JideTabbedPane ---- #---- JideTabbedPane ----
JideTabbedPane.background #3c3f41 javax.swing.plaf.ColorUIResource [UI] JideTabbedPane.background #3c3f41 javax.swing.plaf.ColorUIResource [UI]
JideTabbedPane.closeButtonLeftMargin 0
JideTabbedPane.closeButtonRightMargin 0
JideTabbedPane.contentBorderInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] JideTabbedPane.contentBorderInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI]
JideTabbedPane.fitStyleBoundSize 0
JideTabbedPane.fitStyleFirstTabMargin 0
JideTabbedPane.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI] JideTabbedPane.foreground #bbbbbb javax.swing.plaf.ColorUIResource [UI]
JideTabbedPane.shadow #3c3f41 javax.swing.plaf.ColorUIResource [UI] JideTabbedPane.shadow #3c3f41 javax.swing.plaf.ColorUIResource [UI]
JideTabbedPane.tabAreaBackground #3c3f41 javax.swing.plaf.ColorUIResource [UI] JideTabbedPane.tabAreaBackground #3c3f41 javax.swing.plaf.ColorUIResource [UI]

View File

@@ -494,7 +494,11 @@ JideSplitButtonUI com.formdev.flatlaf.jideoss.ui.FlatJideSplitButto
#---- JideTabbedPane ---- #---- JideTabbedPane ----
JideTabbedPane.background #f2f2f2 javax.swing.plaf.ColorUIResource [UI] JideTabbedPane.background #f2f2f2 javax.swing.plaf.ColorUIResource [UI]
JideTabbedPane.closeButtonLeftMargin 0
JideTabbedPane.closeButtonRightMargin 0
JideTabbedPane.contentBorderInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] JideTabbedPane.contentBorderInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI]
JideTabbedPane.fitStyleBoundSize 0
JideTabbedPane.fitStyleFirstTabMargin 0
JideTabbedPane.foreground #000000 javax.swing.plaf.ColorUIResource [UI] JideTabbedPane.foreground #000000 javax.swing.plaf.ColorUIResource [UI]
JideTabbedPane.shadow #f2f2f2 javax.swing.plaf.ColorUIResource [UI] JideTabbedPane.shadow #f2f2f2 javax.swing.plaf.ColorUIResource [UI]
JideTabbedPane.tabAreaBackground #f2f2f2 javax.swing.plaf.ColorUIResource [UI] JideTabbedPane.tabAreaBackground #f2f2f2 javax.swing.plaf.ColorUIResource [UI]

View File

@@ -485,7 +485,11 @@ JideSplitButtonUI com.formdev.flatlaf.jideoss.ui.FlatJideSplitButto
#---- JideTabbedPane ---- #---- JideTabbedPane ----
JideTabbedPane.background #ccffcc javax.swing.plaf.ColorUIResource [UI] JideTabbedPane.background #ccffcc javax.swing.plaf.ColorUIResource [UI]
JideTabbedPane.closeButtonLeftMargin 0
JideTabbedPane.closeButtonRightMargin 0
JideTabbedPane.contentBorderInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI] JideTabbedPane.contentBorderInsets 0,0,0,0 javax.swing.plaf.InsetsUIResource [UI]
JideTabbedPane.fitStyleBoundSize 0
JideTabbedPane.fitStyleFirstTabMargin 0
JideTabbedPane.foreground #ff0000 javax.swing.plaf.ColorUIResource [UI] JideTabbedPane.foreground #ff0000 javax.swing.plaf.ColorUIResource [UI]
JideTabbedPane.shadow #ccffcc javax.swing.plaf.ColorUIResource [UI] JideTabbedPane.shadow #ccffcc javax.swing.plaf.ColorUIResource [UI]
JideTabbedPane.tabAreaBackground #ccffcc javax.swing.plaf.ColorUIResource [UI] JideTabbedPane.tabAreaBackground #ccffcc javax.swing.plaf.ColorUIResource [UI]

View File

@@ -108,12 +108,10 @@
+ JideTabbedPane.buttonMargin 5 + JideTabbedPane.buttonMargin 5
+ JideTabbedPane.buttonSize 18 + JideTabbedPane.buttonSize 18
+ JideTabbedPane.closeButtonAlignment 11 + JideTabbedPane.closeButtonAlignment 11
+ JideTabbedPane.closeButtonLeftMargin 2
+ JideTabbedPane.closeButtonMargin 2 + JideTabbedPane.closeButtonMargin 2
+ JideTabbedPane.closeButtonMarginHorizonal 3 + JideTabbedPane.closeButtonMarginHorizonal 3
+ JideTabbedPane.closeButtonMarginSize 6 + JideTabbedPane.closeButtonMarginSize 6
+ JideTabbedPane.closeButtonMarginVertical 3 + JideTabbedPane.closeButtonMarginVertical 3
+ JideTabbedPane.closeButtonRightMargin 2
+ JideTabbedPane.compressedStyleCloseButtonMarginHorizontal 0 + JideTabbedPane.compressedStyleCloseButtonMarginHorizontal 0
+ JideTabbedPane.compressedStyleCloseButtonMarginVertical 0 + JideTabbedPane.compressedStyleCloseButtonMarginVertical 0
+ JideTabbedPane.compressedStyleIconMargin 12 + JideTabbedPane.compressedStyleIconMargin 12
@@ -123,8 +121,6 @@
+ JideTabbedPane.defaultTabBorderShadowColor #736d63 javax.swing.plaf.ColorUIResource [UI] + JideTabbedPane.defaultTabBorderShadowColor #736d63 javax.swing.plaf.ColorUIResource [UI]
+ JideTabbedPane.defaultTabColorTheme 3 + JideTabbedPane.defaultTabColorTheme 3
+ JideTabbedPane.defaultTabShape 2 + JideTabbedPane.defaultTabShape 2
+ JideTabbedPane.fitStyleBoundSize 8
+ JideTabbedPane.fitStyleFirstTabMargin 4
+ JideTabbedPane.fitStyleIconMinWidth 24 + JideTabbedPane.fitStyleIconMinWidth 24
+ JideTabbedPane.fitStyleTextMinWidth 16 + JideTabbedPane.fitStyleTextMinWidth 16
+ JideTabbedPane.fixedStyleRectSize 60 + JideTabbedPane.fixedStyleRectSize 60

View File

@@ -108,12 +108,10 @@
+ JideTabbedPane.buttonMargin 5 + JideTabbedPane.buttonMargin 5
+ JideTabbedPane.buttonSize 18 + JideTabbedPane.buttonSize 18
+ JideTabbedPane.closeButtonAlignment 11 + JideTabbedPane.closeButtonAlignment 11
+ JideTabbedPane.closeButtonLeftMargin 2
+ JideTabbedPane.closeButtonMargin 2 + JideTabbedPane.closeButtonMargin 2
+ JideTabbedPane.closeButtonMarginHorizonal 3 + JideTabbedPane.closeButtonMarginHorizonal 3
+ JideTabbedPane.closeButtonMarginSize 6 + JideTabbedPane.closeButtonMarginSize 6
+ JideTabbedPane.closeButtonMarginVertical 3 + JideTabbedPane.closeButtonMarginVertical 3
+ JideTabbedPane.closeButtonRightMargin 2
+ JideTabbedPane.compressedStyleCloseButtonMarginHorizontal 0 + JideTabbedPane.compressedStyleCloseButtonMarginHorizontal 0
+ JideTabbedPane.compressedStyleCloseButtonMarginVertical 0 + JideTabbedPane.compressedStyleCloseButtonMarginVertical 0
+ JideTabbedPane.compressedStyleIconMargin 12 + JideTabbedPane.compressedStyleIconMargin 12
@@ -123,8 +121,6 @@
+ JideTabbedPane.defaultTabBorderShadowColor #736d63 javax.swing.plaf.ColorUIResource [UI] + JideTabbedPane.defaultTabBorderShadowColor #736d63 javax.swing.plaf.ColorUIResource [UI]
+ JideTabbedPane.defaultTabColorTheme 3 + JideTabbedPane.defaultTabColorTheme 3
+ JideTabbedPane.defaultTabShape 2 + JideTabbedPane.defaultTabShape 2
+ JideTabbedPane.fitStyleBoundSize 8
+ JideTabbedPane.fitStyleFirstTabMargin 4
+ JideTabbedPane.fitStyleIconMinWidth 24 + JideTabbedPane.fitStyleIconMinWidth 24
+ JideTabbedPane.fitStyleTextMinWidth 16 + JideTabbedPane.fitStyleTextMinWidth 16
+ JideTabbedPane.fixedStyleRectSize 60 + JideTabbedPane.fixedStyleRectSize 60

View File

@@ -16,12 +16,15 @@
package com.formdev.flatlaf.testing.jideoss; package com.formdev.flatlaf.testing.jideoss;
import static com.formdev.flatlaf.FlatClientProperties.TABBED_PANE_HAS_FULL_BORDER;
import java.awt.*; import java.awt.*;
import javax.swing.*; import javax.swing.*;
import javax.swing.border.*; import javax.swing.border.*;
import com.formdev.flatlaf.FlatClientProperties;
import com.formdev.flatlaf.FlatLaf;
import com.formdev.flatlaf.icons.FlatInternalFrameCloseIcon;
import com.formdev.flatlaf.testing.*; import com.formdev.flatlaf.testing.*;
import com.formdev.flatlaf.testing.FlatTestFrame; import com.formdev.flatlaf.testing.FlatTestFrame;
import com.formdev.flatlaf.util.ScaledImageIcon;
import com.jgoodies.forms.layout.*; import com.jgoodies.forms.layout.*;
import com.jidesoft.swing.*; import com.jidesoft.swing.*;
import net.miginfocom.swing.*; import net.miginfocom.swing.*;
@@ -35,49 +38,356 @@ public class FlatJideOssContainerTest
public static void main( String[] args ) { public static void main( String[] args ) {
SwingUtilities.invokeLater( () -> { SwingUtilities.invokeLater( () -> {
FlatTestFrame frame = FlatTestFrame.create( args, "FlatJideOssContainerTest" ); FlatTestFrame frame = FlatTestFrame.create( args, "FlatJideOssContainerTest" );
frame.useApplyComponentOrientation = true;
frame.showFrame( FlatJideOssContainerTest::new ); frame.showFrame( FlatJideOssContainerTest::new );
} ); } );
} }
FlatJideOssContainerTest() { FlatJideOssContainerTest() {
initComponents(); initComponents();
tabPlacementField.init( TabPlacement.class, true );
tabAlignmentField.init( JideTabAlignment.class, false );
tabResizeModeField.init( JideTabResizeMode.class, true );
tabCountChanged();
tabsClosableCheckBox.setSelected( true );
tabsClosableChanged();
tabScrollCheckBox.setSelected( true );
tabScrollChanged();
} }
private void tabScrollChanged() { private void tabScrollChanged() {
// JideTabbedPane supports tab closing only in scroll layout
// --> turn of if necessary to avoid exceptions in BasicJideTabbedPaneUI
tabsClosableChanged();
int tabLayoutPolicy = tabScrollCheckBox.isSelected() ? JTabbedPane.SCROLL_TAB_LAYOUT : JTabbedPane.WRAP_TAB_LAYOUT; int tabLayoutPolicy = tabScrollCheckBox.isSelected() ? JTabbedPane.SCROLL_TAB_LAYOUT : JTabbedPane.WRAP_TAB_LAYOUT;
tabbedPane1.setTabLayoutPolicy( tabLayoutPolicy ); for( JTabbedPane tabbedPane : allTabbedPanes )
tabbedPane2.setTabLayoutPolicy( tabLayoutPolicy ); tabbedPane.setTabLayoutPolicy( tabLayoutPolicy );
tabbedPane3.setTabLayoutPolicy( tabLayoutPolicy );
tabbedPane4.setTabLayoutPolicy( tabLayoutPolicy ); int tabCount = (Integer) tabCountSpinner.getValue();
if( tabLayoutPolicy == JTabbedPane.SCROLL_TAB_LAYOUT && tabCount == 4 )
tabCountSpinner.setValue( 8 );
else if( tabLayoutPolicy == JTabbedPane.WRAP_TAB_LAYOUT && tabCount == 8 )
tabCountSpinner.setValue( 4 );
}
private void showTabSeparatorsChanged() {
Boolean showTabSeparators = showTabSeparatorsCheckBox.isSelected() ? true : null;
putTabbedPanesClientProperty( FlatClientProperties.TABBED_PANE_SHOW_TAB_SEPARATORS, showTabSeparators );
}
private void hideTabAreaWithOneTabChanged() {
boolean hideTabAreaWithOneTab = hideTabAreaWithOneTabCheckBox.isSelected();
for( JideTabbedPane tabbedPane : allTabbedPanes )
tabbedPane.setHideOneTab( hideTabAreaWithOneTab );
} }
private void hasFullBorderChanged() { private void hasFullBorderChanged() {
Boolean hasFullBorder = hasFullBorderCheckBox.isSelected() ? true : null; Boolean hasFullBorder = hasFullBorderCheckBox.isSelected() ? true : null;
tabbedPane1.putClientProperty( TABBED_PANE_HAS_FULL_BORDER, hasFullBorder ); putTabbedPanesClientProperty( FlatClientProperties.TABBED_PANE_HAS_FULL_BORDER, hasFullBorder );
tabbedPane2.putClientProperty( TABBED_PANE_HAS_FULL_BORDER, hasFullBorder );
tabbedPane3.putClientProperty( TABBED_PANE_HAS_FULL_BORDER, hasFullBorder );
tabbedPane4.putClientProperty( TABBED_PANE_HAS_FULL_BORDER, hasFullBorder );
} }
private void moreTabsChanged() { private void putTabbedPanesClientProperty( String key, Object value ) {
boolean moreTabs = moreTabsCheckBox.isSelected(); for( JTabbedPane tabbedPane : allTabbedPanes )
addRemoveMoreTabs( tabbedPane1, moreTabs ); tabbedPane.putClientProperty( key, value );
addRemoveMoreTabs( tabbedPane2, moreTabs );
addRemoveMoreTabs( tabbedPane3, moreTabs );
addRemoveMoreTabs( tabbedPane4, moreTabs );
} }
private void addRemoveMoreTabs( JTabbedPane tabbedPane, boolean add ) { private void tabCountChanged() {
if( add ) { for( JideTabbedPane tabbedPane : allTabbedPanes )
tabbedPane.addTab( "Tab 4", new JLabel( "tab 4" ) ); tabCountChanged( tabbedPane );
tabbedPane.addTab( "Tab 5", new JLabel( "tab 5" ) ); }
} else {
int tabCount = tabbedPane.getTabCount(); private void tabCountChanged( JideTabbedPane tabbedPane ) {
if( tabCount > 3 ) { int oldTabCount = tabbedPane.getTabCount();
for( int i = 0; i < 2; i++ ) int newTabCount = (Integer) tabCountSpinner.getValue();
if( newTabCount > oldTabCount ) {
for( int i = oldTabCount + 1; i <= newTabCount; i++ )
addTab( tabbedPane );
} else if( newTabCount < oldTabCount ) {
while( tabbedPane.getTabCount() > newTabCount )
tabbedPane.removeTabAt( tabbedPane.getTabCount() - 1 ); tabbedPane.removeTabAt( tabbedPane.getTabCount() - 1 );
} }
customTabsChanged( tabbedPane );
tabBackForegroundChanged( tabbedPane );
setTabIcons( tabbedPane );
} }
private void addTab( JideTabbedPane tabbedPane ) {
switch( tabbedPane.getTabCount() ) {
case 0:
tabbedPane.addTab( "Tab 1", null, new Panel1(), "First tab." );
break;
case 1:
JComponent tab2 = new Panel2();
tab2.setBorder( new LineBorder( Color.magenta ) );
tabbedPane.addTab( "Second Tab", null, tab2, "This is the second tab." );
break;
case 2:
tabbedPane.addTab( "Disabled", createTab( "tab content 3" ) );
tabbedPane.setEnabledAt( 2, false );
tabbedPane.setToolTipTextAt( 2, "Disabled tab." );
break;
case 3:
tabbedPane.addTab( "Tab 4", new JLabel( "non-opaque content", SwingConstants.CENTER ) );
break;
default:
int index = tabbedPane.getTabCount() + 1;
tabbedPane.addTab( "Tab " + index, createTab( "tab content " + index ) );
break;
}
}
private JComponent createTab( String text ) {
JLabel label = new JLabel( text );
label.setHorizontalAlignment( SwingConstants.CENTER );
JPanel tab = new JPanel( new BorderLayout() );
tab.add( label, BorderLayout.CENTER );
return tab;
}
private void tabIconsChanged() {
for( JTabbedPane tabbedPane : allTabbedPanes )
setTabIcons( tabbedPane );
tabIconSizeSpinner.setEnabled( tabIconsCheckBox.isSelected() );
}
private void setTabIcons( JTabbedPane tabbedPane ) {
boolean showTabIcons = tabIconsCheckBox.isSelected();
Object iconSize = tabIconSizeSpinner.getValue();
Icon icon = null;
Icon disabledIcon = null;
if( showTabIcons ) {
ImageIcon imageIcon = new ImageIcon( getClass().getResource( "/com/formdev/flatlaf/testing/test" + iconSize + ".png" ) );
icon = new ScaledImageIcon( imageIcon );
disabledIcon = UIManager.getLookAndFeel().getDisabledIcon( tabbedPane, imageIcon );
if( disabledIcon instanceof ImageIcon )
disabledIcon = new ScaledImageIcon( (ImageIcon) disabledIcon );
}
int tabCount = tabbedPane.getTabCount();
for( int i = 0; i < tabCount; i++ ) {
tabbedPane.setIconAt( i, icon );
tabbedPane.setDisabledIconAt( i, disabledIcon );
}
}
private void customBorderChanged() {
Border border = customBorderCheckBox.isSelected()
? new MatteBorder( 10, 20, 25, 35, Color.green )
: null;
for( JTabbedPane tabbedPane : allTabbedPanes )
tabbedPane.setBorder( border );
}
private void customTabsChanged() {
for( JTabbedPane tabbedPane : allTabbedPanes )
customTabsChanged( tabbedPane );
}
private void customTabsChanged( JTabbedPane tabbedPane ) {
boolean customTabs = customTabsCheckBox.isSelected();
int tabCount = tabbedPane.getTabCount();
if( tabCount > 1 )
tabbedPane.setTabComponentAt( 1, customTabs ? new JButton( tabbedPane.getTitleAt( 1 ) ) : null );
if( tabCount > 3 )
tabbedPane.setTabComponentAt( 3, customTabs ? createCustomTab( tabbedPane.getTitleAt( 3 ) ) : null );
if( tabCount > 5 )
tabbedPane.setTabComponentAt( 5, customTabs ? new JCheckBox( tabbedPane.getTitleAt( 5 ) ) : null );
}
private Component createCustomTab( String tabTitle ) {
JButton closeButton;
if( UIManager.getLookAndFeel() instanceof FlatLaf ) {
closeButton = new JButton( new FlatInternalFrameCloseIcon() );
closeButton.setContentAreaFilled( false );
closeButton.setBorder( null );
} else
closeButton = new JButton( "x" );
JPanel tab = new JPanel( new BorderLayout( 5, 0 ) );
tab.setOpaque( false );
tab.add( closeButton, BorderLayout.EAST );
tab.add( new JLabel( tabTitle ), BorderLayout.CENTER );
return tab;
}
private void htmlTabsChanged() {
for( JTabbedPane tabbedPane : allTabbedPanes )
htmlTabsChanged( tabbedPane );
}
private void htmlTabsChanged( JTabbedPane tabbedPane ) {
boolean html = htmlTabsCheckBox.isSelected();
boolean multiLine = multiLineTabsCheckBox.isSelected();
String s = multiLine
? "<html><b>Bold</b> Tab<br>Second <i>Line</i> "
: (html ? "<html><b>Bold</b> Tab " : "Tab ");
int tabCount = tabbedPane.getTabCount();
if( tabCount > 0 )
tabbedPane.setTitleAt( 0, s + "1" );
if( tabCount > 3 )
tabbedPane.setTitleAt( 3, s + "4" );
}
private void tabPlacementChanged() {
TabPlacement value = tabPlacementField.getSelectedValue();
int tabPlacement = (value != null) ? value.value : -1;
tabbedPane1.setTabPlacement( (tabPlacement >= 0) ? tabPlacement : SwingConstants.TOP );
tabbedPane2.setTabPlacement( (tabPlacement >= 0) ? tabPlacement : SwingConstants.BOTTOM );
tabbedPane3.setTabPlacement( (tabPlacement >= 0) ? tabPlacement : SwingConstants.LEFT );
tabbedPane4.setTabPlacement( (tabPlacement >= 0) ? tabPlacement : SwingConstants.RIGHT );
}
private void tabAlignmentChanged() {
JideTabAlignment value = tabAlignmentField.getSelectedValue();
for( JideTabbedPane tabbedPane : allTabbedPanes )
tabbedPane.setTabAlignment( value.value );
}
private void tabResizeModeChanged() {
JideTabResizeMode value = tabResizeModeField.getSelectedValue();
int resizeMode = (value != null) ? value.value : JideTabbedPane.RESIZE_MODE_DEFAULT;
for( JideTabbedPane tabbedPane : allTabbedPanes )
tabbedPane.setTabResizeMode( resizeMode );
}
private void tabBackForegroundChanged() {
for( JTabbedPane tabbedPane : allTabbedPanes )
tabBackForegroundChanged( tabbedPane );
}
private void tabBackForegroundChanged( JTabbedPane tabbedPane ) {
boolean enabled = tabBackForegroundCheckBox.isSelected();
int tabCount = tabbedPane.getTabCount();
if( tabCount > 0 )
tabbedPane.setBackgroundAt( 0, enabled ? Color.red : null );
if( tabCount > 1 )
tabbedPane.setForegroundAt( 1, enabled ? Color.red : null );
}
private void leadingComponentChanged() {
leadingTrailingComponentChanged( leadingComponentCheckBox.isSelected(), true, "L", 4 );
}
private void trailingComponentChanged() {
leadingTrailingComponentChanged( trailingComponentCheckBox.isSelected(), false, "Trailing", 12 );
}
private void leadingTrailingComponentChanged( boolean enabled, boolean leading, String text, int gap ) {
for( JideTabbedPane tabbedPane : allTabbedPanes ) {
JComponent c = null;
if( enabled ) {
c = new JLabel( text );
c.setOpaque( true );
c.setBackground( leading ? Color.cyan : Color.orange );
c.setBorder( new EmptyBorder( gap, gap, gap, gap ) );
if( leading && (tabbedPane.getTabPlacement() == SwingConstants.TOP || tabbedPane.getTabPlacement() == SwingConstants.BOTTOM) )
c.setPreferredSize( new Dimension( 20, 80 ) );
}
if( leading )
tabbedPane.setTabLeadingComponent( c );
else
tabbedPane.setTabTrailingComponent( c );
}
}
private void tabsClosableChanged() {
boolean closable = tabsClosableCheckBox.isSelected() && tabScrollCheckBox.isSelected();
boolean onTab = closable && showCloseButtonOnTabCheckBox.isSelected();
for( JideTabbedPane tabbedPane : allTabbedPanes ) {
tabbedPane.setShowCloseButtonOnTab( onTab );
tabbedPane.setShowCloseButton( closable );
}
}
private void secondTabClosableChanged() {
boolean closable = secondTabClosableCheckBox.isSelected();
for( JideTabbedPane tabbedPane : allTabbedPanes ) {
if( tabbedPane.getTabCount() > 1 )
tabbedPane.setTabClosableAt( 1, closable );
}
}
private void showCloseButtonOnSelectedTabChanged() {
boolean onSelected = showCloseButtonOnSelectedTabCheckBox.isSelected();
for( JideTabbedPane tabbedPane : allTabbedPanes ) {
tabbedPane.setShowCloseButtonOnSelectedTab( onSelected );
tabbedPane.revalidate();
tabbedPane.repaint();
}
}
private void showCloseButtonOnMouseOverChanged() {
boolean onMouseOver = showCloseButtonOnMouseOverCheckBox.isSelected();
for( JideTabbedPane tabbedPane : allTabbedPanes ) {
tabbedPane.setShowCloseButtonOnMouseOver( onMouseOver );
tabbedPane.revalidate();
tabbedPane.repaint();
}
}
private void tabAreaInsetsChanged() {
Insets insets = tabAreaInsetsCheckBox.isSelected() ? new Insets( 5, 5, 10, 10 ) : null;
for( JideTabbedPane tabbedPane : allTabbedPanes ) {
tabbedPane.setTabAreaInsets( insets );
tabbedPane.revalidate();
tabbedPane.repaint();
}
}
private void smallerInsetsChanged() {
Insets insets = smallerInsetsCheckBox.isSelected()
? new Insets( 2, 2, 2, 2 )
: UIManager.getInsets( "JideTabbedPane.tabInsets" );
for( JideTabbedPane tabbedPane : allTabbedPanes )
tabbedPane.setTabInsets( insets );
}
private void boldActiveTabChanged() {
boolean boldActiveTab = boldActiveTabCheckBox.isSelected();
for( JideTabbedPane tabbedPane : allTabbedPanes )
tabbedPane.setBoldActiveTab( boldActiveTab );
}
private void showTabButtonsChanged() {
boolean showTabButtons = showTabButtonsCheckBox.isSelected();
for( JideTabbedPane tabbedPane : allTabbedPanes )
tabbedPane.setShowTabButtons( showTabButtons );
}
private void showGripperChanged() {
boolean showGripper = showGripperCheckBox.isSelected();
for( JideTabbedPane tabbedPane : allTabbedPanes )
tabbedPane.setShowGripper( showGripper );
}
private void tabEditingAllowedChanged() {
boolean tabEditingAllowed = tabEditingAllowedCheckBox.isSelected();
for( JideTabbedPane tabbedPane : allTabbedPanes )
tabbedPane.setTabEditingAllowed( tabEditingAllowed );
} }
private void initComponents() { private void initComponents() {
@@ -85,29 +395,42 @@ public class FlatJideOssContainerTest
JPanel panel9 = new JPanel(); JPanel panel9 = new JPanel();
JLabel tabbedPaneLabel = new JLabel(); JLabel tabbedPaneLabel = new JLabel();
tabbedPane1 = new JideTabbedPane(); tabbedPane1 = new JideTabbedPane();
JPanel panel1 = new JPanel();
JLabel label1 = new JLabel();
JPanel panel2 = new JPanel();
JLabel label2 = new JLabel();
tabbedPane3 = new JideTabbedPane(); tabbedPane3 = new JideTabbedPane();
JPanel panel5 = new JPanel();
JLabel label5 = new JLabel();
JPanel panel6 = new JPanel();
JLabel label6 = new JLabel();
tabbedPane2 = new JideTabbedPane(); tabbedPane2 = new JideTabbedPane();
JPanel panel3 = new JPanel();
JLabel label3 = new JLabel();
JPanel panel4 = new JPanel();
JLabel label4 = new JLabel();
tabbedPane4 = new JideTabbedPane(); tabbedPane4 = new JideTabbedPane();
JPanel panel7 = new JPanel(); FlatTestFrame.NoRightToLeftPanel tabbedPaneControlPanel = new FlatTestFrame.NoRightToLeftPanel();
JLabel label7 = new JLabel();
JPanel panel8 = new JPanel();
JLabel label8 = new JLabel();
JPanel panel14 = new JPanel();
moreTabsCheckBox = new JCheckBox();
tabScrollCheckBox = new JCheckBox(); tabScrollCheckBox = new JCheckBox();
JLabel tabCountLabel = new JLabel();
tabCountSpinner = new JSpinner();
customTabsCheckBox = new JCheckBox();
htmlTabsCheckBox = new JCheckBox();
multiLineTabsCheckBox = new JCheckBox();
tabBackForegroundCheckBox = new JCheckBox();
tabIconsCheckBox = new JCheckBox();
tabIconSizeSpinner = new JSpinner();
tabsClosableCheckBox = new JCheckBox();
showCloseButtonOnTabCheckBox = new JCheckBox();
showCloseButtonOnSelectedTabCheckBox = new JCheckBox();
JLabel tabPlacementLabel = new JLabel();
tabPlacementField = new FlatTestEnumComboBox<>();
secondTabClosableCheckBox = new JCheckBox();
showCloseButtonOnMouseOverCheckBox = new JCheckBox();
JLabel tabAreaAlignmentLabel = new JLabel();
tabAlignmentField = new FlatTestEnumComboBox<>();
JLabel tabResizeModeLabel = new JLabel();
tabResizeModeField = new FlatTestEnumComboBox<>();
leadingComponentCheckBox = new JCheckBox();
customBorderCheckBox = new JCheckBox();
tabAreaInsetsCheckBox = new JCheckBox();
trailingComponentCheckBox = new JCheckBox();
hasFullBorderCheckBox = new JCheckBox(); hasFullBorderCheckBox = new JCheckBox();
boldActiveTabCheckBox = new JCheckBox();
showTabButtonsCheckBox = new JCheckBox();
smallerInsetsCheckBox = new JCheckBox();
showGripperCheckBox = new JCheckBox();
showTabSeparatorsCheckBox = new JCheckBox();
tabEditingAllowedCheckBox = new JCheckBox();
hideTabAreaWithOneTabCheckBox = new JCheckBox();
CellConstraints cc = new CellConstraints(); CellConstraints cc = new CellConstraints();
//======== this ======== //======== this ========
@@ -122,156 +445,217 @@ public class FlatJideOssContainerTest
{ {
panel9.setOpaque(false); panel9.setOpaque(false);
panel9.setLayout(new FormLayout( panel9.setLayout(new FormLayout(
"70dlu:grow, $lcgap, 70dlu:grow", "70dlu:grow, $ugap, 70dlu:grow",
"pref, 2*($lgap, fill:70dlu:grow), $lgap, pref")); "pref, $lgap, fill:80dlu:grow, $ugap, fill:80dlu:grow, $pgap, pref"));
//---- tabbedPaneLabel ---- //---- tabbedPaneLabel ----
tabbedPaneLabel.setText("JideTabbedPane:"); tabbedPaneLabel.setText("JideTabbedPane:");
panel9.add(tabbedPaneLabel, cc.xy(1, 1)); panel9.add(tabbedPaneLabel, cc.xy(1, 1));
//======== tabbedPane1 ========
{
//======== panel1 ========
{
panel1.setLayout(new FlowLayout());
//---- label1 ----
label1.setText("TOP");
panel1.add(label1);
}
tabbedPane1.addTab("Tab 1", panel1);
//======== panel2 ========
{
panel2.setBorder(new LineBorder(Color.magenta));
panel2.setLayout(new FlowLayout());
}
tabbedPane1.addTab("Tab 2", panel2);
//---- label2 ----
label2.setText("text");
tabbedPane1.addTab("Tab 3", label2);
}
panel9.add(tabbedPane1, cc.xy(1, 3)); panel9.add(tabbedPane1, cc.xy(1, 3));
//======== tabbedPane3 ======== //======== tabbedPane3 ========
{ {
tabbedPane3.setTabPlacement(SwingConstants.LEFT); tabbedPane3.setTabPlacement(SwingConstants.LEFT);
//======== panel5 ========
{
panel5.setLayout(new FlowLayout());
//---- label5 ----
label5.setText("LEFT");
panel5.add(label5);
}
tabbedPane3.addTab("Tab 1", panel5);
//======== panel6 ========
{
panel6.setBorder(new LineBorder(Color.magenta));
panel6.setLayout(new FlowLayout());
}
tabbedPane3.addTab("Tab 2", panel6);
//---- label6 ----
label6.setText("text");
tabbedPane3.addTab("Tab 3", label6);
} }
panel9.add(tabbedPane3, cc.xy(3, 3)); panel9.add(tabbedPane3, cc.xy(3, 3));
//======== tabbedPane2 ======== //======== tabbedPane2 ========
{ {
tabbedPane2.setTabPlacement(SwingConstants.BOTTOM); tabbedPane2.setTabPlacement(SwingConstants.BOTTOM);
//======== panel3 ========
{
panel3.setLayout(new FlowLayout());
//---- label3 ----
label3.setText("BOTTOM");
panel3.add(label3);
}
tabbedPane2.addTab("Tab 1", panel3);
//======== panel4 ========
{
panel4.setBorder(new LineBorder(Color.magenta));
panel4.setLayout(new FlowLayout());
}
tabbedPane2.addTab("Tab 2", panel4);
tabbedPane2.setEnabledAt(1, false);
//---- label4 ----
label4.setText("text");
tabbedPane2.addTab("Tab 3", label4);
} }
panel9.add(tabbedPane2, cc.xy(1, 5)); panel9.add(tabbedPane2, cc.xy(1, 5));
//======== tabbedPane4 ======== //======== tabbedPane4 ========
{ {
tabbedPane4.setTabPlacement(SwingConstants.RIGHT); tabbedPane4.setTabPlacement(SwingConstants.RIGHT);
//======== panel7 ========
{
panel7.setLayout(new FlowLayout());
//---- label7 ----
label7.setText("RIGHT");
panel7.add(label7);
}
tabbedPane4.addTab("Tab 1", panel7);
//======== panel8 ========
{
panel8.setBorder(new LineBorder(Color.magenta));
panel8.setLayout(new FlowLayout());
}
tabbedPane4.addTab("Tab 2", panel8);
//---- label8 ----
label8.setText("text");
tabbedPane4.addTab("Tab 3", label8);
} }
panel9.add(tabbedPane4, cc.xy(3, 5)); panel9.add(tabbedPane4, cc.xy(3, 5));
//======== panel14 ======== //======== tabbedPaneControlPanel ========
{ {
panel14.setOpaque(false); tabbedPaneControlPanel.setOpaque(false);
panel14.setLayout(new MigLayout( tabbedPaneControlPanel.setLayout(new MigLayout(
"insets 0,hidemode 3", "insets 0,hidemode 3",
// columns // columns
"[]" + "[]" +
"[]" + "[fill]" +
"[]", "[]",
// rows // rows
"[center]")); "[center]" +
"[]" +
//---- moreTabsCheckBox ---- "[]" +
moreTabsCheckBox.setText("more tabs"); "[]" +
moreTabsCheckBox.setMnemonic('M'); "[]" +
moreTabsCheckBox.addActionListener(e -> moreTabsChanged()); "[]para" +
panel14.add(moreTabsCheckBox, "cell 0 0"); "[]" +
"[]para" +
"[]" +
"[]" +
"[]"));
//---- tabScrollCheckBox ---- //---- tabScrollCheckBox ----
tabScrollCheckBox.setText("tabLayoutPolicy = SCROLL"); tabScrollCheckBox.setText("Use scroll layout");
tabScrollCheckBox.setMnemonic('S'); tabScrollCheckBox.setMnemonic('S');
tabScrollCheckBox.setSelected(true);
tabScrollCheckBox.addActionListener(e -> tabScrollChanged()); tabScrollCheckBox.addActionListener(e -> tabScrollChanged());
panel14.add(tabScrollCheckBox, "cell 1 0,alignx left,growx 0"); tabbedPaneControlPanel.add(tabScrollCheckBox, "cell 0 0,alignx left,growx 0");
//---- tabCountLabel ----
tabCountLabel.setText("Tab count:");
tabbedPaneControlPanel.add(tabCountLabel, "cell 1 0");
//---- tabCountSpinner ----
tabCountSpinner.setModel(new SpinnerNumberModel(4, 0, null, 1));
tabCountSpinner.addChangeListener(e -> tabCountChanged());
tabbedPaneControlPanel.add(tabCountSpinner, "cell 1 0");
//---- customTabsCheckBox ----
customTabsCheckBox.setText("Custom tabs");
customTabsCheckBox.addActionListener(e -> customTabsChanged());
tabbedPaneControlPanel.add(customTabsCheckBox, "cell 2 0");
//---- htmlTabsCheckBox ----
htmlTabsCheckBox.setText("HTML");
htmlTabsCheckBox.addActionListener(e -> htmlTabsChanged());
tabbedPaneControlPanel.add(htmlTabsCheckBox, "cell 2 0");
//---- multiLineTabsCheckBox ----
multiLineTabsCheckBox.setText("multi-line");
multiLineTabsCheckBox.addActionListener(e -> htmlTabsChanged());
tabbedPaneControlPanel.add(multiLineTabsCheckBox, "cell 2 0");
//---- tabBackForegroundCheckBox ----
tabBackForegroundCheckBox.setText("Tab back/foreground");
tabBackForegroundCheckBox.addActionListener(e -> tabBackForegroundChanged());
tabbedPaneControlPanel.add(tabBackForegroundCheckBox, "cell 2 1");
//---- tabIconsCheckBox ----
tabIconsCheckBox.setText("Tab icons");
tabIconsCheckBox.addActionListener(e -> tabIconsChanged());
tabbedPaneControlPanel.add(tabIconsCheckBox, "cell 2 2");
//---- tabIconSizeSpinner ----
tabIconSizeSpinner.setModel(new SpinnerListModel(new String[] {"16", "24", "32", "48", "64"}));
tabIconSizeSpinner.setEnabled(false);
tabIconSizeSpinner.addChangeListener(e -> tabIconsChanged());
tabbedPaneControlPanel.add(tabIconSizeSpinner, "cell 2 2");
//---- tabsClosableCheckBox ----
tabsClosableCheckBox.setText("Tabs closable");
tabsClosableCheckBox.addActionListener(e -> tabsClosableChanged());
tabbedPaneControlPanel.add(tabsClosableCheckBox, "cell 2 3");
//---- showCloseButtonOnTabCheckBox ----
showCloseButtonOnTabCheckBox.setText("on tab");
showCloseButtonOnTabCheckBox.setSelected(true);
showCloseButtonOnTabCheckBox.addActionListener(e -> tabsClosableChanged());
tabbedPaneControlPanel.add(showCloseButtonOnTabCheckBox, "cell 2 3");
//---- showCloseButtonOnSelectedTabCheckBox ----
showCloseButtonOnSelectedTabCheckBox.setText("show on selected");
showCloseButtonOnSelectedTabCheckBox.addActionListener(e -> showCloseButtonOnSelectedTabChanged());
tabbedPaneControlPanel.add(showCloseButtonOnSelectedTabCheckBox, "cell 2 3");
//---- tabPlacementLabel ----
tabPlacementLabel.setText("Tab placement:");
tabbedPaneControlPanel.add(tabPlacementLabel, "cell 0 4");
//---- tabPlacementField ----
tabPlacementField.addActionListener(e -> tabPlacementChanged());
tabbedPaneControlPanel.add(tabPlacementField, "cell 1 4");
//---- secondTabClosableCheckBox ----
secondTabClosableCheckBox.setText("Second Tab closable");
secondTabClosableCheckBox.setSelected(true);
secondTabClosableCheckBox.addActionListener(e -> secondTabClosableChanged());
tabbedPaneControlPanel.add(secondTabClosableCheckBox, "cell 2 4");
//---- showCloseButtonOnMouseOverCheckBox ----
showCloseButtonOnMouseOverCheckBox.setText("show on hover");
showCloseButtonOnMouseOverCheckBox.addActionListener(e -> showCloseButtonOnMouseOverChanged());
tabbedPaneControlPanel.add(showCloseButtonOnMouseOverCheckBox, "cell 2 4");
//---- tabAreaAlignmentLabel ----
tabAreaAlignmentLabel.setText("Tab alignment:");
tabbedPaneControlPanel.add(tabAreaAlignmentLabel, "cell 0 5");
//---- tabAlignmentField ----
tabAlignmentField.addActionListener(e -> tabAlignmentChanged());
tabbedPaneControlPanel.add(tabAlignmentField, "cell 1 5");
//---- tabResizeModeLabel ----
tabResizeModeLabel.setText("Tab resize mode:");
tabbedPaneControlPanel.add(tabResizeModeLabel, "cell 2 5");
//---- tabResizeModeField ----
tabResizeModeField.addActionListener(e -> tabResizeModeChanged());
tabbedPaneControlPanel.add(tabResizeModeField, "cell 2 5");
//---- leadingComponentCheckBox ----
leadingComponentCheckBox.setText("Leading component");
leadingComponentCheckBox.addActionListener(e -> leadingComponentChanged());
tabbedPaneControlPanel.add(leadingComponentCheckBox, "cell 0 6");
//---- customBorderCheckBox ----
customBorderCheckBox.setText("Custom border");
customBorderCheckBox.addActionListener(e -> customBorderChanged());
tabbedPaneControlPanel.add(customBorderCheckBox, "cell 1 6");
//---- tabAreaInsetsCheckBox ----
tabAreaInsetsCheckBox.setText("Tab area insets (5,5,10,10)");
tabAreaInsetsCheckBox.addActionListener(e -> tabAreaInsetsChanged());
tabbedPaneControlPanel.add(tabAreaInsetsCheckBox, "cell 2 6");
//---- trailingComponentCheckBox ----
trailingComponentCheckBox.setText("Trailing component");
trailingComponentCheckBox.addActionListener(e -> trailingComponentChanged());
tabbedPaneControlPanel.add(trailingComponentCheckBox, "cell 0 7");
//---- hasFullBorderCheckBox ---- //---- hasFullBorderCheckBox ----
hasFullBorderCheckBox.setText("JTabbedPane.hasFullBorder"); hasFullBorderCheckBox.setText("Show content border");
hasFullBorderCheckBox.setMnemonic('F');
hasFullBorderCheckBox.addActionListener(e -> hasFullBorderChanged()); hasFullBorderCheckBox.addActionListener(e -> hasFullBorderChanged());
panel14.add(hasFullBorderCheckBox, "cell 2 0,alignx left,growx 0"); tabbedPaneControlPanel.add(hasFullBorderCheckBox, "cell 1 7,alignx left,growx 0");
//---- boldActiveTabCheckBox ----
boldActiveTabCheckBox.setText("Bold active tab");
boldActiveTabCheckBox.addActionListener(e -> boldActiveTabChanged());
tabbedPaneControlPanel.add(boldActiveTabCheckBox, "cell 0 8");
//---- showTabButtonsCheckBox ----
showTabButtonsCheckBox.setText("Show tab buttons always");
showTabButtonsCheckBox.addActionListener(e -> showTabButtonsChanged());
tabbedPaneControlPanel.add(showTabButtonsCheckBox, "cell 1 8");
//---- smallerInsetsCheckBox ----
smallerInsetsCheckBox.setText("Smaller tab insets (2,2,2,2)");
smallerInsetsCheckBox.addActionListener(e -> smallerInsetsChanged());
tabbedPaneControlPanel.add(smallerInsetsCheckBox, "cell 2 8");
//---- showGripperCheckBox ----
showGripperCheckBox.setText("Show gripper");
showGripperCheckBox.addActionListener(e -> showGripperChanged());
tabbedPaneControlPanel.add(showGripperCheckBox, "cell 0 9");
//---- showTabSeparatorsCheckBox ----
showTabSeparatorsCheckBox.setText("Show tab separators");
showTabSeparatorsCheckBox.addActionListener(e -> showTabSeparatorsChanged());
tabbedPaneControlPanel.add(showTabSeparatorsCheckBox, "cell 1 9");
//---- tabEditingAllowedCheckBox ----
tabEditingAllowedCheckBox.setText("Tab editing allowed");
tabEditingAllowedCheckBox.addActionListener(e -> tabEditingAllowedChanged());
tabbedPaneControlPanel.add(tabEditingAllowedCheckBox, "cell 0 10");
//---- hideTabAreaWithOneTabCheckBox ----
hideTabAreaWithOneTabCheckBox.setText("Hide tab area with one tab");
hideTabAreaWithOneTabCheckBox.addActionListener(e -> hideTabAreaWithOneTabChanged());
tabbedPaneControlPanel.add(hideTabAreaWithOneTabCheckBox, "cell 1 10");
} }
panel9.add(panel14, cc.xywh(1, 7, 3, 1)); panel9.add(tabbedPaneControlPanel, cc.xywh(1, 7, 3, 1));
} }
add(panel9, "cell 0 0"); add(panel9, "cell 0 0");
// JFormDesigner - End of component initialization //GEN-END:initComponents // JFormDesigner - End of component initialization //GEN-END:initComponents
allTabbedPanes = new JideTabbedPane[] { tabbedPane1, tabbedPane2, tabbedPane3, tabbedPane4 };
} }
// JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables // JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables
@@ -279,8 +663,158 @@ public class FlatJideOssContainerTest
private JideTabbedPane tabbedPane3; private JideTabbedPane tabbedPane3;
private JideTabbedPane tabbedPane2; private JideTabbedPane tabbedPane2;
private JideTabbedPane tabbedPane4; private JideTabbedPane tabbedPane4;
private JCheckBox moreTabsCheckBox;
private JCheckBox tabScrollCheckBox; private JCheckBox tabScrollCheckBox;
private JSpinner tabCountSpinner;
private JCheckBox customTabsCheckBox;
private JCheckBox htmlTabsCheckBox;
private JCheckBox multiLineTabsCheckBox;
private JCheckBox tabBackForegroundCheckBox;
private JCheckBox tabIconsCheckBox;
private JSpinner tabIconSizeSpinner;
private JCheckBox tabsClosableCheckBox;
private JCheckBox showCloseButtonOnTabCheckBox;
private JCheckBox showCloseButtonOnSelectedTabCheckBox;
private FlatTestEnumComboBox<TabPlacement> tabPlacementField;
private JCheckBox secondTabClosableCheckBox;
private JCheckBox showCloseButtonOnMouseOverCheckBox;
private FlatTestEnumComboBox<JideTabAlignment> tabAlignmentField;
private FlatTestEnumComboBox<JideTabResizeMode> tabResizeModeField;
private JCheckBox leadingComponentCheckBox;
private JCheckBox customBorderCheckBox;
private JCheckBox tabAreaInsetsCheckBox;
private JCheckBox trailingComponentCheckBox;
private JCheckBox hasFullBorderCheckBox; private JCheckBox hasFullBorderCheckBox;
private JCheckBox boldActiveTabCheckBox;
private JCheckBox showTabButtonsCheckBox;
private JCheckBox smallerInsetsCheckBox;
private JCheckBox showGripperCheckBox;
private JCheckBox showTabSeparatorsCheckBox;
private JCheckBox tabEditingAllowedCheckBox;
private JCheckBox hideTabAreaWithOneTabCheckBox;
// JFormDesigner - End of variables declaration //GEN-END:variables
private JideTabbedPane[] allTabbedPanes;
//---- enum TabPlacement --------------------------------------------------
enum TabPlacement {
top( SwingConstants.TOP ),
bottom( SwingConstants.BOTTOM ),
left( SwingConstants.LEFT ),
right( SwingConstants.RIGHT );
public final int value;
TabPlacement( int value ) {
this.value = value;
}
};
//---- enum JideTabAlignment ----------------------------------------------
enum JideTabAlignment {
leading( SwingConstants.LEADING ),
center( SwingConstants.CENTER );
public final int value;
JideTabAlignment( int value ) {
this.value = value;
}
};
//---- enum JideTabResizeMode ---------------------------------------------
enum JideTabResizeMode {
none( JideTabbedPane.RESIZE_MODE_NONE ),
fit( JideTabbedPane.RESIZE_MODE_FIT ),
fixed( JideTabbedPane.RESIZE_MODE_FIXED ),
compressed( JideTabbedPane.RESIZE_MODE_COMPRESSED );
public final int value;
JideTabResizeMode( int value ) {
this.value = value;
}
};
//---- class Tab1Panel ----------------------------------------------------
private static class Panel1
extends JPanel
{
private Panel1() {
initComponents();
}
private void initComponents() {
// JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents
JLabel label1 = new JLabel();
JTextField textField4 = new JTextField();
JButton button3 = new JButton();
//======== this ========
setLayout(new MigLayout(
"hidemode 3,align center center",
// columns
"[fill]" +
"[fill]" +
"[fill]",
// rows
"[fill]"));
//---- label1 ----
label1.setText("text");
add(label1, "cell 0 0");
//---- textField4 ----
textField4.setText("some text");
add(textField4, "cell 1 0");
//---- button3 ----
button3.setText("...");
add(button3, "cell 2 0");
// JFormDesigner - End of component initialization //GEN-END:initComponents
}
// JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables
// JFormDesigner - End of variables declaration //GEN-END:variables // JFormDesigner - End of variables declaration //GEN-END:variables
} }
//---- class Tab2Panel ----------------------------------------------------
private static class Panel2
extends JPanel
{
private Panel2() {
initComponents();
}
private void initComponents() {
// JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents
JTextField textField5 = new JTextField();
JButton button4 = new JButton();
//======== this ========
setLayout(new MigLayout(
"insets 0,hidemode 3,align center center",
// columns
"[fill]" +
"[fill]",
// rows
"[fill]"));
//---- textField5 ----
textField5.setText("more text");
add(textField5, "cell 0 0");
//---- button4 ----
button4.setText("...");
add(button4, "cell 1 0");
// JFormDesigner - End of component initialization //GEN-END:initComponents
}
// JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables
// JFormDesigner - End of variables declaration //GEN-END:variables
}
}

View File

@@ -1,4 +1,4 @@
JFDML JFormDesigner: "7.0.3.1.342" Java: "15" encoding: "UTF-8" JFDML JFormDesigner: "7.0.3.1.342" Java: "16" encoding: "UTF-8"
new FormModel { new FormModel {
contentType: "form/swing" contentType: "form/swing"
@@ -13,8 +13,8 @@ new FormModel {
} ) { } ) {
name: "this" name: "this"
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class com.jgoodies.forms.layout.FormLayout ) { add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class com.jgoodies.forms.layout.FormLayout ) {
"$columnSpecs": "70dlu:grow, labelcompgap, 70dlu:grow" "$columnSpecs": "70dlu:grow, unrelgap, 70dlu:grow"
"$rowSpecs": "pref, linegap, fill:70dlu:grow, linegap, fill:70dlu:grow, linegap, pref" "$rowSpecs": "pref, linegap, fill:80dlu:grow, unrelgap, fill:80dlu:grow, pargap, pref"
} ) { } ) {
name: "panel9" name: "panel9"
"opaque": false "opaque": false
@@ -29,27 +29,6 @@ new FormModel {
auxiliary() { auxiliary() {
"JavaCodeGenerator.variableLocal": false "JavaCodeGenerator.variableLocal": false
} }
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.FlowLayout ) ) {
name: "panel1"
add( new FormComponent( "javax.swing.JLabel" ) {
name: "label1"
"text": "TOP"
} )
}, new FormLayoutConstraints( null ) {
"title": "Tab 1"
} )
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.FlowLayout ) ) {
name: "panel2"
"border": &LineBorder0 new javax.swing.border.LineBorder( sfield java.awt.Color magenta, 1, false )
}, new FormLayoutConstraints( null ) {
"title": "Tab 2"
} )
add( new FormComponent( "javax.swing.JLabel" ) {
name: "label2"
"text": "text"
}, new FormLayoutConstraints( null ) {
"title": "Tab 3"
} )
}, new FormLayoutConstraints( class com.jgoodies.forms.layout.CellConstraints ) { }, new FormLayoutConstraints( class com.jgoodies.forms.layout.CellConstraints ) {
"gridX": 1 "gridX": 1
"gridY": 3 "gridY": 3
@@ -60,30 +39,9 @@ new FormModel {
auxiliary() { auxiliary() {
"JavaCodeGenerator.variableLocal": false "JavaCodeGenerator.variableLocal": false
} }
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.FlowLayout ) ) {
name: "panel5"
add( new FormComponent( "javax.swing.JLabel" ) {
name: "label5"
"text": "LEFT"
} )
}, new FormLayoutConstraints( null ) {
"title": "Tab 1"
} )
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.FlowLayout ) ) {
name: "panel6"
"border": #LineBorder0
}, new FormLayoutConstraints( null ) {
"title": "Tab 2"
} )
add( new FormComponent( "javax.swing.JLabel" ) {
name: "label6"
"text": "text"
}, new FormLayoutConstraints( null ) {
"title": "Tab 3"
} )
}, new FormLayoutConstraints( class com.jgoodies.forms.layout.CellConstraints ) { }, new FormLayoutConstraints( class com.jgoodies.forms.layout.CellConstraints ) {
"gridX": 3
"gridY": 3 "gridY": 3
"gridX": 3
} ) } )
add( new FormContainer( "com.jidesoft.swing.JideTabbedPane", new FormLayoutManager( class javax.swing.JTabbedPane ) ) { add( new FormContainer( "com.jidesoft.swing.JideTabbedPane", new FormLayoutManager( class javax.swing.JTabbedPane ) ) {
name: "tabbedPane2" name: "tabbedPane2"
@@ -91,28 +49,6 @@ new FormModel {
auxiliary() { auxiliary() {
"JavaCodeGenerator.variableLocal": false "JavaCodeGenerator.variableLocal": false
} }
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.FlowLayout ) ) {
name: "panel3"
add( new FormComponent( "javax.swing.JLabel" ) {
name: "label3"
"text": "BOTTOM"
} )
}, new FormLayoutConstraints( null ) {
"title": "Tab 1"
} )
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.FlowLayout ) ) {
name: "panel4"
"border": #LineBorder0
}, new FormLayoutConstraints( null ) {
"title": "Tab 2"
"enabled": false
} )
add( new FormComponent( "javax.swing.JLabel" ) {
name: "label4"
"text": "text"
}, new FormLayoutConstraints( null ) {
"title": "Tab 3"
} )
}, new FormLayoutConstraints( class com.jgoodies.forms.layout.CellConstraints ) { }, new FormLayoutConstraints( class com.jgoodies.forms.layout.CellConstraints ) {
"gridY": 5 "gridY": 5
} ) } )
@@ -122,71 +58,335 @@ new FormModel {
auxiliary() { auxiliary() {
"JavaCodeGenerator.variableLocal": false "JavaCodeGenerator.variableLocal": false
} }
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.FlowLayout ) ) {
name: "panel7"
add( new FormComponent( "javax.swing.JLabel" ) {
name: "label7"
"text": "RIGHT"
} )
}, new FormLayoutConstraints( null ) {
"title": "Tab 1"
} )
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class java.awt.FlowLayout ) ) {
name: "panel8"
"border": #LineBorder0
}, new FormLayoutConstraints( null ) {
"title": "Tab 2"
} )
add( new FormComponent( "javax.swing.JLabel" ) {
name: "label8"
"text": "text"
}, new FormLayoutConstraints( null ) {
"title": "Tab 3"
} )
}, new FormLayoutConstraints( class com.jgoodies.forms.layout.CellConstraints ) { }, new FormLayoutConstraints( class com.jgoodies.forms.layout.CellConstraints ) {
"gridX": 3
"gridY": 5 "gridY": 5
"gridX": 3
} ) } )
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) { add( new FormContainer( "com.formdev.flatlaf.testing.FlatTestFrame$NoRightToLeftPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
"$layoutConstraints": "insets 0,hidemode 3" "$layoutConstraints": "insets 0,hidemode 3"
"$columnConstraints": "[][][]" "$columnConstraints": "[][fill][]"
"$rowConstraints": "[center]" "$rowConstraints": "[center][][][][][]para[][]para[][][]"
} ) { } ) {
name: "panel14" name: "tabbedPaneControlPanel"
"opaque": false "opaque": false
add( new FormComponent( "javax.swing.JCheckBox" ) {
name: "moreTabsCheckBox"
"text": "more tabs"
"mnemonic": 77
auxiliary() {
"JavaCodeGenerator.variableLocal": false
}
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "moreTabsChanged", false ) )
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 0 0"
} )
add( new FormComponent( "javax.swing.JCheckBox" ) { add( new FormComponent( "javax.swing.JCheckBox" ) {
name: "tabScrollCheckBox" name: "tabScrollCheckBox"
"text": "tabLayoutPolicy = SCROLL" "text": "Use scroll layout"
"mnemonic": 83 "mnemonic": 83
"selected": true
auxiliary() { auxiliary() {
"JavaCodeGenerator.variableLocal": false "JavaCodeGenerator.variableLocal": false
} }
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "tabScrollChanged", false ) ) addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "tabScrollChanged", false ) )
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 1 0,alignx left,growx 0" "value": "cell 0 0,alignx left,growx 0"
} )
add( new FormComponent( "javax.swing.JLabel" ) {
name: "tabCountLabel"
"text": "Tab count:"
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 1 0"
} )
add( new FormComponent( "javax.swing.JSpinner" ) {
name: "tabCountSpinner"
"model": new javax.swing.SpinnerNumberModel {
minimum: 0
value: 4
}
auxiliary() {
"JavaCodeGenerator.variableLocal": false
}
addEvent( new FormEvent( "javax.swing.event.ChangeListener", "stateChanged", "tabCountChanged", false ) )
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 1 0"
} )
add( new FormComponent( "javax.swing.JCheckBox" ) {
name: "customTabsCheckBox"
"text": "Custom tabs"
auxiliary() {
"JavaCodeGenerator.variableLocal": false
}
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "customTabsChanged", false ) )
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 2 0"
} )
add( new FormComponent( "javax.swing.JCheckBox" ) {
name: "htmlTabsCheckBox"
"text": "HTML"
auxiliary() {
"JavaCodeGenerator.variableLocal": false
}
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "htmlTabsChanged", false ) )
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 2 0"
} )
add( new FormComponent( "javax.swing.JCheckBox" ) {
name: "multiLineTabsCheckBox"
"text": "multi-line"
auxiliary() {
"JavaCodeGenerator.variableLocal": false
}
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "htmlTabsChanged", false ) )
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 2 0"
} )
add( new FormComponent( "javax.swing.JCheckBox" ) {
name: "tabBackForegroundCheckBox"
"text": "Tab back/foreground"
auxiliary() {
"JavaCodeGenerator.variableLocal": false
}
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "tabBackForegroundChanged", false ) )
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 2 1"
} )
add( new FormComponent( "javax.swing.JCheckBox" ) {
name: "tabIconsCheckBox"
"text": "Tab icons"
auxiliary() {
"JavaCodeGenerator.variableLocal": false
}
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "tabIconsChanged", false ) )
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 2 2"
} )
add( new FormComponent( "javax.swing.JSpinner" ) {
name: "tabIconSizeSpinner"
"model": new javax.swing.SpinnerListModel {
list: new java.util.ArrayList {
add( "16" )
add( "24" )
add( "32" )
add( "48" )
add( "64" )
}
}
"enabled": false
auxiliary() {
"JavaCodeGenerator.variableLocal": false
}
addEvent( new FormEvent( "javax.swing.event.ChangeListener", "stateChanged", "tabIconsChanged", false ) )
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 2 2"
} )
add( new FormComponent( "javax.swing.JCheckBox" ) {
name: "tabsClosableCheckBox"
"text": "Tabs closable"
auxiliary() {
"JavaCodeGenerator.variableLocal": false
}
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "tabsClosableChanged", false ) )
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 2 3"
} )
add( new FormComponent( "javax.swing.JCheckBox" ) {
name: "showCloseButtonOnTabCheckBox"
"text": "on tab"
"selected": true
auxiliary() {
"JavaCodeGenerator.variableLocal": false
}
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "tabsClosableChanged", false ) )
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 2 3"
} )
add( new FormComponent( "javax.swing.JCheckBox" ) {
name: "showCloseButtonOnSelectedTabCheckBox"
"text": "show on selected"
auxiliary() {
"JavaCodeGenerator.variableLocal": false
}
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "showCloseButtonOnSelectedTabChanged", false ) )
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 2 3"
} )
add( new FormComponent( "javax.swing.JLabel" ) {
name: "tabPlacementLabel"
"text": "Tab placement:"
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 0 4"
} )
add( new FormComponent( "com.formdev.flatlaf.testing.FlatTestEnumComboBox" ) {
name: "tabPlacementField"
auxiliary() {
"JavaCodeGenerator.variableLocal": false
"JavaCodeGenerator.typeParameters": "TabPlacement"
}
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "tabPlacementChanged", false ) )
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 1 4"
} )
add( new FormComponent( "javax.swing.JCheckBox" ) {
name: "secondTabClosableCheckBox"
"text": "Second Tab closable"
"selected": true
auxiliary() {
"JavaCodeGenerator.variableLocal": false
}
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "secondTabClosableChanged", false ) )
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 2 4"
} )
add( new FormComponent( "javax.swing.JCheckBox" ) {
name: "showCloseButtonOnMouseOverCheckBox"
"text": "show on hover"
auxiliary() {
"JavaCodeGenerator.variableLocal": false
}
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "showCloseButtonOnMouseOverChanged", false ) )
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 2 4"
} )
add( new FormComponent( "javax.swing.JLabel" ) {
name: "tabAreaAlignmentLabel"
"text": "Tab alignment:"
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 0 5"
} )
add( new FormComponent( "com.formdev.flatlaf.testing.FlatTestEnumComboBox" ) {
name: "tabAlignmentField"
auxiliary() {
"JavaCodeGenerator.variableLocal": false
"JavaCodeGenerator.typeParameters": "JideTabAlignment"
}
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "tabAlignmentChanged", false ) )
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 1 5"
} )
add( new FormComponent( "javax.swing.JLabel" ) {
name: "tabResizeModeLabel"
"text": "Tab resize mode:"
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 2 5"
} )
add( new FormComponent( "com.formdev.flatlaf.testing.FlatTestEnumComboBox" ) {
name: "tabResizeModeField"
auxiliary() {
"JavaCodeGenerator.variableLocal": false
"JavaCodeGenerator.typeParameters": "JideTabResizeMode"
}
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "tabResizeModeChanged", false ) )
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 2 5"
} )
add( new FormComponent( "javax.swing.JCheckBox" ) {
name: "leadingComponentCheckBox"
"text": "Leading component"
auxiliary() {
"JavaCodeGenerator.variableLocal": false
}
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "leadingComponentChanged", false ) )
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 0 6"
} )
add( new FormComponent( "javax.swing.JCheckBox" ) {
name: "customBorderCheckBox"
"text": "Custom border"
auxiliary() {
"JavaCodeGenerator.variableLocal": false
}
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "customBorderChanged", false ) )
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 1 6"
} )
add( new FormComponent( "javax.swing.JCheckBox" ) {
name: "tabAreaInsetsCheckBox"
"text": "Tab area insets (5,5,10,10)"
auxiliary() {
"JavaCodeGenerator.variableLocal": false
}
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "tabAreaInsetsChanged", false ) )
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 2 6"
} )
add( new FormComponent( "javax.swing.JCheckBox" ) {
name: "trailingComponentCheckBox"
"text": "Trailing component"
auxiliary() {
"JavaCodeGenerator.variableLocal": false
}
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "trailingComponentChanged", false ) )
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 0 7"
} ) } )
add( new FormComponent( "javax.swing.JCheckBox" ) { add( new FormComponent( "javax.swing.JCheckBox" ) {
name: "hasFullBorderCheckBox" name: "hasFullBorderCheckBox"
"text": "JTabbedPane.hasFullBorder" "text": "Show content border"
"mnemonic": 70
auxiliary() { auxiliary() {
"JavaCodeGenerator.variableLocal": false "JavaCodeGenerator.variableLocal": false
} }
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "hasFullBorderChanged", false ) ) addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "hasFullBorderChanged", false ) )
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) { }, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 2 0,alignx left,growx 0" "value": "cell 1 7,alignx left,growx 0"
} )
add( new FormComponent( "javax.swing.JCheckBox" ) {
name: "boldActiveTabCheckBox"
"text": "Bold active tab"
auxiliary() {
"JavaCodeGenerator.variableLocal": false
}
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "boldActiveTabChanged", false ) )
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 0 8"
} )
add( new FormComponent( "javax.swing.JCheckBox" ) {
name: "showTabButtonsCheckBox"
"text": "Show tab buttons always"
auxiliary() {
"JavaCodeGenerator.variableLocal": false
}
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "showTabButtonsChanged", false ) )
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 1 8"
} )
add( new FormComponent( "javax.swing.JCheckBox" ) {
name: "smallerInsetsCheckBox"
"text": "Smaller tab insets (2,2,2,2)"
auxiliary() {
"JavaCodeGenerator.variableLocal": false
}
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "smallerInsetsChanged", false ) )
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 2 8"
} )
add( new FormComponent( "javax.swing.JCheckBox" ) {
name: "showGripperCheckBox"
"text": "Show gripper"
auxiliary() {
"JavaCodeGenerator.variableLocal": false
}
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "showGripperChanged", false ) )
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 0 9"
} )
add( new FormComponent( "javax.swing.JCheckBox" ) {
name: "showTabSeparatorsCheckBox"
"text": "Show tab separators"
auxiliary() {
"JavaCodeGenerator.variableLocal": false
}
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "showTabSeparatorsChanged", false ) )
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 1 9"
} )
add( new FormComponent( "javax.swing.JCheckBox" ) {
name: "tabEditingAllowedCheckBox"
"text": "Tab editing allowed"
auxiliary() {
"JavaCodeGenerator.variableLocal": false
}
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "tabEditingAllowedChanged", false ) )
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 0 10"
} )
add( new FormComponent( "javax.swing.JCheckBox" ) {
name: "hideTabAreaWithOneTabCheckBox"
"text": "Hide tab area with one tab"
auxiliary() {
"JavaCodeGenerator.variableLocal": false
}
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "hideTabAreaWithOneTabChanged", false ) )
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 1 10"
} ) } )
}, new FormLayoutConstraints( class com.jgoodies.forms.layout.CellConstraints ) { }, new FormLayoutConstraints( class com.jgoodies.forms.layout.CellConstraints ) {
"gridY": 7 "gridY": 7
@@ -197,7 +397,63 @@ new FormModel {
} ) } )
}, new FormLayoutConstraints( null ) { }, new FormLayoutConstraints( null ) {
"location": new java.awt.Point( 0, 0 ) "location": new java.awt.Point( 0, 0 )
"size": new java.awt.Dimension( 500, 500 ) "size": new java.awt.Dimension( 695, 655 )
} )
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
"$layoutConstraints": "hidemode 3,align center center"
"$columnConstraints": "[fill][fill][fill]"
"$rowConstraints": "[fill]"
} ) {
name: "panel1"
auxiliary() {
"JavaCodeGenerator.className": "Panel1"
}
add( new FormComponent( "javax.swing.JLabel" ) {
name: "label1"
"text": "text"
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 0 0"
} )
add( new FormComponent( "javax.swing.JTextField" ) {
name: "textField4"
"text": "some text"
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 1 0"
} )
add( new FormComponent( "javax.swing.JButton" ) {
name: "button3"
"text": "..."
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 2 0"
} )
}, new FormLayoutConstraints( null ) {
"location": new java.awt.Point( 0, 710 )
"size": new java.awt.Dimension( 291, 118 )
} )
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
"$layoutConstraints": "insets 0,hidemode 3,align center center"
"$columnConstraints": "[fill][fill]"
"$rowConstraints": "[fill]"
} ) {
name: "panel2"
auxiliary() {
"JavaCodeGenerator.className": "Panel2"
}
add( new FormComponent( "javax.swing.JTextField" ) {
name: "textField5"
"text": "more text"
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 0 0"
} )
add( new FormComponent( "javax.swing.JButton" ) {
name: "button4"
"text": "..."
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
"value": "cell 1 0"
} )
}, new FormLayoutConstraints( null ) {
"location": new java.awt.Point( 340, 710 )
"size": new java.awt.Dimension( 291, 118 )
} ) } )
} }
} }

View File

@@ -343,7 +343,11 @@ JideSplitButton.selectionForeground
JideSplitButton.textIconGap JideSplitButton.textIconGap
JideSplitButtonUI JideSplitButtonUI
JideTabbedPane.background JideTabbedPane.background
JideTabbedPane.closeButtonLeftMargin
JideTabbedPane.closeButtonRightMargin
JideTabbedPane.contentBorderInsets JideTabbedPane.contentBorderInsets
JideTabbedPane.fitStyleBoundSize
JideTabbedPane.fitStyleFirstTabMargin
JideTabbedPane.foreground JideTabbedPane.foreground
JideTabbedPane.shadow JideTabbedPane.shadow
JideTabbedPane.tabAreaBackground JideTabbedPane.tabAreaBackground