【问题标题】:Java ArrayLists into JListJava ArrayLists 转换成 JList
【发布时间】:2010-07-16 23:37:25
【问题描述】:

好的,所以我正在处理我的一小部分库存。我把大部分都记下来了。我正在尝试将字符串项添加到 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) {

    }
}

【问题讨论】:

    标签: java arrays arraylist jlist


    【解决方案1】:

    JList 提供了一个构造函数 JList(Object[]),你可以在使用 toArray 解压你的 ArrayList 之后调用它()

    list = new JList(arr.toArray())
    

    【讨论】:

    • 很棒的帖子...但现在我有一个新错误...请参阅我的新主题:|
    【解决方案2】:

    试试这个:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

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

            【讨论】:

              【解决方案7】:

              如果您使用拖放组件,请将您的列表命名为“itemList”,我想 arr 是您的数组列表的名称,其中包含一些字符串数据:

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

              我希望这对你有用。

              【讨论】:

                【解决方案8】:

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

                ArrayList<String> arr = new ArrayList<String>();
                
                arr.add("Hatchet");
                arr.add("Sword");
                arr.add("Shield");
                
                JList<Object> list = JList<Object>(arr.toArray());
                

                【讨论】:

                  【解决方案9】:

                  如果你有一个在 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());
                  

                  【讨论】:

                  • 你在哪里得到 setListData 函数?
                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2012-02-08
                  相关资源
                  最近更新 更多