diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatListUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatListUI.java index b6d0b712..13f3b915 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatListUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatListUI.java @@ -57,6 +57,7 @@ import com.formdev.flatlaf.util.UIScale; * @uiDefault List.foreground Color * @uiDefault List.selectionBackground Color * @uiDefault List.selectionForeground Color + * @uiDefault List.alternateRowColor Color * @uiDefault List.dropLineColor Color * @uiDefault List.border Border * @uiDefault List.cellRenderer ListCellRenderer @@ -93,6 +94,7 @@ public class FlatListUI @Styleable protected Color selectionForeground; @Styleable protected Color selectionInactiveBackground; @Styleable protected Color selectionInactiveForeground; + /** @since 3.6 */ @Styleable protected Color alternateRowColor; /** @since 3 */ @Styleable protected Insets selectionInsets; /** @since 3 */ @Styleable protected int selectionArc; @@ -129,6 +131,7 @@ public class FlatListUI selectionForeground = UIManager.getColor( "List.selectionForeground" ); selectionInactiveBackground = UIManager.getColor( "List.selectionInactiveBackground" ); selectionInactiveForeground = UIManager.getColor( "List.selectionInactiveForeground" ); + alternateRowColor = UIManager.getColor( "List.alternateRowColor" ); selectionInsets = UIManager.getInsets( "List.selectionInsets" ); selectionArc = UIManager.getInt( "List.selectionArc" ); @@ -143,6 +146,7 @@ public class FlatListUI selectionForeground = null; selectionInactiveBackground = null; selectionInactiveForeground = null; + alternateRowColor = null; oldStyleValues = null; } @@ -319,6 +323,18 @@ public class FlatListUI cw = rowBounds.width; } + // combobox does not support alternate row color + if( !"ComboBox.list".equals( list.getName() ) ) { + if( alternateRowColor != null && row % 2 != 0 ) { + g.setColor( alternateRowColor ); + + // paint respecting selection arc + float arc = UIScale.scale( selectionArc / 2f ); + FlatUIUtils.paintSelection( (Graphics2D) g, 0, rowBounds.y, list.getWidth(), rowBounds.height, + UIScale.scale( selectionInsets ), arc, arc, arc, arc, 0 ); + } + } + // rounded selection or selection insets if( isSelected && !isFileList && // rounded selection is not supported for file list diff --git a/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyleableInfo.java b/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyleableInfo.java index f6486896..56b97b77 100644 --- a/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyleableInfo.java +++ b/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyleableInfo.java @@ -270,6 +270,7 @@ public class TestFlatStyleableInfo "selectionForeground", Color.class, "selectionInactiveBackground", Color.class, "selectionInactiveForeground", Color.class, + "alternateRowColor", Color.class, "selectionInsets", Insets.class, "selectionArc", int.class, diff --git a/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyleableValue.java b/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyleableValue.java index 3e4fb0fd..e0c0de16 100644 --- a/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyleableValue.java +++ b/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyleableValue.java @@ -370,6 +370,7 @@ public class TestFlatStyleableValue testColor( c, ui, "selectionForeground", 0x123456 ); testColor( c, ui, "selectionInactiveBackground", 0x123456 ); testColor( c, ui, "selectionInactiveForeground", 0x123456 ); + testColor( c, ui, "alternateRowColor", 0x123456 ); testInsets( c, ui, "selectionInsets", 1,2,3,4 ); testInteger( c, ui, "selectionArc", 123 ); diff --git a/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyling.java b/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyling.java index 209cad9b..930f4376 100644 --- a/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyling.java +++ b/flatlaf-core/src/test/java/com/formdev/flatlaf/ui/TestFlatStyling.java @@ -433,6 +433,7 @@ public class TestFlatStyling ui.applyStyle( "selectionForeground: #fff" ); ui.applyStyle( "selectionInactiveBackground: #fff" ); ui.applyStyle( "selectionInactiveForeground: #fff" ); + ui.applyStyle( "alternateRowColor: #fff" ); ui.applyStyle( "selectionInsets: 1,2,3,4" ); ui.applyStyle( "selectionArc: 8" ); diff --git a/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/FlatLafUIKeys.txt b/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/FlatLafUIKeys.txt index 4b765662..a4fbca03 100644 --- a/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/FlatLafUIKeys.txt +++ b/flatlaf-theme-editor/src/main/resources/com/formdev/flatlaf/themeeditor/FlatLafUIKeys.txt @@ -469,6 +469,7 @@ Label.disabledShadow Label.font Label.foreground LabelUI +List.alternateRowColor List.background List.border List.cellFocusColor