0

我做了这个:

private JComboBox vehicleType = new JComboBox();
DefaultComboBoxModel<Class> dcbm = new DefaultComboBoxModel<Class>( 
        new Class[] {Truck.class, Trailer.class, RoadTractor.class, SemiTrailer.class, Van.class, Car.class})
{
    @Override
    public String getSelectedItem() {
        return ((Class<?>)super.getSelectedItem()).getSimpleName();
    }

};

我得到了这个:

在此处输入图像描述

您如何看到,所选项目显示他的简单类名,但在列表中......没有。我怎么能做到这一点?

4

3 回答 3

1

JComboBox使用该toString()方法获取标签,您可以通过实现一个ListCellRenderer.

vehicleType.setRenderer(new DefaultListCellRenderer() {
    @Override
    public Component getListCellRendererComponent(JList<?> list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
        super.getListCellRendererComponent(list, value, index, isSelected, cellHasFocus);
        if(value != null) {
            setText(((Class)value).getSimpleName());
        }
        return this;
    }
});

此外,如果您使用此方法,您应该删除模型中的覆盖,getSelectedItem()因为它会干扰渲染器。

于 2014-10-14T09:13:11.503 回答
1

填充组合框时,默认toString()调用所有元素的方法。Class的toString()方法返回完整的类名称,如此所述。在getSelectedItem()方法中,你调用getSimpleName()which 当然返回类的简单名称。

要解决您的问题,您需要创建一个自定义列表单元格渲染器,并覆盖getListCellRendererComponent.

于 2014-10-14T09:20:31.747 回答
0

您需要创建一个自定义ListCellRenderer

于 2014-10-14T09:10:32.157 回答