mirror of
https://github.com/JFormDesigner/FlatLaf.git
synced 2026-02-11 06:27:13 -06:00
Extras: TriStateCheckBox: paint magenta rectangle when used in LaFs that do not support third state
This commit is contained in:
@@ -16,17 +16,23 @@
|
||||
|
||||
package com.formdev.flatlaf.extras;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.Graphics;
|
||||
import java.awt.event.ItemEvent;
|
||||
import javax.swing.JCheckBox;
|
||||
import javax.swing.LookAndFeel;
|
||||
import javax.swing.UIManager;
|
||||
import com.formdev.flatlaf.FlatLaf;
|
||||
|
||||
/**
|
||||
* A tri-state check box.
|
||||
*
|
||||
* <p>
|
||||
* To display the third state, this component requires an LaF that supports painting
|
||||
* the indeterminate state if client property {@code "JButton.selectedState"} has the
|
||||
* value {@code "indeterminate"}.
|
||||
*
|
||||
* <p>
|
||||
* FlatLaf and Mac Aqua LaF support the third state.
|
||||
* For other LaFs a magenta rectangle is painted around the component.
|
||||
*
|
||||
* @author Karl Tauber
|
||||
*/
|
||||
@@ -58,7 +64,7 @@ public class TriStateCheckBox
|
||||
@Override
|
||||
public void setSelected( boolean b ) {
|
||||
switch( state ) {
|
||||
case INDETERMINATE: setState( State.SELECTED ); break;
|
||||
case INDETERMINATE: setState( State.SELECTED ); break;
|
||||
case SELECTED: setState( State.UNSELECTED ); break;
|
||||
case UNSELECTED: setState( thirdStateEnabled ? State.INDETERMINATE : State.SELECTED ); break;
|
||||
}
|
||||
@@ -104,4 +110,19 @@ public class TriStateCheckBox
|
||||
public void setSelected( boolean b ) {
|
||||
setState( b ? State.SELECTED : State.UNSELECTED );
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void paintComponent( Graphics g ) {
|
||||
super.paintComponent( g );
|
||||
|
||||
if( !isThirdStateSupported() ) {
|
||||
g.setColor( Color.magenta );
|
||||
g.drawRect( 0, 0, getWidth() - 1, getHeight() - 1 );
|
||||
}
|
||||
}
|
||||
|
||||
private boolean isThirdStateSupported() {
|
||||
LookAndFeel laf = UIManager.getLookAndFeel();
|
||||
return laf instanceof FlatLaf || laf.getClass().getName().equals( "com.apple.laf.AquaLookAndFeel" );
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user