CheckBox and RadioButton: support hover, pressed and focused backgrounds and borders

This commit is contained in:
Karl Tauber
2019-09-12 23:36:45 +02:00
parent c7ca3c5f9a
commit 5eabcef795
5 changed files with 46 additions and 17 deletions

View File

@@ -24,6 +24,7 @@ import java.awt.Graphics2D;
import java.awt.geom.Path2D;
import javax.swing.AbstractButton;
import javax.swing.UIManager;
import com.formdev.flatlaf.ui.FlatButtonUI;
/**
* Icon for {@link javax.swing.JCheckBox}.
@@ -34,10 +35,16 @@ import javax.swing.UIManager;
* @uiDefault CheckBox.icon.disabledBorderColor Color
* @uiDefault CheckBox.icon.selectedBorderColor Color
* @uiDefault CheckBox.icon.focusedBorderColor Color
* @uiDefault CheckBox.icon.selectedFocusedBorderColor Color
* @uiDefault CheckBox.icon.hoverBorderColor Color optional
* @uiDefault CheckBox.icon.selectedFocusedBorderColor Color optional
* @uiDefault CheckBox.icon.background Color
* @uiDefault CheckBox.icon.disabledBackground Color
* @uiDefault CheckBox.icon.focusedBackground Color optional
* @uiDefault CheckBox.icon.hoverBackground Color optional
* @uiDefault CheckBox.icon.pressedBackground Color optional
* @uiDefault CheckBox.icon.selectedBackground Color
* @uiDefault CheckBox.icon.selectedHoverBackground Color optional
* @uiDefault CheckBox.icon.selectedPressedBackground Color optional
* @uiDefault CheckBox.icon.checkmarkColor Color
* @uiDefault CheckBox.icon.disabledCheckmarkColor Color
*
@@ -53,10 +60,16 @@ public class FlatCheckBoxIcon
protected final Color disabledBorderColor = UIManager.getColor( "CheckBox.icon.disabledBorderColor" );
protected final Color selectedBorderColor = UIManager.getColor( "CheckBox.icon.selectedBorderColor" );
protected final Color focusedBorderColor = UIManager.getColor( "CheckBox.icon.focusedBorderColor" );
protected final Color hoverBorderColor = UIManager.getColor( "CheckBox.icon.hoverBorderColor" );
protected final Color selectedFocusedBorderColor = UIManager.getColor( "CheckBox.icon.selectedFocusedBorderColor" );
protected final Color background = UIManager.getColor( "CheckBox.icon.background" );
protected final Color disabledBackground = UIManager.getColor( "CheckBox.icon.disabledBackground" );
protected final Color focusedBackground = UIManager.getColor( "CheckBox.icon.focusedBackground" );
protected final Color hoverBackground = UIManager.getColor( "CheckBox.icon.hoverBackground" );
protected final Color pressedBackground = UIManager.getColor( "CheckBox.icon.pressedBackground" );
protected final Color selectedBackground = UIManager.getColor( "CheckBox.icon.selectedBackground" );
protected final Color selectedHoverBackground = UIManager.getColor( "CheckBox.icon.selectedHoverBackground" );
protected final Color selectedPressedBackground = UIManager.getColor( "CheckBox.icon.selectedPressedBackground" );
protected final Color checkmarkColor = UIManager.getColor( "CheckBox.icon.checkmarkColor" );
protected final Color disabledCheckmarkColor = UIManager.getColor( "CheckBox.icon.disabledCheckmarkColor" );
@@ -68,33 +81,35 @@ public class FlatCheckBoxIcon
@Override
protected void paintIcon( Component c, Graphics2D g2 ) {
boolean enabled = c.isEnabled();
boolean focused = c.hasFocus();
boolean selected = (c instanceof AbstractButton) && ((AbstractButton)c).isSelected();
boolean selected = (c instanceof AbstractButton) ? ((AbstractButton)c).isSelected() : false;
// paint focused border
if( focused ) {
if( c.hasFocus() ) {
g2.setColor( focusColor );
paintFocusBorder( g2 );
}
// paint border
g2.setColor( enabled
? (selected
? (focused ? selectedFocusedBorderColor : selectedBorderColor)
: (focused ? focusedBorderColor : borderColor))
: disabledBorderColor );
g2.setColor( FlatButtonUI.buttonStateColor( c,
selected ? selectedBorderColor : borderColor,
disabledBorderColor,
selected && selectedFocusedBorderColor != null ? selectedFocusedBorderColor : focusedBorderColor,
hoverBorderColor,
null ) );
paintBorder( g2 );
// paint background
g2.setColor( enabled
? (selected ? selectedBackground : background)
: disabledBackground );
g2.setColor( FlatButtonUI.buttonStateColor( c,
selected ? selectedBackground : background,
disabledBackground,
focusedBackground,
selected && selectedHoverBackground != null ? selectedHoverBackground : hoverBackground,
selected && selectedPressedBackground != null ? selectedPressedBackground : pressedBackground ) );
paintBackground( g2 );
// paint checkmark
if( selected ) {
g2.setColor( enabled ? checkmarkColor : disabledCheckmarkColor );
g2.setColor( c.isEnabled() ? checkmarkColor : disabledCheckmarkColor );
paintCheckmark( g2 );
}
}

View File

@@ -67,7 +67,7 @@ Button.pressedBackground=5c6164
Button.borderColor=5e6060
Button.disabledBorderColor=5e6060
Button.focusedBorderColor=466d94
Button.hoverBorderColor=466d94
Button.hoverBorderColor=@@Button.focusedBorderColor
Button.default.background=365880
Button.default.foreground=bbbbbb
@@ -88,9 +88,12 @@ CheckBox.icon.borderColor=6B6B6B
CheckBox.icon.disabledBorderColor=545556
CheckBox.icon.selectedBorderColor=6B6B6B
CheckBox.icon.focusedBorderColor=466D94
CheckBox.icon.hoverBorderColor=@@CheckBox.icon.focusedBorderColor
CheckBox.icon.selectedFocusedBorderColor=466D94
CheckBox.icon.background=43494A
CheckBox.icon.disabledBackground=@background
CheckBox.icon.hoverBackground=4c5052
CheckBox.icon.pressedBackground=@@Button.pressedBackground
CheckBox.icon.selectedBackground=43494A
CheckBox.icon.checkmarkColor=A7A7A7
CheckBox.icon.disabledCheckmarkColor=606060

View File

@@ -26,9 +26,13 @@ Button.focusedBackground=null
#---- CheckBox ----
CheckBox.icon.selectedBorderColor=4982CC
CheckBox.icon.selectedFocusedBorderColor=ACCFF7
CheckBox.icon.selectedBackground=4D89C9
CheckBox.icon.checkmarkColor=FFFFFF
CheckBox.icon.selectedHoverBackground=5E94CE
CheckBox.icon.selectedPressedBackground=72A1D4
#---- Component ----

View File

@@ -68,7 +68,7 @@ Button.pressedBackground=dfdfdf
Button.borderColor=bfbfbf
Button.disabledBorderColor=cfcfcf
Button.focusedBorderColor=87afda
Button.hoverBorderColor=87afda
Button.hoverBorderColor=@@Button.focusedBorderColor
Button.default.background=4A86C7
Button.default.foreground=f0f0f0
@@ -89,9 +89,12 @@ CheckBox.icon.borderColor=878787
CheckBox.icon.disabledBorderColor=BDBDBD
CheckBox.icon.selectedBorderColor=878787
CheckBox.icon.focusedBorderColor=7B9FC7
CheckBox.icon.selectedFocusedBorderColor=ACCFF7
CheckBox.icon.hoverBorderColor=@@CheckBox.icon.focusedBorderColor
CheckBox.icon.background=FFFFFF
CheckBox.icon.disabledBackground=@background
CheckBox.icon.focusedBackground=@@Button.focusedBackground
CheckBox.icon.hoverBackground=@@Button.hoverBackground
CheckBox.icon.pressedBackground=@@Button.pressedBackground
CheckBox.icon.selectedBackground=FFFFFF
CheckBox.icon.checkmarkColor=4D89C9
CheckBox.icon.disabledCheckmarkColor=ABABAB

View File

@@ -73,9 +73,13 @@ CheckBox.icon.borderColor=878787
CheckBox.icon.disabledBorderColor=BDBDBD
CheckBox.icon.selectedBorderColor=4982CC
CheckBox.icon.focusedBorderColor=7B9FC7
CheckBox.icon.hoverBorderColor=ff0000
CheckBox.icon.selectedFocusedBorderColor=ACCFF7
CheckBox.icon.background=FFFFFF
CheckBox.icon.disabledBackground=F2F2F2
CheckBox.icon.focusedBackground=00ffff
CheckBox.icon.hoverBackground=ffff00
CheckBox.icon.pressedBackground=FFC800
CheckBox.icon.selectedBackground=4D89C9
CheckBox.icon.checkmarkColor=FFFFFF
CheckBox.icon.disabledCheckmarkColor=ABABAB