web-dev-qa-db-fra.com

Java ArrayLists dans JList

OK, je fais une petite partie de mon inventaire. J'en ai la plupart. J'essaie d'ajouter des éléments de chaîne à un ArrayList, puis de l'ajouter à une JList. Cependant, je reçois cette erreur lorsque je compile:

C:\Users\Dan\Documents\DanJavaGen\inventory.Java:30: cannot find symbol
symbol  : constructor JList(Java.util.ArrayList<Java.lang.String>)
location: class javax.swing.JList
        list = new JList(arr);

C'est probablement une erreur de recrue que je commets ...: /

Code:

import Java.applet.Applet;
import Java.awt.*;
import javax.swing.*;
import javax.swing.JList;
import Java.awt.event.*;
import Java.util.ArrayList;
import Java.io.*;
import Java.util.*;

public class inventory extends JApplet implements MouseListener {

public static String newline;
public static JList list;
int gold = 123;

    public void init() {



ArrayList<String> arr = new ArrayList<String>();
arr.add("Hatchet");
arr.add("Sword");
arr.add("Shield");
arr.add(gold + " Gold");
System.out.println("You have " + arr.size() + " items in your inventory.");
showInventory(arr);



        list = new JList(arr);

        add(list);

        list.addMouseListener(this);

        list.setVisible(true);

    }

public static void showInventory (ArrayList<String> theList) {
for (int i = 0; i < theList.size(); i++) {
System.out.println(theList.get(i));
}
}


    public void mousePressed(MouseEvent e) { }

    public void mouseReleased(MouseEvent e) {
        Object index = list.getSelectedValue();
       System.out.println("You have selected: " + index);
    }

    public void mouseEntered(MouseEvent e) { }

    public void mouseExited(MouseEvent e) { }

    public void mouseClicked(MouseEvent e) { }




    public void Paint(Graphics g) {

    }
}
11
nn2

JList fournit un constructeur JList (Object []) que vous pouvez appeler après avoir décompressé votre ArrayList <String> using toArray () :

list = new JList(arr.toArray())
23
Alain O'Dea

J'ai également eu des problèmes avec toArray () et JList pour mon projet. A fait des recherches et essayé quelques choses et trouvé quelque chose qui fonctionne. J'espère que ça aide tout le monde:

ArrayList<String> i = new ArrayList<>();
String[] str = new String[i.size()];
//Assuming there is data in your list
JList<String> list = new JList<>(i.toArray(str));
2
user4910021

Essaye ça:

DefaultListModel listModel = new DefaultListModel();
for (int i = 0; i < arrayList().size(); i++)
{
    listModel.addElement(arrayList().get(i));
}
jList1.setModel(listModel);
2
Lakshan

J'avais des problèmes avec la méthode toArray() qui provoquait des exceptions, alors j'ai construit une méthode générique rapide pour convertir. Peut-être que quelqu'un trouvera cela utile aussi. Je sais que ceci est un ancien post mais je parie que c'est toujours vu de temps en temps. Voici la méthode:

private <T> void populateArrayFromList(T[] arr, ArrayList<T> arrayList) {
    System.out.println("Array size " + arr.length);
    System.out.println("ArrayList size " + arrayList.size());
    for (int i = 0; i < arrayList.size(); i++) {
        arr[i] = arrayList.get(i);
    }
}

Il suffit de créer le tableau avant de le transmettre, comme

String[] arr = new String[arrayList.size()];

Ensuite, appelez-le depuis votre code

populateArrayFromList(arr, arrayList);
2
Jon Sansoucie

J'ai simplement implémenté l'interface ListModel:

    package proba;

    import Java.awt.BorderLayout;
    import Java.awt.EventQueue;
    import Java.util.ArrayList;
    import javax.swing.JFrame;
    import javax.swing.JList;
    import javax.swing.JScrollPane;
    import javax.swing.ListModel;
    import javax.swing.ListSelectionModel;
    import javax.swing.event.ListDataListener;

    public class Proba extends JFrame {
        ArrayList<String> al = new ArrayList<>();
        public Proba() {
            al.add("1111111");
            al.add("2222222");
            al.add("3333333");
            setLayout(new BorderLayout());
            MyListModel lm = new MyListModel();
            JList l = new JList(lm);
            l.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
            JScrollPane sp = new JScrollPane(l);
            add(sp, BorderLayout.CENTER);
        }

        class MyListModel implements ListModel {
            @Override
            public int getSize() {
                return al.size();
            }
            @Override
            public Object getElementAt(int index) {
                return al.get(index);
            }
            @Override
            public void addListDataListener(ListDataListener l) {
            }
            @Override
            public void removeListDataListener(ListDataListener l) {
            }
        }

        public static void main(String[] args) {
            EventQueue.invokeLater(new Runnable() {
                @Override
                public void run() {
                    Proba app = new Proba();
                    app.setSize(600, 480);
                    app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
                    app.setVisible(true);
                }
            });
        }
    }
0
Marat

si vous utilisez des composants glisser-déposer, nommez votre liste comme "itemList" et je suppose que arr est le nom de votre liste de contrôle qui contient des données de chaîne, puis:

`DefaultComboBoxModel model=
new DefaultComboBoxModel(arr.toArray(new String[arr.size()]));
itemList.setModel(model);`

J'espère que cela fonctionnera pour vous.

0
Mukesh Chauhan

Résumé du constructeur
JList() Construit une JList avec un modèle vide, en lecture seule.
JList(ListModel dataModel) Construit une JList qui affiche les éléments du modèle spécifié, non nul.
JList(Object[] listData) Construit une JList qui affiche les éléments du tableau spécifié.
JList(Vector<?> listData) Construit une JList qui affiche les éléments du vecteur spécifié. 

0
Romain Hippeau

Vous pouvez passer Object superclass comme type de JList.

ArrayList<String> arr = new ArrayList<String>();

arr.add("Hatchet");
arr.add("Sword");
arr.add("Shield");

JList<Object> list = JList<Object>(arr.toArray());
0
bEn