From 165def6c81f12e25d64597b8dc1311719fda0704 Mon Sep 17 00:00:00 2001 From: Karl Tauber Date: Mon, 26 Aug 2019 21:43:17 +0200 Subject: [PATCH] ComboBox: focus border was not shown for editable comboboxes --- .../com/formdev/flatlaf/ui/FlatBorder.java | 4 ++++ .../formdev/flatlaf/ui/FlatComboBoxUI.java | 22 +++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatBorder.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatBorder.java index 895a6cb9..18154e54 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatBorder.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatBorder.java @@ -23,6 +23,7 @@ import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Insets; import java.awt.Paint; +import javax.swing.JComboBox; import javax.swing.JScrollPane; import javax.swing.JViewport; import javax.swing.UIManager; @@ -73,6 +74,9 @@ public class FlatBorder JViewport viewport = ((JScrollPane)c).getViewport(); Component view = (viewport != null) ? viewport.getView() : null; return (view != null) ? view.hasFocus() : false; + } else if( c instanceof JComboBox && ((JComboBox)c).isEditable() ) { + Component editorComponent = ((JComboBox)c).getEditor().getEditorComponent(); + return (editorComponent != null) ? editorComponent.hasFocus() : false; } else return c.hasFocus(); } diff --git a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatComboBoxUI.java b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatComboBoxUI.java index ea956c2b..cd9c9909 100644 --- a/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatComboBoxUI.java +++ b/flatlaf-core/src/main/java/com/formdev/flatlaf/ui/FlatComboBoxUI.java @@ -24,6 +24,8 @@ import java.awt.Graphics2D; import java.awt.LayoutManager; import java.awt.Rectangle; import java.awt.Shape; +import java.awt.event.FocusEvent; +import java.awt.event.FocusListener; import java.awt.geom.Path2D; import java.awt.geom.Rectangle2D; import java.beans.PropertyChangeEvent; @@ -71,6 +73,26 @@ public class FlatComboBoxUI }; } + @Override + protected FocusListener createFocusListener() { + // repaint combobox to update focus border + return new BasicComboBoxUI.FocusHandler() { + @Override + public void focusGained( FocusEvent e ) { + super.focusGained( e ); + if( comboBox != null && comboBox.isEditable() ) + comboBox.repaint(); + } + + @Override + public void focusLost( FocusEvent e ) { + super.focusLost( e ); + if( comboBox != null && comboBox.isEditable() ) + comboBox.repaint(); + } + }; + } + @Override protected PropertyChangeListener createPropertyChangeListener() { return new BasicComboBoxUI.PropertyChangeHandler() {