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;
   }
 

Reply via email to