mirror of
https://github.com/JFormDesigner/FlatLaf.git
synced 2026-02-13 07:17:13 -06:00
TabbedPane: support hiding separator between tabs and content area via client property
This commit is contained in:
@@ -9,6 +9,8 @@ FlatLaf Change Log
|
|||||||
easier to recognize the tabbed pane.
|
easier to recognize the tabbed pane.
|
||||||
- TabbedPane: Added top and bottom tab insets to avoid that large tab icons are
|
- TabbedPane: Added top and bottom tab insets to avoid that large tab icons are
|
||||||
painted over active tab underline.
|
painted over active tab underline.
|
||||||
|
- TabbedPane: Support hiding separator between tabs and content area (set client
|
||||||
|
property `JTabbedPane.showContentSeparator` to `false`).
|
||||||
|
|
||||||
|
|
||||||
## 0.42
|
## 0.42
|
||||||
|
|||||||
@@ -216,6 +216,14 @@ public interface FlatClientProperties
|
|||||||
*/
|
*/
|
||||||
String TABBED_PANE_SHOW_TAB_SEPARATORS = "JTabbedPane.showTabSeparators";
|
String TABBED_PANE_SHOW_TAB_SEPARATORS = "JTabbedPane.showTabSeparators";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specifies whether the separator between tabs area and content area should be shown.
|
||||||
|
* <p>
|
||||||
|
* <strong>Component</strong> {@link javax.swing.JTabbedPane}<br>
|
||||||
|
* <strong>Value type</strong> {@link java.lang.Boolean}
|
||||||
|
*/
|
||||||
|
String TABBED_PANE_SHOW_CONTENT_SEPARATOR = "JTabbedPane.showContentSeparator";
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Specifies whether a full border is painted around a tabbed pane.
|
* Specifies whether a full border is painted around a tabbed pane.
|
||||||
* <p>
|
* <p>
|
||||||
|
|||||||
@@ -196,6 +196,7 @@ public class FlatTabbedPaneUI
|
|||||||
|
|
||||||
switch( e.getPropertyName() ) {
|
switch( e.getPropertyName() ) {
|
||||||
case TABBED_PANE_SHOW_TAB_SEPARATORS:
|
case TABBED_PANE_SHOW_TAB_SEPARATORS:
|
||||||
|
case TABBED_PANE_SHOW_CONTENT_SEPARATOR:
|
||||||
case TABBED_PANE_HAS_FULL_BORDER:
|
case TABBED_PANE_HAS_FULL_BORDER:
|
||||||
case TABBED_PANE_TAB_HEIGHT:
|
case TABBED_PANE_TAB_HEIGHT:
|
||||||
tabPane.revalidate();
|
tabPane.revalidate();
|
||||||
@@ -255,6 +256,9 @@ public class FlatTabbedPaneUI
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
protected Insets getContentBorderInsets( int tabPlacement ) {
|
protected Insets getContentBorderInsets( int tabPlacement ) {
|
||||||
|
if( contentSeparatorHeight == 0 || !clientPropertyBoolean( tabPane, TABBED_PANE_SHOW_CONTENT_SEPARATOR, true ) )
|
||||||
|
return new Insets( 0, 0, 0, 0 );
|
||||||
|
|
||||||
boolean hasFullBorder = clientPropertyBoolean( tabPane, TABBED_PANE_HAS_FULL_BORDER, this.hasFullBorder );
|
boolean hasFullBorder = clientPropertyBoolean( tabPane, TABBED_PANE_HAS_FULL_BORDER, this.hasFullBorder );
|
||||||
int sh = scale( contentSeparatorHeight );
|
int sh = scale( contentSeparatorHeight );
|
||||||
Insets insets = hasFullBorder ? new Insets( sh, sh, sh, sh ) : new Insets( sh, 0, 0, 0 );
|
Insets insets = hasFullBorder ? new Insets( sh, sh, sh, sh ) : new Insets( sh, 0, 0, 0 );
|
||||||
@@ -359,7 +363,10 @@ public class FlatTabbedPaneUI
|
|||||||
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 ) {
|
||||||
// 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 = isScrollTabLayout() ? g.getClipBounds() : null;
|
Rectangle clipBounds = isScrollTabLayout() ? g.getClipBounds() : null;
|
||||||
if( clipBounds != null ) {
|
if( clipBounds != null &&
|
||||||
|
this.contentSeparatorHeight != 0 &&
|
||||||
|
clientPropertyBoolean( tabPane, TABBED_PANE_SHOW_CONTENT_SEPARATOR, true ) )
|
||||||
|
{
|
||||||
Rectangle newClipBounds = new Rectangle( clipBounds );
|
Rectangle newClipBounds = new Rectangle( clipBounds );
|
||||||
int contentSeparatorHeight = scale( this.contentSeparatorHeight );
|
int contentSeparatorHeight = scale( this.contentSeparatorHeight );
|
||||||
switch( tabPlacement ) {
|
switch( tabPlacement ) {
|
||||||
@@ -436,43 +443,49 @@ public class FlatTabbedPaneUI
|
|||||||
|
|
||||||
// remove tabs from bounds
|
// remove tabs from bounds
|
||||||
switch( tabPlacement ) {
|
switch( tabPlacement ) {
|
||||||
case LEFT:
|
|
||||||
x += calculateTabAreaWidth( tabPlacement, runCount, maxTabWidth );
|
|
||||||
if( tabsOverlapBorder )
|
|
||||||
x -= tabAreaInsets.right;
|
|
||||||
w -= (x - insets.left);
|
|
||||||
break;
|
|
||||||
case RIGHT:
|
|
||||||
w -= calculateTabAreaWidth( tabPlacement, runCount, maxTabWidth );
|
|
||||||
if( tabsOverlapBorder )
|
|
||||||
w += tabAreaInsets.left;
|
|
||||||
break;
|
|
||||||
case BOTTOM:
|
|
||||||
h -= calculateTabAreaHeight( tabPlacement, runCount, maxTabHeight );
|
|
||||||
if( tabsOverlapBorder )
|
|
||||||
h += tabAreaInsets.top;
|
|
||||||
break;
|
|
||||||
case TOP:
|
case TOP:
|
||||||
default:
|
default:
|
||||||
y += calculateTabAreaHeight( tabPlacement, runCount, maxTabHeight );
|
y += calculateTabAreaHeight( tabPlacement, runCount, maxTabHeight );
|
||||||
if( tabsOverlapBorder )
|
if( tabsOverlapBorder )
|
||||||
y -= tabAreaInsets.bottom;
|
y -= tabAreaInsets.bottom;
|
||||||
h -= (y - insets.top);
|
h -= (y - insets.top);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case BOTTOM:
|
||||||
|
h -= calculateTabAreaHeight( tabPlacement, runCount, maxTabHeight );
|
||||||
|
if( tabsOverlapBorder )
|
||||||
|
h += tabAreaInsets.top;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case LEFT:
|
||||||
|
x += calculateTabAreaWidth( tabPlacement, runCount, maxTabWidth );
|
||||||
|
if( tabsOverlapBorder )
|
||||||
|
x -= tabAreaInsets.right;
|
||||||
|
w -= (x - insets.left);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case RIGHT:
|
||||||
|
w -= calculateTabAreaWidth( tabPlacement, runCount, maxTabWidth );
|
||||||
|
if( tabsOverlapBorder )
|
||||||
|
w += tabAreaInsets.left;
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// compute insets for separator or full border
|
if( contentSeparatorHeight != 0 && clientPropertyBoolean( tabPane, TABBED_PANE_SHOW_CONTENT_SEPARATOR, true ) ) {
|
||||||
boolean hasFullBorder = clientPropertyBoolean( tabPane, TABBED_PANE_HAS_FULL_BORDER, this.hasFullBorder );
|
// compute insets for separator or full border
|
||||||
int sh = scale( contentSeparatorHeight * 100 ); // multiply by 100 because rotateInsets() does not use floats
|
boolean hasFullBorder = clientPropertyBoolean( tabPane, TABBED_PANE_HAS_FULL_BORDER, this.hasFullBorder );
|
||||||
Insets ci = new Insets( 0, 0, 0, 0 );
|
int sh = scale( contentSeparatorHeight * 100 ); // multiply by 100 because rotateInsets() does not use floats
|
||||||
rotateInsets( hasFullBorder ? new Insets( sh, sh, sh, sh ) : new Insets( sh, 0, 0, 0 ), ci, tabPlacement );
|
Insets ci = new Insets( 0, 0, 0, 0 );
|
||||||
|
rotateInsets( hasFullBorder ? new Insets( sh, sh, sh, sh ) : new Insets( sh, 0, 0, 0 ), ci, tabPlacement );
|
||||||
|
|
||||||
// paint content area
|
// paint content separator or full border
|
||||||
g.setColor( contentAreaColor );
|
g.setColor( contentAreaColor );
|
||||||
Path2D path = new Path2D.Float( Path2D.WIND_EVEN_ODD );
|
Path2D path = new Path2D.Float( Path2D.WIND_EVEN_ODD );
|
||||||
path.append( new Rectangle2D.Float( x, y, w, h ), false );
|
path.append( new Rectangle2D.Float( x, y, w, h ), false );
|
||||||
path.append( new Rectangle2D.Float( x + (ci.left / 100f), y + (ci.top / 100f),
|
path.append( new Rectangle2D.Float( x + (ci.left / 100f), y + (ci.top / 100f),
|
||||||
w - (ci.left / 100f) - (ci.right / 100f), h - (ci.top / 100f) - (ci.bottom / 100f) ), false );
|
w - (ci.left / 100f) - (ci.right / 100f), h - (ci.top / 100f) - (ci.bottom / 100f) ), false );
|
||||||
((Graphics2D)g).fill( path );
|
((Graphics2D)g).fill( path );
|
||||||
|
}
|
||||||
|
|
||||||
// repaint selection in scroll-tab-layout because it may be painted before
|
// repaint selection in scroll-tab-layout because it may be painted before
|
||||||
// the content border was painted (from BasicTabbedPaneUI$ScrollableTabPanel)
|
// the content border was painted (from BasicTabbedPaneUI$ScrollableTabPanel)
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
package com.formdev.flatlaf.demo;
|
package com.formdev.flatlaf.demo;
|
||||||
|
|
||||||
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_CONTENT_SEPARATOR;
|
||||||
import static com.formdev.flatlaf.FlatClientProperties.TABBED_PANE_SHOW_TAB_SEPARATORS;
|
import static com.formdev.flatlaf.FlatClientProperties.TABBED_PANE_SHOW_TAB_SEPARATORS;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
@@ -58,18 +59,24 @@ class TabsPanel
|
|||||||
|
|
||||||
private void showTabSeparatorsChanged() {
|
private void showTabSeparatorsChanged() {
|
||||||
Boolean showTabSeparators = showTabSeparatorsCheckBox.isSelected() ? true : null;
|
Boolean showTabSeparators = showTabSeparatorsCheckBox.isSelected() ? true : null;
|
||||||
tabbedPane1.putClientProperty( TABBED_PANE_SHOW_TAB_SEPARATORS, showTabSeparators );
|
putTabbedPanesClientProperty( TABBED_PANE_SHOW_TAB_SEPARATORS, showTabSeparators );
|
||||||
tabbedPane2.putClientProperty( TABBED_PANE_SHOW_TAB_SEPARATORS, showTabSeparators );
|
}
|
||||||
tabbedPane3.putClientProperty( TABBED_PANE_SHOW_TAB_SEPARATORS, showTabSeparators );
|
|
||||||
tabbedPane4.putClientProperty( TABBED_PANE_SHOW_TAB_SEPARATORS, showTabSeparators );
|
private void hideContentSeparatorChanged() {
|
||||||
|
Boolean showContentSeparator = hideContentSeparatorCheckBox.isSelected() ? false : null;
|
||||||
|
putTabbedPanesClientProperty( TABBED_PANE_SHOW_CONTENT_SEPARATOR, showContentSeparator );
|
||||||
}
|
}
|
||||||
|
|
||||||
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( 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 putTabbedPanesClientProperty( String key, Object value ) {
|
||||||
|
tabbedPane1.putClientProperty( key, value );
|
||||||
|
tabbedPane2.putClientProperty( key, value );
|
||||||
|
tabbedPane3.putClientProperty( key, value );
|
||||||
|
tabbedPane4.putClientProperty( key, value );
|
||||||
}
|
}
|
||||||
|
|
||||||
private void moreTabsChanged() {
|
private void moreTabsChanged() {
|
||||||
@@ -155,6 +162,7 @@ class TabsPanel
|
|||||||
moreTabsCheckBox = new JCheckBox();
|
moreTabsCheckBox = new JCheckBox();
|
||||||
tabScrollCheckBox = new JCheckBox();
|
tabScrollCheckBox = new JCheckBox();
|
||||||
showTabSeparatorsCheckBox = new JCheckBox();
|
showTabSeparatorsCheckBox = new JCheckBox();
|
||||||
|
hideContentSeparatorCheckBox = new JCheckBox();
|
||||||
hasFullBorderCheckBox = new JCheckBox();
|
hasFullBorderCheckBox = new JCheckBox();
|
||||||
CellConstraints cc = new CellConstraints();
|
CellConstraints cc = new CellConstraints();
|
||||||
|
|
||||||
@@ -278,6 +286,7 @@ class TabsPanel
|
|||||||
"[]" +
|
"[]" +
|
||||||
"[]" +
|
"[]" +
|
||||||
"[]" +
|
"[]" +
|
||||||
|
"[fill]" +
|
||||||
"[]",
|
"[]",
|
||||||
// rows
|
// rows
|
||||||
"[center]"));
|
"[center]"));
|
||||||
@@ -299,10 +308,15 @@ class TabsPanel
|
|||||||
showTabSeparatorsCheckBox.addActionListener(e -> showTabSeparatorsChanged());
|
showTabSeparatorsCheckBox.addActionListener(e -> showTabSeparatorsChanged());
|
||||||
panel14.add(showTabSeparatorsCheckBox, "cell 2 0");
|
panel14.add(showTabSeparatorsCheckBox, "cell 2 0");
|
||||||
|
|
||||||
|
//---- hideContentSeparatorCheckBox ----
|
||||||
|
hideContentSeparatorCheckBox.setText("Hide content separator");
|
||||||
|
hideContentSeparatorCheckBox.addActionListener(e -> hideContentSeparatorChanged());
|
||||||
|
panel14.add(hideContentSeparatorCheckBox, "cell 3 0");
|
||||||
|
|
||||||
//---- hasFullBorderCheckBox ----
|
//---- hasFullBorderCheckBox ----
|
||||||
hasFullBorderCheckBox.setText("Show content border");
|
hasFullBorderCheckBox.setText("Show content border");
|
||||||
hasFullBorderCheckBox.addActionListener(e -> hasFullBorderChanged());
|
hasFullBorderCheckBox.addActionListener(e -> hasFullBorderChanged());
|
||||||
panel14.add(hasFullBorderCheckBox, "cell 3 0,alignx left,growx 0");
|
panel14.add(hasFullBorderCheckBox, "cell 4 0,alignx left,growx 0");
|
||||||
}
|
}
|
||||||
panel9.add(panel14, cc.xywh(1, 11, 3, 1));
|
panel9.add(panel14, cc.xywh(1, 11, 3, 1));
|
||||||
}
|
}
|
||||||
@@ -318,6 +332,7 @@ class TabsPanel
|
|||||||
private JCheckBox moreTabsCheckBox;
|
private JCheckBox moreTabsCheckBox;
|
||||||
private JCheckBox tabScrollCheckBox;
|
private JCheckBox tabScrollCheckBox;
|
||||||
private JCheckBox showTabSeparatorsCheckBox;
|
private JCheckBox showTabSeparatorsCheckBox;
|
||||||
|
private JCheckBox hideContentSeparatorCheckBox;
|
||||||
private JCheckBox hasFullBorderCheckBox;
|
private JCheckBox hasFullBorderCheckBox;
|
||||||
// JFormDesigner - End of variables declaration //GEN-END:variables
|
// JFormDesigner - End of variables declaration //GEN-END:variables
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
JFDML JFormDesigner: "7.0.2.0.298" Java: "14" encoding: "UTF-8"
|
JFDML JFormDesigner: "7.0.2.0.298" Java: "15" encoding: "UTF-8"
|
||||||
|
|
||||||
new FormModel {
|
new FormModel {
|
||||||
contentType: "form/swing"
|
contentType: "form/swing"
|
||||||
@@ -144,7 +144,7 @@ new FormModel {
|
|||||||
} )
|
} )
|
||||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
||||||
"$layoutConstraints": "insets 0,hidemode 3"
|
"$layoutConstraints": "insets 0,hidemode 3"
|
||||||
"$columnConstraints": "[][][][]"
|
"$columnConstraints": "[][][][fill][]"
|
||||||
"$rowConstraints": "[center]"
|
"$rowConstraints": "[center]"
|
||||||
} ) {
|
} ) {
|
||||||
name: "panel14"
|
name: "panel14"
|
||||||
@@ -180,6 +180,16 @@ new FormModel {
|
|||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||||
"value": "cell 2 0"
|
"value": "cell 2 0"
|
||||||
} )
|
} )
|
||||||
|
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||||
|
name: "hideContentSeparatorCheckBox"
|
||||||
|
"text": "Hide content separator"
|
||||||
|
auxiliary() {
|
||||||
|
"JavaCodeGenerator.variableLocal": false
|
||||||
|
}
|
||||||
|
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "hideContentSeparatorChanged", false ) )
|
||||||
|
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||||
|
"value": "cell 3 0"
|
||||||
|
} )
|
||||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||||
name: "hasFullBorderCheckBox"
|
name: "hasFullBorderCheckBox"
|
||||||
"text": "Show content border"
|
"text": "Show content border"
|
||||||
@@ -188,7 +198,7 @@ new FormModel {
|
|||||||
}
|
}
|
||||||
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 3 0,alignx left,growx 0"
|
"value": "cell 4 0,alignx left,growx 0"
|
||||||
} )
|
} )
|
||||||
}, new FormLayoutConstraints( class com.jgoodies.forms.layout.CellConstraints ) {
|
}, new FormLayoutConstraints( class com.jgoodies.forms.layout.CellConstraints ) {
|
||||||
"gridY": 11
|
"gridY": 11
|
||||||
@@ -199,7 +209,7 @@ 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( 625, 515 )
|
"size": new java.awt.Dimension( 700, 515 )
|
||||||
} )
|
} )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,10 +17,12 @@
|
|||||||
package com.formdev.flatlaf.testing;
|
package com.formdev.flatlaf.testing;
|
||||||
|
|
||||||
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_CONTENT_SEPARATOR;
|
||||||
import static com.formdev.flatlaf.FlatClientProperties.TABBED_PANE_SHOW_TAB_SEPARATORS;
|
import static com.formdev.flatlaf.FlatClientProperties.TABBED_PANE_SHOW_TAB_SEPARATORS;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import javax.swing.border.*;
|
import javax.swing.border.*;
|
||||||
|
import com.formdev.flatlaf.util.ScaledImageIcon;
|
||||||
import com.jgoodies.forms.layout.*;
|
import com.jgoodies.forms.layout.*;
|
||||||
import net.miginfocom.swing.*;
|
import net.miginfocom.swing.*;
|
||||||
|
|
||||||
@@ -65,18 +67,24 @@ public class FlatContainerTest
|
|||||||
|
|
||||||
private void showTabSeparatorsChanged() {
|
private void showTabSeparatorsChanged() {
|
||||||
Boolean showTabSeparators = showTabSeparatorsCheckBox.isSelected() ? true : null;
|
Boolean showTabSeparators = showTabSeparatorsCheckBox.isSelected() ? true : null;
|
||||||
tabbedPane1.putClientProperty( TABBED_PANE_SHOW_TAB_SEPARATORS, showTabSeparators );
|
putTabbedPanesClientProperty( TABBED_PANE_SHOW_TAB_SEPARATORS, showTabSeparators );
|
||||||
tabbedPane2.putClientProperty( TABBED_PANE_SHOW_TAB_SEPARATORS, showTabSeparators );
|
}
|
||||||
tabbedPane3.putClientProperty( TABBED_PANE_SHOW_TAB_SEPARATORS, showTabSeparators );
|
|
||||||
tabbedPane4.putClientProperty( TABBED_PANE_SHOW_TAB_SEPARATORS, showTabSeparators );
|
private void hideContentSeparatorChanged() {
|
||||||
|
Boolean showContentSeparator = hideContentSeparatorCheckBox.isSelected() ? false : null;
|
||||||
|
putTabbedPanesClientProperty( TABBED_PANE_SHOW_CONTENT_SEPARATOR, showContentSeparator );
|
||||||
}
|
}
|
||||||
|
|
||||||
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( 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 putTabbedPanesClientProperty( String key, Object value ) {
|
||||||
|
tabbedPane1.putClientProperty( key, value );
|
||||||
|
tabbedPane2.putClientProperty( key, value );
|
||||||
|
tabbedPane3.putClientProperty( key, value );
|
||||||
|
tabbedPane4.putClientProperty( key, value );
|
||||||
}
|
}
|
||||||
|
|
||||||
private void moreTabsChanged() {
|
private void moreTabsChanged() {
|
||||||
@@ -98,7 +106,7 @@ public class FlatContainerTest
|
|||||||
addTab( tabbedPane, "Tab 8", "tab content 8" );
|
addTab( tabbedPane, "Tab 8", "tab content 8" );
|
||||||
} else {
|
} else {
|
||||||
int tabCount = tabbedPane.getTabCount();
|
int tabCount = tabbedPane.getTabCount();
|
||||||
if( tabCount > 3 ) {
|
if( tabCount > 4 ) {
|
||||||
for( int i = 0; i < 5; i++ )
|
for( int i = 0; i < 5; i++ )
|
||||||
tabbedPane.removeTabAt( tabbedPane.getTabCount() - 1 );
|
tabbedPane.removeTabAt( tabbedPane.getTabCount() - 1 );
|
||||||
}
|
}
|
||||||
@@ -115,6 +123,8 @@ public class FlatContainerTest
|
|||||||
|
|
||||||
addTab( tabbedPane, "Disabled", "tab content 3" );
|
addTab( tabbedPane, "Disabled", "tab content 3" );
|
||||||
tabbedPane.setEnabledAt( 2, false );
|
tabbedPane.setEnabledAt( 2, false );
|
||||||
|
|
||||||
|
tabbedPane.addTab( "Tab 4", new JLabel( "non-opaque content", SwingConstants.CENTER ) );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -146,7 +156,7 @@ public class FlatContainerTest
|
|||||||
Object iconSize = tabIconSizeSpinner.getValue();
|
Object iconSize = tabIconSizeSpinner.getValue();
|
||||||
|
|
||||||
Icon icon = showTabIcons
|
Icon icon = showTabIcons
|
||||||
? new ImageIcon( getClass().getResource( "/com/formdev/flatlaf/testing/test" + iconSize + ".png" ) )
|
? new ScaledImageIcon( new ImageIcon( getClass().getResource( "/com/formdev/flatlaf/testing/test" + iconSize + ".png" ) ) )
|
||||||
: null;
|
: null;
|
||||||
tabbedPane.setIconAt( 0, icon );
|
tabbedPane.setIconAt( 0, icon );
|
||||||
tabbedPane.setIconAt( 1, icon );
|
tabbedPane.setIconAt( 1, icon );
|
||||||
@@ -174,6 +184,7 @@ public class FlatContainerTest
|
|||||||
moreTabsCheckBox = new JCheckBox();
|
moreTabsCheckBox = new JCheckBox();
|
||||||
tabScrollCheckBox = new JCheckBox();
|
tabScrollCheckBox = new JCheckBox();
|
||||||
showTabSeparatorsCheckBox = new JCheckBox();
|
showTabSeparatorsCheckBox = new JCheckBox();
|
||||||
|
hideContentSeparatorCheckBox = new JCheckBox();
|
||||||
hasFullBorderCheckBox = new JCheckBox();
|
hasFullBorderCheckBox = new JCheckBox();
|
||||||
tabIconsCheckBox = new JCheckBox();
|
tabIconsCheckBox = new JCheckBox();
|
||||||
tabIconSizeSpinner = new JSpinner();
|
tabIconSizeSpinner = new JSpinner();
|
||||||
@@ -285,6 +296,7 @@ public class FlatContainerTest
|
|||||||
"[]" +
|
"[]" +
|
||||||
"[]" +
|
"[]" +
|
||||||
"[]" +
|
"[]" +
|
||||||
|
"[fill]" +
|
||||||
"[]" +
|
"[]" +
|
||||||
"[fill]" +
|
"[fill]" +
|
||||||
"[fill]",
|
"[fill]",
|
||||||
@@ -308,21 +320,26 @@ public class FlatContainerTest
|
|||||||
showTabSeparatorsCheckBox.addActionListener(e -> showTabSeparatorsChanged());
|
showTabSeparatorsCheckBox.addActionListener(e -> showTabSeparatorsChanged());
|
||||||
panel14.add(showTabSeparatorsCheckBox, "cell 2 0");
|
panel14.add(showTabSeparatorsCheckBox, "cell 2 0");
|
||||||
|
|
||||||
|
//---- hideContentSeparatorCheckBox ----
|
||||||
|
hideContentSeparatorCheckBox.setText("Hide content separator");
|
||||||
|
hideContentSeparatorCheckBox.addActionListener(e -> hideContentSeparatorChanged());
|
||||||
|
panel14.add(hideContentSeparatorCheckBox, "cell 3 0");
|
||||||
|
|
||||||
//---- hasFullBorderCheckBox ----
|
//---- hasFullBorderCheckBox ----
|
||||||
hasFullBorderCheckBox.setText("Show content border");
|
hasFullBorderCheckBox.setText("Show content border");
|
||||||
hasFullBorderCheckBox.addActionListener(e -> hasFullBorderChanged());
|
hasFullBorderCheckBox.addActionListener(e -> hasFullBorderChanged());
|
||||||
panel14.add(hasFullBorderCheckBox, "cell 3 0,alignx left,growx 0");
|
panel14.add(hasFullBorderCheckBox, "cell 4 0,alignx left,growx 0");
|
||||||
|
|
||||||
//---- tabIconsCheckBox ----
|
//---- tabIconsCheckBox ----
|
||||||
tabIconsCheckBox.setText("Tab icons");
|
tabIconsCheckBox.setText("Tab icons");
|
||||||
tabIconsCheckBox.addActionListener(e -> tabIconsChanged());
|
tabIconsCheckBox.addActionListener(e -> tabIconsChanged());
|
||||||
panel14.add(tabIconsCheckBox, "cell 4 0");
|
panel14.add(tabIconsCheckBox, "cell 5 0");
|
||||||
|
|
||||||
//---- tabIconSizeSpinner ----
|
//---- tabIconSizeSpinner ----
|
||||||
tabIconSizeSpinner.setModel(new SpinnerListModel(new String[] {"16", "24", "32", "48", "64"}));
|
tabIconSizeSpinner.setModel(new SpinnerListModel(new String[] {"16", "24", "32", "48", "64"}));
|
||||||
tabIconSizeSpinner.setEnabled(false);
|
tabIconSizeSpinner.setEnabled(false);
|
||||||
tabIconSizeSpinner.addChangeListener(e -> tabIconsChanged());
|
tabIconSizeSpinner.addChangeListener(e -> tabIconsChanged());
|
||||||
panel14.add(tabIconSizeSpinner, "cell 5 0");
|
panel14.add(tabIconSizeSpinner, "cell 6 0");
|
||||||
}
|
}
|
||||||
panel9.add(panel14, cc.xywh(1, 11, 3, 1));
|
panel9.add(panel14, cc.xywh(1, 11, 3, 1));
|
||||||
}
|
}
|
||||||
@@ -338,6 +355,7 @@ public class FlatContainerTest
|
|||||||
private JCheckBox moreTabsCheckBox;
|
private JCheckBox moreTabsCheckBox;
|
||||||
private JCheckBox tabScrollCheckBox;
|
private JCheckBox tabScrollCheckBox;
|
||||||
private JCheckBox showTabSeparatorsCheckBox;
|
private JCheckBox showTabSeparatorsCheckBox;
|
||||||
|
private JCheckBox hideContentSeparatorCheckBox;
|
||||||
private JCheckBox hasFullBorderCheckBox;
|
private JCheckBox hasFullBorderCheckBox;
|
||||||
private JCheckBox tabIconsCheckBox;
|
private JCheckBox tabIconsCheckBox;
|
||||||
private JSpinner tabIconSizeSpinner;
|
private JSpinner tabIconSizeSpinner;
|
||||||
|
|||||||
@@ -131,7 +131,7 @@ new FormModel {
|
|||||||
} )
|
} )
|
||||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
||||||
"$layoutConstraints": "insets 0,hidemode 3"
|
"$layoutConstraints": "insets 0,hidemode 3"
|
||||||
"$columnConstraints": "[][][][][fill][fill]"
|
"$columnConstraints": "[][][][fill][][fill][fill]"
|
||||||
"$rowConstraints": "[center]"
|
"$rowConstraints": "[center]"
|
||||||
} ) {
|
} ) {
|
||||||
name: "panel14"
|
name: "panel14"
|
||||||
@@ -168,6 +168,16 @@ new FormModel {
|
|||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||||
"value": "cell 2 0"
|
"value": "cell 2 0"
|
||||||
} )
|
} )
|
||||||
|
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||||
|
name: "hideContentSeparatorCheckBox"
|
||||||
|
"text": "Hide content separator"
|
||||||
|
auxiliary() {
|
||||||
|
"JavaCodeGenerator.variableLocal": false
|
||||||
|
}
|
||||||
|
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "hideContentSeparatorChanged", false ) )
|
||||||
|
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||||
|
"value": "cell 3 0"
|
||||||
|
} )
|
||||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||||
name: "hasFullBorderCheckBox"
|
name: "hasFullBorderCheckBox"
|
||||||
"text": "Show content border"
|
"text": "Show content border"
|
||||||
@@ -176,7 +186,7 @@ new FormModel {
|
|||||||
}
|
}
|
||||||
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 3 0,alignx left,growx 0"
|
"value": "cell 4 0,alignx left,growx 0"
|
||||||
} )
|
} )
|
||||||
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
add( new FormComponent( "javax.swing.JCheckBox" ) {
|
||||||
name: "tabIconsCheckBox"
|
name: "tabIconsCheckBox"
|
||||||
@@ -186,7 +196,7 @@ new FormModel {
|
|||||||
}
|
}
|
||||||
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "tabIconsChanged", false ) )
|
addEvent( new FormEvent( "java.awt.event.ActionListener", "actionPerformed", "tabIconsChanged", false ) )
|
||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||||
"value": "cell 4 0"
|
"value": "cell 5 0"
|
||||||
} )
|
} )
|
||||||
add( new FormComponent( "javax.swing.JSpinner" ) {
|
add( new FormComponent( "javax.swing.JSpinner" ) {
|
||||||
name: "tabIconSizeSpinner"
|
name: "tabIconSizeSpinner"
|
||||||
@@ -205,7 +215,7 @@ new FormModel {
|
|||||||
}
|
}
|
||||||
addEvent( new FormEvent( "javax.swing.event.ChangeListener", "stateChanged", "tabIconsChanged", false ) )
|
addEvent( new FormEvent( "javax.swing.event.ChangeListener", "stateChanged", "tabIconsChanged", false ) )
|
||||||
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
}, new FormLayoutConstraints( class net.miginfocom.layout.CC ) {
|
||||||
"value": "cell 5 0"
|
"value": "cell 6 0"
|
||||||
} )
|
} )
|
||||||
}, new FormLayoutConstraints( class com.jgoodies.forms.layout.CellConstraints ) {
|
}, new FormLayoutConstraints( class com.jgoodies.forms.layout.CellConstraints ) {
|
||||||
"gridY": 11
|
"gridY": 11
|
||||||
@@ -216,7 +226,7 @@ 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( 625, 515 )
|
"size": new java.awt.Dimension( 810, 515 )
|
||||||
} )
|
} )
|
||||||
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
add( new FormContainer( "javax.swing.JPanel", new FormLayoutManager( class net.miginfocom.swing.MigLayout ) {
|
||||||
"$layoutConstraints": "hidemode 3,align center center"
|
"$layoutConstraints": "hidemode 3,align center center"
|
||||||
|
|||||||
Reference in New Issue
Block a user