ComboBox: focus border was not shown for editable comboboxes

This commit is contained in:
Karl Tauber
2019-08-26 21:43:17 +02:00
parent 094555f75c
commit 165def6c81
2 changed files with 26 additions and 0 deletions

View File

@@ -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();
}

View File

@@ -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() {