如何使用JComboBox与Class值

时间:2014-10-14 09:01:12

标签: java class user-interface jcombobox comboboxmodel

我已经做到了:

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

};

我已经得到了这个:

enter image description here

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

3 个答案:

答案 0 :(得分: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()的覆盖,因为它会干扰渲染器。

答案 1 :(得分:1)

填充comboBox时,默认情况下会调用所有元素的toString()方法。 Class的toString()方法返回完整的类名称,如解释here。 在getSelectedItem()方法中,您调用getSimpleName(),这当然会返回该类的简单名称。

要解决您的问题,您需要创建自定义list cell renderer,并覆盖getListCellRendererComponent

答案 2 :(得分:0)

您需要创建自定义ListCellRenderer