Вот код пользовательского визуализатора:ListCellRenderer литье исключение
private class FacilityElement extends javax.swing.JLabel implements javax.swing.ListCellRenderer {
@Override
public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
if(isSelected) {
setBackground(list.getSelectionBackground());
setForeground(list.getSelectionForeground());
}
else {
setBackground(list.getBackground());
setForeground(list.getForeground());
}
setFont(list.getFont());
setText(" " + ((Facility) value).getName()); // The error is here
setOpaque(true);
return this;
}
}
Все прекрасно работает, за исключением, когда нет никаких элементов в DefaultComboBoxModel
, в этом случае getListCellRendererComponent
вызывается с String
значением ""
, что приводит к тому, потому что он ожидает объект Facility
.
Почему он ведет себя так?
Update: Я знаю, что ошибка происходит из-за кастинга, и я знаю, как использовать instance of
, возникает вопрос, почему он ведет себя таким образом (функция), если нет элементов, я бы ожидать, что она не называться вообще, но почему это называется? В конце концов, что он форматирует, если нет элементов.
Обновление: Принятый ниже ответ можно использовать. Что касается того, почему он ведет себя так, это потому, что в списке должна быть пустая строка; вы знаете пустую строку, которая выбрана по умолчанию при инициализации combobox в первый раз.
1) Для лучшей помощи раньше, отправьте сообщение [SSCCE] (http://sscce.org/). 2) Всегда копировать/вставлять вывод ошибок и исключений. –
downcasting dangereous, use 'instanceof' – nachokk
никогда не устанавливать значение для компонента рендеринга внутри XxxRenderer – mKorbel