2016-10-17 8 views
0

Я хотел бы получить строковое представление всех элементов, содержащихся в модели JComboBox, как это сделать?Получить строковое представление элементов JComboBox

ListModel model = combobox.getModel(); 
    for(int i = 0; i < model.getSize(); i++) 
    { 
     componentTexts.add(model.getElementAt(i).toString()); 
    } 

Это дает мне разные строки, чем пункты Комбобокса - CellRenderer решение о тексте этикетки на каждом элементе управления ComboBox?

ответ

1

Если оказанные текст отличается от ToString() объекта, то вам необходимо вызвать визуализатор непосредственно.

Код может быть что-то вроде:

ListCellRenderer renderer = comboBox.getRenderer(); 

Object child = comboBox.getAccessibleContext().getAccessibleChild(0); 
BasicComboPopup popup = (BasicComboPopup)child; 
JList list = popup.getList(); 

ListModel model = combobox.getModel(); 
for(int i = 0; i < model.getSize(); i++) 
{ 
    Object value = model.getElementAt(i); 
    JLabel label = (JLabel)renderer.getListCellRendererComponent(list, value, i, false, false); 
    components.add(label.getText()); 
} 
+0

Это один работает как шарм! Большое спасибо! – rzezimierz

+0

model.getElement (i) должен быть model.getElementAt (i) - изменить текст сообщения, потому что SO говорит, что редактирование должно быть не менее 6 символов – rzezimierz

0

В принципе, вы не можете в каждом случае, потому что CellRenderer не возвращает строку, но может возвращать любой JComponent, который, по его мнению, подходит для отображения, например. также значок, изображение, цветовой патч или что-то более сложное.

Тем не менее, вы можете попытаться получить доступ к CellRenderer combobox и запросить cellRenderer для каждого элемента Combobox. Это вернет вам JComponent. Если это JLabel (который, вероятно, часто бывает), вы используете метод getText() для извлечения текста. Что-то вроде:

if (component instance JLabel) { 
    componentTexts.add ((JLabel) component).getText()); 
} 
Смежные вопросы