it-roy-ru.com

Java ArrayLists в 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) {

    }
}
11
nn2

JList предоставляет конструктор JList (Object []) , который вы можете вызвать после распаковки вашего ArrayList <String> using toArray () :

list = new JList(arr.toArray())
23
Alain O'Dea

У меня были проблемы с 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));
2
user4910021

Попробуй это:

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

У меня были проблемы с методом 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
Jon Sansoucie

Я просто реализовал интерфейс 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);
                }
            });
        }
    }
0
Marat

если вы используете компоненты перетаскивания, назовите свой список как «itemList», и я полагаю, что arr - это имя вашего массива, который содержит некоторые строковые данные:

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

Я надеюсь, что это будет работать для вас.

0
Mukesh Chauhan

Сводка конструктора
JList() Создает JList с пустой моделью только для чтения.
JList(ListModel dataModel) Создает JList, который отображает элементы из указанной ненулевой модели.
JList(Object[] listData) Создает JList, который отображает элементы в указанном массиве.
JList(Vector<?> listData) Создает JList, который отображает элементы в указанном векторе. 

0
Romain Hippeau

Вы можете передать суперкласс Object как тип JList.

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

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

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