From bfc746cd85d5d90b5fb834b8bb3cf28126816f67 Mon Sep 17 00:00:00 2001 From: Karl Tauber Date: Tue, 27 Aug 2019 12:59:24 +0200 Subject: [PATCH] ComboBox: re-implemented paintCurrentValue() because super.paintCurrentValue() uses UIManager.getColor(), which is not GUI builder friendly --- .../formdev/flatlaf/ui/FlatComboBoxUI.java | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) 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 3770d9b2..ef2d25a7 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 @@ -18,6 +18,7 @@ package com.formdev.flatlaf.ui; import static com.formdev.flatlaf.util.UIScale.scale; import java.awt.Color; +import java.awt.Component; import java.awt.Container; import java.awt.Graphics; import java.awt.Graphics2D; @@ -33,6 +34,8 @@ import java.beans.PropertyChangeListener; import javax.swing.BorderFactory; import javax.swing.JButton; import javax.swing.JComponent; +import javax.swing.JPanel; +import javax.swing.ListCellRenderer; import javax.swing.UIManager; import javax.swing.plaf.ComponentUI; import javax.swing.plaf.basic.BasicArrowButton; @@ -229,9 +232,21 @@ public class FlatComboBoxUI } @Override + @SuppressWarnings( "unchecked" ) public void paintCurrentValue( Graphics g, Rectangle bounds, boolean hasFocus ) { - // always pass "hasFocus = false" to avoid painting in selection colors when focused - super.paintCurrentValue( g, bounds, false ); + ListCellRenderer renderer = comboBox.getRenderer(); + Component c = renderer.getListCellRendererComponent( listBox, comboBox.getSelectedItem(), -1, false, false ); + c.setFont( comboBox.getFont() ); + + boolean enabled = comboBox.isEnabled(); + c.setForeground( enabled ? comboBox.getForeground() : disabledForeground ); + c.setBackground( enabled ? comboBox.getBackground() : disabledBackground ); + + boolean shouldValidate = (c instanceof JPanel); + if( padding != null ) + bounds = FlatUIUtils.subtract( bounds, padding ); + + currentValuePane.paintComponent( g, c, comboBox, bounds.x, bounds.y, bounds.width, bounds.height, shouldValidate ); } @Override