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