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..c1fa40bc 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; } @@ -304,6 +308,15 @@ public class FlatListUI Component rendererComponent = cellRenderer.getListCellRendererComponent( list, dataModel.getElementAt( row ), row, isSelected, FlatUIUtils.isPermanentFocusOwner( list ) && (row == leadIndex) ); + + if( alternateRowColor != null && row % 2 != 0 ) { + g.setColor( alternateRowColor ); + + // paint respecting selection arc + final 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 ); + } // boolean isFileList = Boolean.TRUE.equals( list.getClientProperty( "List.isFileList" ) ); 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 596ac6c8..be7949a0 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 f0ae4484..4ff65259 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 d20e49fb..d8271441 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 7f3ec73a..3d7bd7d1 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 @@ -443,6 +443,7 @@ List.cellNoFocusBorder List.cellRenderer List.dropCellBackground List.dropCellForeground +List.alternateRowColor List.dropLineColor List.focusCellHighlightBorder List.focusInputMap