2016-10-17 9 views
0

JComboBox 모델에 포함 된 모든 항목의 문자열 표현을 가져오고 싶습니다. 어떻게해야합니까?JComboBox 항목 가져 오기 문자열 표현

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

이 나에게 다른 콤보 항목 이상의 문자열을 제공합니다 -의 CellRenderer는 모든 콤보 상자 항목의 레이블 텍스트에 대해 결정 하는가?

답변

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는 String을 반환하지 않지만 표시 할 수 있다고 생각되는 JComponent를 반환 할 수 있기 때문에 모든 경우에 사용할 수는 없습니다. 또한 아이콘, 이미지, 컬러 패치 또는 더 복잡한 것.

여전히, 당신은 콤보 상자 'CellRenderer에 액세스하고 각 콤보 박스 항목에 대해 cellRenderer에게 문의 할 수 있습니다. JComponent가 돌려 주어집니다. 그것이 JLabel (아마도 자주 사용되는) 인 경우 getText() 메서드를 사용하여 텍스트를 추출합니다. 뭔가 같이 :

if (component instance JLabel) { 
    componentTexts.add ((JLabel) component).getText()); 
}