mirror of
https://github.com/JFormDesigner/FlatLaf.git
synced 2026-02-11 06:27:13 -06:00
FileChooser: make top-right buttons look like toolbar buttons
This commit is contained in:
@@ -31,7 +31,7 @@ public interface FlatClientProperties
|
||||
* <strong>Components</strong> {@link javax.swing.JButton} and {@link javax.swing.JToggleButton}<br>
|
||||
* <strong>Value type</strong> {@link java.lang.String}<br>
|
||||
* <strong>Allowed Values</strong> {@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.
|
||||
* <p>
|
||||
* <strong>Components</strong> {@link javax.swing.JButton} and {@link javax.swing.JToggleButton}
|
||||
*
|
||||
* @see #BUTTON_TYPE
|
||||
*/
|
||||
String BUTTON_TYPE_TOOLBAR_BUTTON = "toolBarButton";
|
||||
|
||||
/**
|
||||
* Specifies selected state of a checkbox.
|
||||
* <p>
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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 ) );
|
||||
|
||||
Reference in New Issue
Block a user