有没有办法获取JList中的所有元素?

Mat*_*ram 12 java swing list jlist

我想知道是否有办法检索已添加到JList的所有元素的列表.例如,我希望JList从自定义单元格渲染器返回一个数组或字符串或JLabel列表.

Nik*_*zov 22

您可以使用getModel方法获取ListModel.然后使用getElementAtgetSize方法来构建数组或列表或任何你想要的.

  • 另请注意,如果您使用的是[DefaultListModel](https://docs.oracle.com/javase/8/docs/api/javax/swing/DefaultListModel.html),则可以使用方法[toArray()](https ://docs.oracle.com/javase/8/docs/api/javax/swing/DefaultListModel.html#toArray--)获取所有元素的数组. (12认同)

Bla*_*nka 4

是的当然。你getElementAt()有一个循环。

例子:

import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.JScrollPane;
import javax.swing.WindowConstants;

public class Jlist {
    JFrame frame;
    JList<String> list;
    JButton button;

    public Jlist(){
        init();
    }

    public void init(){
        frame = new JFrame("Sample");
        frame.setSize(300, 300);
        frame.setLayout(new  BorderLayout(30, 30));

        DefaultListModel<String> model = new DefaultListModel<>();
        model.addElement("A");
        model.addElement("B");
        model.addElement("C");
        model.addElement("D");
        model.addElement("E");

        list = new JList<>();

        list.setModel(model);
        JScrollPane pane = new JScrollPane(list);
        pane.setViewportView(list);

        button = new JButton("Get");
        button.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent evt) {
                buttonActionPerformed();
            }
        });


        frame.add(pane, BorderLayout.NORTH);
        frame.add(button, BorderLayout.CENTER);
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        frame.pack();
        frame.setVisible(true);
    }
    public void buttonActionPerformed(){
        for(int i = 0; i< list.getModel().getSize();i++){
            System.out.println(list.getModel().getElementAt(i));
        }
    }
    public static void main(String[] args) {
        new Jlist();
    }
}
Run Code Online (Sandbox Code Playgroud)