From 5bd40baed29e82c7772e1a895663d942e04d6611 Mon Sep 17 00:00:00 2001 From: Karl Tauber Date: Tue, 12 May 2020 23:26:52 +0200 Subject: [PATCH] Extras: TriStateCheckBox: paint magenta rectangle when used in LaFs that do not support third state --- .../flatlaf/extras/TriStateCheckBox.java | 27 ++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/TriStateCheckBox.java b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/TriStateCheckBox.java index 4c13396b..dd4871e9 100644 --- a/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/TriStateCheckBox.java +++ b/flatlaf-extras/src/main/java/com/formdev/flatlaf/extras/TriStateCheckBox.java @@ -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. - * + *

* 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"}. - * + *

* 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" ); + } }