Как заполнить JComboBox с помощью ArrayList?

Мне нужно заполнить JComboBox массивом ArrayList. Есть ли способ сделать это?

Ответы

Ответ 1

Используйте метод toArray() класса ArrayList и передайте его в конструктор JComboBox

Смотрите JavaDoc и tutorial для более Информация.

Ответ 2

Элегантный способ заполнить поле со списком с массивом :

List<String> ls = new ArrayList<String>(); 
jComboBox.setModel(new DefaultComboBoxModel(ls.toArray()));

Ответ 3

Мне не нравится принятый ответ или комментарий @fivetwentysix относительно того, как это решить. Он получает один метод для этого, но не дает полного решения использовать toArray. Вам нужно использовать toArray и дать ему аргумент, что массив правильного типа и размера, чтобы вы не попали в массив объектов. В то время как массив объектов будет работать, я не думаю, что это лучшая практика на строго типизированном языке.

String[] array = arrayList.toArray(new String[arrayList.size()]);
JComboBox comboBox = new JComboBox(array);

В качестве альтернативы вы также можете поддерживать сильную типизацию, просто используя цикл for.

String[] array = new String[arrayList.size()];
for(int i = 0; i < array.length; i++) {
    array[i] = arrayList.get(i);
}
JComboBox comboBox = new JComboBox(array);

Ответ 4

DefaultComboBoxModel dml= new DefaultComboBoxModel();
for (int i = 0; i < <ArrayList>.size(); i++) {
  dml.addElement(<ArrayList>.get(i).getField());
}

<ComboBoxName>.setModel(dml);

Понятный код. Отредактируйте <> с нужным типом.

Ответ 5

Я считаю, что вы можете создать новый вектор, используя свой ArrayList, и передать его конструктору JCombobox.

JComboBox<String> combobox = new JComboBox<String>(new Vector<String>(myArrayList));

Мой пример - это только строки.

Ответ 6

Для справок в будущем:

//first create the array;
String[] comboBoxArray = {"item1","item2","item3"};


//create JComboBox and assign it to the comboBox
JComboBox comboBox1 = new JComboBox(comboBoxArray);

Ответ 7

Проверьте этот простой код

import java.util.ArrayList;
import javax.swing.JComboBox;
import javax.swing.JFrame;


public class FirstFrame extends JFrame{

    static JComboBox<ArrayList> mycombo;

    FirstFrame()
    {
        this.setSize(600,500);
        this.setTitle("My combo");
        this.setLayout(null);

        ArrayList<String> names=new ArrayList<String>();   
        names.add("jessy");
        names.add("albert");
        names.add("grace");
        mycombo=new JComboBox(names.toArray());
        mycombo.setBounds(60,32,200,50);
        this.add(mycombo);
        this.setVisible(true); // window visible
    }   

    public static void main(String[] args) {

        FirstFrame frame=new FirstFrame();  

    }

}

Ответ 8

Комбинируя существующие ответы (этот и этот), можно получить правильный тип безопасного способа добавления ArrayList в JComboBox:

private DefaultComboBoxModel<YourClass> getComboBoxModel(List<YourClass> yourClassList)
{
    YourClass[] comboBoxModel = yourClassList.toArray(new YourClass[0]);
    return new DefaultComboBoxModel<>(comboBoxModel);
}

В вашем коде GUI вы устанавливаете весь список в свой JComboBox следующим образом:

DefaultComboBoxModel<YourClass> comboBoxModel = getComboBoxModel(yourClassList);
comboBox.setModel(comboBoxModel);

Ответ 9

Я думаю, что это решение

ArrayList<table> libel = new ArrayList<table>();
try {
SessionFactory sf = new Configuration().configure().buildSessionFactory();
Session s = sf.openSession();
s.beginTransaction();

String hql = "FROM table ";

org.hibernate.Query query = s.createQuery(hql);
libel= (ArrayList<table>) query.list();
Iterator it = libel.iterator();
while(it.hasNext()) {
table cat = (table) it.next();

cat.getLibCat();//table colonm getter


combobox.addItem(cat.getLibCat());
}
s.getTransaction().commit();
s.close();
sf.close();
} catch (Exception e) {
System.out.println("Exception in getSelectedData::"+e.getMessage());