2010-07-16 4 views
10

OK, donc je fais une petite partie de mon inventaire. Je suis le plus bas. J'essaye d'ajouter des éléments de chaîne à un ArrayList puis l'ajoute à un JList. Cependant, je reçois cette erreur lorsque je compile:Java ArrayLists dans JList

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); 

Il est probablement une erreur de débutant que je fais ...:/

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) { 

    } 
} 

Répondre

21

JList fournit un constructeur JList (Object []) que vous pouvez appeler après avoir déballé votre ArrayList < Chaîne > utilisant toArray():

list = new JList(arr.toArray()) 
+1

post Grande ... mais maintenant j'ai une nouvelle erreur ... voir mon nouveau sujet: | – nn2

0

Résumé Constructor
JList() Construit un JList avec un modèle vide, en lecture seule. Construit un JList qui affiche les éléments du modèle spécifié, non null. Construit un JList qui affiche les éléments dans le tableau spécifié. Construit un JList qui affiche les éléments dans le vecteur spécifié.

2

J'ai eu des problèmes avec la toArray() méthode provoquant des exceptions, j'ai donc construit une méthode générique rapide pour convertir. Peut-être que quelqu'un le trouvera utile aussi. Je sais que c'est un vieux billet 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 passer dans, comme

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

Ensuite, il suffit d'appeler à partir de votre code

populateArrayFromList(arr, arrayList); 
1

J'ai eu des problèmes avec toArray() et JListe pour mon projet aussi. J'ai fait quelques recherches et j'ai essayé quelques trucs et trouvé quelque chose qui fonctionne. Hope it helps 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

Essayez ceci:

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

J'ai simplement mis en œuvre 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); 
       } 
      }); 
     } 
    }