2010-07-16 87 views
10

OK, así que estoy haciendo una pequeña parte de mi inventario. Lo tengo MUCHO abajo. Estoy tratando de agregar elementos de cadena a una ArrayList y luego agregar eso a una JList. Sin embargo, estoy recibiendo este error cuando compilo:Java ArrayLists en 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); 

Es probablemente un error de novato que estoy haciendo ...:/

Código:

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

    } 
} 

Respuesta

21

JList proporciona un constructor JList (Object []) que se puede llamar después de desembalar el ArrayList <cadena> usando toArray():

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

Gran post ... pero ahora tengo un nuevo error ... ver mi nuevo tema: | – nn2

0

Sumario de Constructores de
JList() Construye un JList con un modelo vacío de solo lectura.
JList(ListModel dataModel) Construye un JList que muestra elementos del modelo especificado, no nulo.
JList(Object[] listData) Construye un JList que muestra los elementos en el conjunto especificado.
JList(Vector<?> listData) Construye un JList que muestra los elementos en el Vector especificado.

2

tuve problemas con la toArray() método que causa excepciones, así que construí un método genérico rápido para convertir. Quizás alguien lo encuentre útil también. Sé que esta es una publicación anterior, pero apostaré que todavía se ve de vez en cuando. Aquí está el método:

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

Basta con crear la matriz antes de pasarlo en, como

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

A continuación, sólo llamaremos a partir de su código

populateArrayFromList(arr, arrayList); 
1

tuve problemas con toArray() y JList para mi proyecto también. Hice algunas investigaciones e intenté algunas cosas y encontré algo que funciona. Espero que ayude a todos:

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

Prueba esto:

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

simplemente he implementado la interfaz 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); 
       } 
      }); 
     } 
    } 
Cuestiones relacionadas