Отображение текста выбранного элемента JComboBox только без значка?

У меня есть JComboBox, что его рендерер - это JLabel с Icon для каждого элемента в комбинированном списке:

class ComboBoxRenderer extends JLabel implements ListCellRenderer {
    public Component getListCellRendererComponent(
                JList list,
                Object comboItemObject,
                int comboItemIndex,
                boolean isSelected,
                boolean cellHasFocus) {
        String comboItemTitle = (String)comboItemObject;
        setText( comboItemTitle );
        setIcon( new ImageIcon( getClass().getResource( "/images/myIcon.png" ) ) );

        return this;
    }
}

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


person Brad    schedule 18.07.2011    source источник


Ответы (3)


В коде рендеринга вы можете проверить индекс. Что-то типа:

if (index == -1)
{
    setText(...);
}
else
{
    setText(...);
    setIcon(...);
}

Кроме того, вы не должны читать изображение в коде рендеринга, так как код вызывается часто.

person camickr    schedule 18.07.2011
comment
это похоже на работу для ActionListener, а не для ItemListener +1 - person mKorbel; 18.07.2011
comment
@camickr: Да, это работает ... Большое спасибо. Просто чтобы понять это: когда я говорю (index == -1), он отображает редактор ComboBox, а не всплывающее окно или что? - person Brad; 18.07.2011

тогда вам нужно переопределить isSelected, а extends JLabel бесполезно, потому что рендерер по умолчанию возвращает JLabel как компонент

person mKorbel    schedule 18.07.2011

Чтобы получить текст в combobox;, вам нужен только однострочный код.

Создайте переменную, как я назвал свою Combotext

затем получите SelectedItem из JComboBox.

 ComboText = jComboBox.getSelectedItem(); 
person Jeff    schedule 17.09.2011
comment
1) Ни Combotext, ни ComboText не соответствуют общепринятой номенклатуре Java. Должно быть comboText. 2) JComboBox может содержать Object, поэтому, если вам нужен String, необходимо вызвать jComboBox.getSelectedItem().toString(); - person Andrew Thompson; 17.09.2011
comment
не ответ на вопрос (о разном рендеринге выбранного элемента, а не о том, как получить этот элемент) - person kleopatra; 26.02.2012
comment
каким-то образом оказался здесь, и это было то, что я искал :) - person Kenny Cason; 02.07.2012