Hi, I did some work on the ComboBox UIs. (well, I wanted to fix a small bug and turned out to rewrite half of the ComboBox stuff ;-) ) Here comes the BasicComboBoxRenderer. This fixes the initialization of the renderer WRT colors and fonts.
2006-03-17 Roman Kennke <[EMAIL PROTECTED]> * javax/swing/plaf/basic/BasicComboBoxRenderer.java (noFocusBorder): Make border with insets of (1,1,1,1). (BasicComboBoxRenderer): Make renderer opaque. No need to explicitly set alignment. (getListCellRendererComponent): Rewritten to correctly initialize color and font. /Roman
Index: javax/swing/plaf/basic/BasicComboBoxRenderer.java =================================================================== RCS file: /cvsroot/classpath/classpath/javax/swing/plaf/basic/BasicComboBoxRenderer.java,v retrieving revision 1.8 diff -u -r1.8 BasicComboBoxRenderer.java --- javax/swing/plaf/basic/BasicComboBoxRenderer.java 18 Oct 2005 22:10:32 -0000 1.8 +++ javax/swing/plaf/basic/BasicComboBoxRenderer.java 17 Mar 2006 15:16:52 -0000 @@ -40,15 +40,13 @@ import java.awt.Component; import java.awt.Dimension; -import java.awt.FontMetrics; import java.io.Serializable; +import javax.swing.Icon; import javax.swing.JComboBox; import javax.swing.JLabel; import javax.swing.JList; import javax.swing.ListCellRenderer; -import javax.swing.SwingConstants; -import javax.swing.SwingUtilities; import javax.swing.border.Border; import javax.swing.border.EmptyBorder; @@ -64,14 +62,14 @@ /** * A shared border instance for all renderers. */ - protected static Border noFocusBorder = new EmptyBorder(0, 0, 0, 0); + protected static Border noFocusBorder = new EmptyBorder(1, 1, 1, 1); /** * Creates a new <code>BasicComboBoxRenderer</code> object. */ public BasicComboBoxRenderer() { - setHorizontalAlignment(SwingConstants.LEFT); + setOpaque(true); setBorder(noFocusBorder); } @@ -103,32 +101,7 @@ int index, boolean isSelected, boolean cellHasFocus) { - String s = value.toString(); - - // String maybe larger than comboBox. - FontMetrics fm = getToolkit().getFontMetrics(list.getFont()); - int strWidth = SwingUtilities.computeStringWidth(fm, s); - int cbWidth = getSize().width; - if (cbWidth != 0 && strWidth > cbWidth) - { - char[] str = s.toCharArray(); - int currWidth = 0; - int i = 0; - String postStr = "... "; - cbWidth -= SwingUtilities.computeStringWidth(fm, postStr); - while (i < str.length && currWidth < cbWidth) - { - ++i; - currWidth = SwingUtilities.computeStringWidth(fm, new String(str, 0, i)); - } - setText(new String(str, 0, i) + postStr); - } - else - setText(s); - - setOpaque(true); - - if (isSelected || cellHasFocus) + if (isSelected) { setBackground(list.getSelectionBackground()); setForeground(list.getSelectionForeground()); @@ -138,9 +111,13 @@ setBackground(list.getBackground()); setForeground(list.getForeground()); } - - setEnabled(list.isEnabled()); setFont(list.getFont()); + + if (value instanceof Icon) + setIcon((Icon) value); + else + setText(value == null ? "" : value.toString()); + return this; }