J'ai besoin de remplir un JComboBox avec un ArrayList. Est-ce qu'il y a un moyen de faire ça?
Manière élégante de remplir la liste déroulante avec une liste de tableaux :
List<String> ls = new ArrayList<String>();
jComboBox.setModel(new DefaultComboBoxModel(ls.toArray()));
Je n'aime pas la réponse acceptée ou le commentaire de @ fivetwentysix sur la façon de résoudre ce problème. Il obtient une méthode pour ce faire, mais ne donne pas la solution complète à l'utilisation de toArray. Vous devez utiliser toArray et lui donner un argument qui est un tableau de type et de taille corrects afin de ne pas vous retrouver avec un tableau Object. Bien qu'un tableau d'objets fonctionne, je ne pense pas que ce soit la meilleure pratique dans un langage fortement typé.
String[] array = arrayList.toArray(new String[arrayList.size()]);
JComboBox comboBox = new JComboBox(array);
Alternativement, vous pouvez également conserver un typage fort en utilisant simplement une boucle 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);
DefaultComboBoxModel dml= new DefaultComboBoxModel();
for (int i = 0; i < <ArrayList>.size(); i++) {
dml.addElement(<ArrayList>.get(i).getField());
}
<ComboBoxName>.setModel(dml);
Code compréhensible. Modifiez <> au besoin.
Je crois que vous pouvez créer un nouveau vecteur à l'aide de votre ArrayList et le transmettre au constructeur JCombobox.
JComboBox<String> combobox = new JComboBox<String>(new Vector<String>(myArrayList));
mon exemple n'est que des chaînes cependant.
En combinant les réponses existantes ( celle-ci et celle-ci ), le bon type de méthode sûre pour ajouter un ArrayList
à un JComboBox
est le suivant :
private DefaultComboBoxModel<YourClass> getComboBoxModel(List<YourClass> yourClassList)
{
YourClass[] comboBoxModel = yourClassList.toArray(new YourClass[0]);
return new DefaultComboBoxModel<>(comboBoxModel);
}
Dans votre code GUI
, vous définissez la liste entière dans votre JComboBox
comme suit:
DefaultComboBoxModel<YourClass> comboBoxModel = getComboBoxModel(yourClassList);
comboBox.setModel(comboBoxModel);
Vérifiez ce code simple
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();
}
}