2010-07-16 132 views
10

好吧,我正在做我的库存的一小部分。我得到了很多。我试图将字符串项添加到ArrayList然后将其添加到JList。当我编译不过,我得到这个错误:Java ArrayList进入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); 

这也可能是一些新手的错误,我做的...:/

代码:

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

    } 
} 

回答

21

JList的提供了一个构造函数的JList(Object []对象),你可以拆箱的ArrayList使用指定者() <字符串>后拨打:

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

伟大的职位......但现在我有一个新的错误...看到我的新主题:| – nn2 2010-07-17 00:02:12

0

构造方法摘要
JList()使用空的只读模型构造一个JList
JList(ListModel dataModel)构造一个JList,它显示来自指定的非空模型的元素。
JList(Object[] listData)构造一个显示指定数组中元素的JList
JList(Vector<?> listData)构造一个显示指定Vector中元素的JList

2

我有麻烦与toArray()方法导致异常,所以我建立了一个快速的通用方法来转换。也许有人会发现它也很有用。我知道这是一个旧帖子,但我敢打赌,它仍然不时被观看。这里的方法:

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

只需创建你在传递前阵,像

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

然后,只需从你的代码中调用它

populateArrayFromList(arr, arrayList); 
1

我遇到了麻烦指定者()和我的项目的JList。做了一些研究并尝试了一些东西,发现了一些有用的东西。希望它可以帮助大家:

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

试试这个:

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

我只是实现的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); 
       } 
      }); 
     } 
    }