Изменение содержимого JComboBox

Я хотел бы изменить содержимое списка JComboBox (например, добавить другой список вместо старого). Есть ли способ, которым я мог бы это сделать? Заранее спасибо!


person acostache    schedule 29.12.2008    source источник
comment
мне тоже нужен этот ответ. Хотя я использовал JCombobox(newData); снова и снова ранее. Но кажется подавляющим. Спасибо @AndreiC. :D   -  person gumuruh    schedule 17.04.2012


Ответы (5)


Если вы хотите иметь возможность добавлять и удалять элементы из существующего поля со списком во время выполнения, базовая модель данных для поля со списком должна быть MutableComboBoxModel.

Google для этого класса для информации об интерфейсе и для примеров того, как его использовать.

Обратите внимание: если вы хотите, чтобы пользователь вводил новые значения, вам также необходимо сделать поле редактируемым.

Несколько ссылок на примеры можно найти здесь.

person Uri    schedule 29.12.2008

Я нашел эту тему и придумал быстрое (и, вероятно, грязное) решение:

oldComboBox.setModel(new JComboBox<>(new_items).getModel());
person pal    schedule 05.12.2011
comment
действительно грязно - самое большое расстояние от простого решения, которое я когда-либо видел (а я видел довольно много, креативность в том, чтобы делать что-то неправильно, огромна :-) - person kleopatra; 05.12.2011
comment
плюс уже было принятое решение этого вопроса. есть ли причина, по которой вы считаете, что это было неразумно, и почему ОП/сообщество выиграет от этого (через 3 года после принятия решения)? - person aishwarya; 05.12.2011
comment
Я не прочитал ответы полностью - урок усвоен. Это хреновое решение по замене модели - что уже было предложено, и можно сделать более изящно - person pal; 18.12.2011
comment
Почему вы говорите, что это плохой ответ? В отличие от других, я думаю, что это довольно умный ответ! Спасибо @pal. - person Mehran; 28.11.2012
comment
@Mehran Я благодарю приятеля за публикацию этого решения, потому что оно должно работать. Тем не менее, другие комментарии правильно указывают, что это грязное исправление, а не простое. Сброс всей модели для JComboBox близок к тому, чтобы попросить графический интерфейс полностью переделать этот JComboBox. Было бы лучше, если бы программа использовала MutableComboBoxModel, упомянутую в принятом ответе, что позволяет программе редактировать существующий JComboBox вместо того, чтобы делать это, что эквивалентно удалению большей части данных JComboBox и их воссозданию. - person Variadicism; 29.08.2014

Конечно вы можете. Существует несколько методов манипулирования JComboBox с использованием модели списка по умолчанию. Взгляните на методы удаления* и добавления*:

http://java.sun.com/javase/6/docs/api/javax/swing/JComboBox.html

person Community    schedule 29.12.2008
comment
Для меня лучший ответ. x.removeAllItems(); x.addItem(obj1); x.addItem(obj2); охватывает почти все ситуации, с которыми я обычно сталкиваюсь. И это ПОЦЕЛУЙ. - person Pimp Trizkit; 03.03.2016

Вы также можете полностью заменить модель с помощью setModel().

Но после написания все большего количества пользовательских интерфейсов я считаю более полезным написать пользовательскую модель ComboBoxModel для переноса структуры данных, которую представляет ComboBox. Это более юнит-тестируемо и чище, ИМХО.

person Phil    schedule 29.12.2008
comment
К сожалению, не все без проблем справляется со сменой модели. - person Tom Hawtin - tackline; 29.12.2008

Библиотека Glazed Lists очень полезна, когда вы хотите подключить какой-либо изменяемый список к элементу управления с графическим интерфейсом. Это большая библиотека, которая может не подходить для вашего проекта, но взгляните на их скринкасты и оцените сами. Он поддерживает множество связанных вещей, таких как фильтрация и автозаполнение, и может сэкономить вам много ручной работы.

person Barend    schedule 29.12.2008