请大家先运行下下面的代码,会看到JComboBox上显示的是对象字符串,而我想显示的是传进去的值,大家可以注释掉代码中的注释语句,来看结果。
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.awt.Graphics;import javax.swing.DefaultListCellRenderer;
import javax.swing.Icon;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.ListCellRenderer;class ComplexCellRenderer implements ListCellRenderer {
protected DefaultListCellRenderer defaultRenderer = new DefaultListCellRenderer(); public Component getListCellRendererComponent(JList list, Object value,
int index, boolean isSelected, boolean cellHasFocus) {
Font theFont = null;
Color theForeground = null;
Icon theIcon = null;
String theText = null; JLabel renderer = (JLabel) defaultRenderer
.getListCellRendererComponent(list, value, index, isSelected,
cellHasFocus); if (value instanceof Object[]) {
Object values[] = (Object[]) value;
theFont = (Font) values[0];
theForeground = (Color) values[1];
theIcon = (Icon) values[2];
theText = (String) values[3];
} else {
theFont = list.getFont();
theForeground = list.getForeground();
theText = "";
}
if (!isSelected) {
renderer.setForeground(theForeground);
}
if (theIcon != null) {
renderer.setIcon(theIcon);
}
renderer.setText(theText);
renderer.setFont(theFont);
return renderer;
}
}public class Test2 {
public static void main(String args[]) {
Object elements[][] = {
{ new Font("Helvetica", Font.PLAIN, 20), Color.RED,
new MyIcon(), "A" },
{ new Font("TimesRoman", Font.BOLD, 14), Color.BLUE,
new MyIcon(), "A" },
{ new Font("Courier", Font.ITALIC, 18), Color.GREEN,
new MyIcon(), "A" },
{ new Font("Helvetica", Font.BOLD | Font.ITALIC, 12),
Color.GRAY, new MyIcon(), "A" },
{ new Font("TimesRoman", Font.PLAIN, 32), Color.PINK,
new MyIcon(), "A" },
{ new Font("Courier", Font.BOLD, 16), Color.YELLOW,
new MyIcon(), "A" },
{ new Font("Helvetica", Font.ITALIC, 8), Color.DARK_GRAY,
new MyIcon(), "A" } }; JFrame frame = new JFrame("Complex Renderer");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); ListCellRenderer renderer = new ComplexCellRenderer();
JComboBox comboBox = new JComboBox(elements);
comboBox.setEditable(true);  //这里!
comboBox.setRenderer(renderer);
frame.add(comboBox, BorderLayout.NORTH); frame.setSize(300, 200);
frame.setVisible(true);
}
}class MyIcon implements Icon { public MyIcon() {
} public int getIconHeight() {
return 20;
} public int getIconWidth() {
return 20;
} public void paintIcon(Component c, Graphics g, int x, int y) {
g.setColor(Color.RED);
g.drawRect(0, 0, 25, 25);
}
}