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) {
}
}
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())
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));
Essaye ça:
DefaultListModel listModel = new DefaultListModel();
for (int i = 0; i < arrayList().size(); i++)
{
listModel.addElement(arrayList().get(i));
}
jList1.setModel(listModel);
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);
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);
}
});
}
}
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.
Résumé du constructeurJList()
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é.
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());