将Java ArrayLists转换为JList

时间:2010-07-16 23:37:25

标签: java arrays arraylist jlist

好的,所以我只做了一小部分库存。我得到了大部分。我正在尝试将字符串项添加到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) {

    }
}

9 个答案:

答案 0 :(得分:23)

JList 提供了一个构造函数 JList(Object []),您可以在使用 toArray解压缩 ArrayList&lt; String&gt; 后调用它()

list = new JList(arr.toArray())

答案 1 :(得分: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);

答案 2 :(得分:2)

我的项目也遇到了toArray()和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));

答案 3 :(得分:2)

试试这个:

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

我只是实现了ListModel接口:

{{1}}

答案 6 :(得分:0)

如果您正在使用拖放组件,则将列表命名为“ itemList”,我想arr是包含一些字符串数据的arraylist的名称,然后:

`DefaultComboBoxModel model=
new DefaultComboBoxModel(arr.toArray(new String[arr.size()]));
itemList.setModel(model);`

我希望这对您有用。

答案 7 :(得分:0)

您可以传递Object超类作为JList的类型。

ArrayList<String> arr = new ArrayList<String>();

arr.add("Hatchet");
arr.add("Sword");
arr.add("Shield");

JList<Object> list = JList<Object>(arr.toArray());

答案 8 :(得分:0)

如果您有一个循环来获取mysql中的数据 你可以这样放

     while(result.next()){
     itemid = result.getInt("id");
     itempice = result.getInt("price");
     itemname = result.getString("itemname");
     arraylist.add(itemname+" Price: "+itempice);
     }
     jList.setListData(arraylist.toArray());