mirror of
https://github.com/JFormDesigner/FlatLaf.git
synced 2026-02-13 07:17: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>Components</strong> {@link javax.swing.JButton} and {@link javax.swing.JToggleButton}<br>
|
||||||
* <strong>Value type</strong> {@link java.lang.String}<br>
|
* <strong>Value type</strong> {@link java.lang.String}<br>
|
||||||
* <strong>Allowed Values</strong> {@link #BUTTON_TYPE_SQUARE}, {@link #BUTTON_TYPE_ROUND_RECT},
|
* <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";
|
String BUTTON_TYPE = "JButton.buttonType";
|
||||||
|
|
||||||
@@ -71,6 +71,15 @@ public interface FlatClientProperties
|
|||||||
*/
|
*/
|
||||||
String BUTTON_TYPE_HELP = "help";
|
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.
|
* Specifies selected state of a checkbox.
|
||||||
* <p>
|
* <p>
|
||||||
|
|||||||
@@ -249,7 +249,8 @@ public class FlatButtonUI
|
|||||||
}
|
}
|
||||||
|
|
||||||
static boolean isToolBarButton( Component c ) {
|
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
|
@Override
|
||||||
|
|||||||
@@ -16,15 +16,26 @@
|
|||||||
|
|
||||||
package com.formdev.flatlaf.ui;
|
package com.formdev.flatlaf.ui;
|
||||||
|
|
||||||
|
import java.awt.BorderLayout;
|
||||||
|
import java.awt.Component;
|
||||||
import java.awt.Dimension;
|
import java.awt.Dimension;
|
||||||
|
import java.awt.Insets;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import javax.swing.AbstractButton;
|
||||||
|
import javax.swing.Box;
|
||||||
|
import javax.swing.BoxLayout;
|
||||||
import javax.swing.Icon;
|
import javax.swing.Icon;
|
||||||
import javax.swing.ImageIcon;
|
import javax.swing.ImageIcon;
|
||||||
|
import javax.swing.JButton;
|
||||||
import javax.swing.JComponent;
|
import javax.swing.JComponent;
|
||||||
import javax.swing.JFileChooser;
|
import javax.swing.JFileChooser;
|
||||||
|
import javax.swing.JPanel;
|
||||||
|
import javax.swing.JToggleButton;
|
||||||
|
import javax.swing.UIManager;
|
||||||
import javax.swing.filechooser.FileView;
|
import javax.swing.filechooser.FileView;
|
||||||
import javax.swing.plaf.ComponentUI;
|
import javax.swing.plaf.ComponentUI;
|
||||||
import javax.swing.plaf.metal.MetalFileChooserUI;
|
import javax.swing.plaf.metal.MetalFileChooserUI;
|
||||||
|
import com.formdev.flatlaf.FlatClientProperties;
|
||||||
import com.formdev.flatlaf.util.ScaledImageIcon;
|
import com.formdev.flatlaf.util.ScaledImageIcon;
|
||||||
import com.formdev.flatlaf.util.UIScale;
|
import com.formdev.flatlaf.util.UIScale;
|
||||||
|
|
||||||
@@ -132,6 +143,40 @@ public class FlatFileChooserUI
|
|||||||
super( filechooser );
|
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
|
@Override
|
||||||
public Dimension getPreferredSize( JComponent c ) {
|
public Dimension getPreferredSize( JComponent c ) {
|
||||||
return UIScale.scale( super.getPreferredSize( c ) );
|
return UIScale.scale( super.getPreferredSize( c ) );
|
||||||
|
|||||||
Reference in New Issue
Block a user