Java ArrayLists转换为JList

好的,所以我只做了一小部分库存。 我把它的大部分都放下了。 我正在尝试将字符串项添加到ArrayList,然后将其添加到JList。 但是,我在编译时收到此错误:

C:\Users\Dan\Documents\DanJavaGen\inventory.java:30: cannot find symbol symbol : constructor JList(java.util.ArrayList) 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 arr = new ArrayList(); 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 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提供了一个构造函数JList(Object []) ,您可以在使用toArray()压缩ArrayList 之后调用它:

 list = new JList(arr.toArray()) 

尝试这个:

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

我在导致exception的toArray()方法时遇到了麻烦,因此我构建了一个快速通用的方法来进行转换。 也许有人会发现它也很有用。 我知道这是一个老post,但我敢打赌,它仍然不时被观看。 这是方法:

 private  void populateArrayFromList(T[] arr, ArrayList 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); 

我的项目也遇到了toArray()和JList的问题。 做了一些研究,尝试了一些东西,发现了一些有效的东西。 希望它能帮助每个人:

 ArrayList i = new ArrayList<>(); String[] str = new String[i.size()]; //Assuming there is data in your list JList list = new JList<>(i.toArray(str)); 

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

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