关于JComboBox的一个问题

[size=large]本人很菜,想写一个登陆框,其中用户名的JComboBox下拉项目上想添加一个button来实现删除不需要的用户名。现在关键不知道用什么方法写,因为用户名的ComboBox是可编辑的,所以不能使用setRenderer()方法
,最好哪位高人能发一下实际代码就最好了!

下面的代码是使用 setRenderer实现的,但是当选择后,显示的是对象字符串,大家可以运行下看看效果,然后注释掉下面的标记再运行看看~ [/size]

[code="java"]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);
}

}[/code]
[b]问题补充:[/b]
感谢楼下的朋友,可是这里又有一个问题了,我该如何控制它的尺寸呢?我通过setPopupSize来控制,可是我只想修改它的宽度,因为item是动态加入的所以不可能将高度设死。还望帮忙解答下,谢谢!

查看全部
llm0528
llm0528
2009/07/24 22:47
  • swing
  • 点赞
  • 收藏
  • 回答
    私信
满意答案
查看全部

0个回复