2016-10-17 11 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()と異なる場合は、あなたは直接レンダラを起動する必要があります。この1つは魔法のように動作

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)でなければなりません - あなたの投稿を編集できませんので、編集は少なくとも6文字でなければならない – rzezimierz

0

CellRendererはStringを返さず、表示するのに適切なJComponentを返すことができるため、基本的にすべての場合に対応することはできません。アイコン、画像、カラーパッチ、またはもっと複雑なものでもあります。

まだ、コンボボックスのCellRendererにアクセスして、各コンボボックスのitemに対してcellRendererに問い合わせることができます。これにより、JComponentが返されます。それがJLabel(おそらくよくある)であれば、getText()メソッドを使用してテキストを抽出します。何かのように:

if (component instance JLabel) { 
    componentTexts.add ((JLabel) component).getText()); 
} 
関連する問題