2014-10-14 2 views
0

Я сделал это:как использовать JComboBox со значением класса

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

Как вы можете видеть, выбранный элемент показать его простое имя класса, но в списке ... нет. Как я могу это сделать?

ответ

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() в вашей модели, как она будет мешать визуализатор.

+0

ЭТО РАБОТАЕТ! Благодарю вас: D – Gioce90

1

При заполнении comboBox по умолчанию вызывается метод toString() всех элементов. Метод класса toString() возвращает полное имя класса, как описано here. В методе getSelectedItem() вы вызываете getSimpleName(), который, конечно же, возвращает простое имя класса.

Чтобы решить вашу проблему, вам необходимо создать пользовательский list cell renderer и перезаписать getListCellRendererComponent.