2010-07-16 161 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); 
       } 
      }); 
     } 
    }