Суть :
Не получается присвоить "кнопке-список" список своих элементов
Есть
ArrayList<String> users = new ArrayList();
также есть строка в классе с GUI
jComboBox1.setModel(new javax.swing.DefaultComboBoxModel<>(new String[]{"Item 1", "Item 2", "Item 3", "Item 4"}));
работаю в NetBeans,не удается с присвоить кнопке со списком свой список. На зарубежных интернетах нашел такое:
jComboBox1.removeAllItems();
for (int i = 0; i < users.size(); i++) {
jComboBox1.addItem(users.get(i));
}
ПРОБЛЕМЫ ПРИКРЕПЛЕННЫХ НИЖЕ ОТВЕТОВ :
jComboBox1.setModel(new javax.swing.DefaultComboBoxModel<>(new String[]{"Item 1", "Item 2", "Item 3", "Item 4"}));
jComboBox1.removeAllItems();
String [] items = new String [10];
for (int i = 0; i < new ListFriend().nameSurname.size(); i++) {
items[i] = new ListFriend().nameSurname.get(i);
}
jComboBox1.setModel(new javax.swing.DefaultComboBoxModel<>(items));
в итоге элементы-то я получил,но они не отображаются. В чём причина?
jComboBox1.setModel(myModel);
myModel.add("Hello");
myModel.add("Hel23lo");
myModel.add("Hell3wso");
for (int i = 0; i < new ListFriend().nameSurname.size(); i++) {
String r = new ListFriend().nameSurname.get(i);
myModel.add(r);
}
если попробовать так то тоже не работает,он не закидывает элементы массива в список,кроме тех,которые были добавлены через просто myModel.add он не дает возможность добавлять через цикл.
если написать даже так :
for (int i = 0; i < 5; i++) {
String r = "hello world";
new MyModel().add(r);
}
он всё равно не будет добавлять их.
Есть несколько способов динамически добавлять в JComboBox
элементы. Самым правильным способом будет создать объект реализующий интерфейс ComboBoxModel
и передать его в JComboBox
.
После этого добавление и удаление элементов нужно делать в этом объекте, а JComboBox
будет отображать изменения автоматически.
Вот простой вариант реализации для хранения строк (String).
public class MyModel extends AbstractListModel<String> implements ComboBoxModel<String> {
private List<String> list;
private String selected;
public MyModel() {
list = new ArrayList<>();
}
public void remove(String item) {
list.remove(item);
fireContentsChanged(this, 0, list.size());
}
public void add(String item) {
list.add(item);
fireContentsChanged(this, 0, list.size());
}
@Override
public int getSize() {
return list.size();
}
@Override
public String getElementAt(int index) {
return list.get(index);
}
@Override
public void setSelectedItem(Object item) {
selected = (String) item;
}
@Override
public Object getSelectedItem() {
return selected;
}
}
Использовать это так. Создание:
MyModel myModel = new MyModel();
JComboBox<String> = new JComboBox<>(myModel);
Добавление/удаление элементов:
myModel.add("hello");
myModel.add("world");
myModel.remove("hello");
// добавить элементы в цикле
// поскольку мы храним строки, то при добавлении элемента его необходимо привести типу String
for(int i = 0 ; i < 10 ; i++) {
myModel.add("" + i); // сложение с пустой строкой один из способов приведения к String
}
Если у вас есть готовый список строк, то его можно добавить вот так
List<String> r = new ArrayList<>();
// предположим, что тут r заполняется значениями
// добавляем значения в ComboBox
for(String i: r) {
myModel.add(i);
}
Вот тут можно найти рабочий пример приложения - SimpleMVC, правда там я использую JList
, но принцип такой же.
Если про javax.swing.JComboBox<E>
речь, то он в конструкторе массив принимает
JComboBox(E[] items)
Creates a JComboBox that contains the elements in the specified array.
String[] items = {
"item1",
"item2",
"item3"
};
JComboBox comboBox = new JComboBox(items);
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
ЗдравствуйтеСтолкнулся с такой проблемой, у меня при инитиализации приложения создается DocumentListener, который отвечает за подсветку синтаксика,...