diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/FlatClientProperties.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/FlatClientProperties.java
index 281849a2..cbc1566c 100644
--- a/flatlaf-core/src/main/java/com/formdev/flatlaf/FlatClientProperties.java
+++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/FlatClientProperties.java
@@ -31,7 +31,7 @@ public interface FlatClientProperties
* Components {@link javax.swing.JButton} and {@link javax.swing.JToggleButton}
* Value type {@link java.lang.String}
* Allowed Values {@link #BUTTON_TYPE_SQUARE}, {@link #BUTTON_TYPE_ROUND_RECT},
- * {@link #BUTTON_TYPE_TAB} and {@link #BUTTON_TYPE_HELP}
+ * {@link #BUTTON_TYPE_TAB}, {@link #BUTTON_TYPE_HELP} and {@link BUTTON_TYPE_TOOLBAR_BUTTON}
*/
String BUTTON_TYPE = "JButton.buttonType";
@@ -71,6 +71,15 @@ public interface FlatClientProperties
*/
String BUTTON_TYPE_HELP = "help";
+ /**
+ * Paint the button in toolbar style.
+ *
+ * Components {@link javax.swing.JButton} and {@link javax.swing.JToggleButton} + * + * @see #BUTTON_TYPE + */ + String BUTTON_TYPE_TOOLBAR_BUTTON = "toolBarButton"; + /** * Specifies selected state of a checkbox. *
diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatButtonUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatButtonUI.java index af39f30e..32d42b31 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatButtonUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatButtonUI.java @@ -249,7 +249,8 @@ public class FlatButtonUI } static boolean isToolBarButton( Component c ) { - return c.getParent() instanceof JToolBar; + return c.getParent() instanceof JToolBar || + (c instanceof AbstractButton && clientPropertyEquals( (AbstractButton) c, BUTTON_TYPE, BUTTON_TYPE_TOOLBAR_BUTTON )); } @Override diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatFileChooserUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatFileChooserUI.java index 6baeec70..81b34464 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatFileChooserUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatFileChooserUI.java @@ -16,15 +16,26 @@ package com.formdev.flatlaf.ui; +import java.awt.BorderLayout; +import java.awt.Component; import java.awt.Dimension; +import java.awt.Insets; import java.io.File; +import javax.swing.AbstractButton; +import javax.swing.Box; +import javax.swing.BoxLayout; import javax.swing.Icon; import javax.swing.ImageIcon; +import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JFileChooser; +import javax.swing.JPanel; +import javax.swing.JToggleButton; +import javax.swing.UIManager; import javax.swing.filechooser.FileView; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.metal.MetalFileChooserUI; +import com.formdev.flatlaf.FlatClientProperties; import com.formdev.flatlaf.util.ScaledImageIcon; import com.formdev.flatlaf.util.UIScale; @@ -132,6 +143,40 @@ public class FlatFileChooserUI super( filechooser ); } + @Override + public void installComponents( JFileChooser fc ) { + super.installComponents( fc ); + + patchUI( fc ); + } + + private void patchUI( JFileChooser fc ) { + // turn top-right buttons into toolbar buttons + Component topPanel = fc.getComponent( 0 ); + if( (topPanel instanceof JPanel) && + (((JPanel)topPanel).getLayout() instanceof BorderLayout) ) + { + Component topButtonPanel = ((JPanel)topPanel).getComponent( 0 ); + if( (topButtonPanel instanceof JPanel) && + (((JPanel)topButtonPanel).getLayout() instanceof BoxLayout) ) + { + Insets margin = UIManager.getInsets( "Button.margin" ); + Component[] comps = ((JPanel)topButtonPanel).getComponents(); + for( int i = comps.length - 1; i >= 0; i-- ) { + Component c = comps[i]; + if( c instanceof JButton || c instanceof JToggleButton ) { + AbstractButton b = (AbstractButton)c; + b.putClientProperty( FlatClientProperties.BUTTON_TYPE, + FlatClientProperties.BUTTON_TYPE_TOOLBAR_BUTTON ); + b.setMargin( margin ); + b.setFocusable( false ); + } else if( c instanceof Box.Filler ) + ((JPanel)topButtonPanel).remove( i ); + } + } + } + } + @Override public Dimension getPreferredSize( JComponent c ) { return UIScale.scale( super.getPreferredSize( c ) );