我已经做到了:
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();
}
};
我已经得到了这个:
如何看,所选项目显示了他的简单类名,但在列表中却没有。我怎么能做到这一点?
答案 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。