From 0b6247851bafd466b2a0d1ff19241f3dde527098 Mon Sep 17 00:00:00 2001 From: Karl Tauber Date: Sun, 5 Sep 2021 22:05:21 +0200 Subject: [PATCH] Theme Editor: fixed preview of focused list and table selection --- .../com/formdev/flatlaf/ui/FlatListUI.java | 13 +++++++++++ .../com/formdev/flatlaf/ui/FlatTableUI.java | 23 +++++++++++++++++++ .../themeeditor/FlatThemePreviewAll.java | 2 +- 3 files changed, 37 insertions(+), 1 deletion(-) 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 d639ecb3..5c1fe585 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 @@ -20,10 +20,12 @@ import java.awt.Color; import java.awt.EventQueue; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; +import java.beans.PropertyChangeListener; import javax.swing.JComponent; import javax.swing.UIManager; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.basic.BasicListUI; +import com.formdev.flatlaf.FlatClientProperties; /** * Provides the Flat LaF UI delegate for {@link javax.swing.JList}. @@ -95,6 +97,17 @@ public class FlatListUI selectionInactiveForeground = null; } + @Override + protected PropertyChangeListener createPropertyChangeListener() { + PropertyChangeListener superListener = super.createPropertyChangeListener(); + return e -> { + superListener.propertyChange( e ); + + if( FlatClientProperties.COMPONENT_FOCUS_OWNER.equals( e.getPropertyName() ) ) + toggleSelectionColors(); + }; + } + @Override protected FocusListener createFocusListener() { return new BasicListUI.FocusHandler() { diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTableUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTableUI.java index 15aafe1a..d869194e 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTableUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatTableUI.java @@ -25,6 +25,7 @@ import java.awt.Graphics2D; import java.awt.event.FocusEvent; import java.awt.event.FocusListener; import java.awt.geom.Rectangle2D; +import java.beans.PropertyChangeListener; import javax.swing.JComponent; import javax.swing.JScrollPane; import javax.swing.JViewport; @@ -34,6 +35,7 @@ import javax.swing.UIManager; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.basic.BasicTableUI; import javax.swing.table.JTableHeader; +import com.formdev.flatlaf.FlatClientProperties; import com.formdev.flatlaf.util.Graphics2DProxy; import com.formdev.flatlaf.util.SystemInfo; import com.formdev.flatlaf.util.UIScale; @@ -103,6 +105,8 @@ public class FlatTableUI private boolean oldShowVerticalLines; private Dimension oldIntercellSpacing; + private PropertyChangeListener propertyChangeListener; + public static ComponentUI createUI( JComponent c ) { return new FlatTableUI(); } @@ -162,6 +166,25 @@ public class FlatTableUI table.setIntercellSpacing( oldIntercellSpacing ); } + @Override + protected void installListeners() { + super.installListeners(); + + propertyChangeListener = e -> { + if( FlatClientProperties.COMPONENT_FOCUS_OWNER.equals( e.getPropertyName() ) ) + toggleSelectionColors(); + }; + table.addPropertyChangeListener( propertyChangeListener ); + } + + @Override + protected void uninstallListeners() { + super.uninstallListeners(); + + table.removePropertyChangeListener( propertyChangeListener ); + propertyChangeListener = null; + } + @Override protected FocusListener createFocusListener() { return new BasicTableUI.FocusHandler() { diff --git a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreviewAll.java b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreviewAll.java index 4f651072..9f6c2542 100644 --- a/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreviewAll.java +++ b/flatlaf-theme-editor/src/main/java/com/formdev/flatlaf/themeeditor/FlatThemePreviewAll.java @@ -59,9 +59,9 @@ class FlatThemePreviewAll list1.setSelectedIndex( 1 ); tree1.setSelectionRow( 1 ); - table1.setRowSelectionInterval( 1, 1 ); table1.setRowSorter( new TableRowSorter<>( table1.getModel() ) ); table1.getRowSorter().toggleSortOrder( 0 ); + table1.setRowSelectionInterval( 1, 1 ); table1.uiDefaultsGetter = preview::getUIDefaultProperty; EventQueue.invokeLater( () -> {