【问题标题】:Is there a way to get all elements in a JList?有没有办法获取 JList 中的所有元素?
【发布时间】:2012-06-02 14:01:27
【问题描述】:

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

【问题讨论】:

标签: java swing list jlist


【解决方案1】:

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

【讨论】:

【解决方案2】:

当然可以。你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();
    }
}

【讨论】:

    【解决方案3】:

    试试这个...

     String[] myArray = new String[50];
        for (int i = 0; i < jList1.getModel().getSize(); i++) {
                 myArray[i] = String.valueOf(jList1.getModel().getElementAt(i));
            }
    

    【讨论】:

      【解决方案4】:

      我还没有看到任何人使用最简洁的方式来做到这一点。假设您使用的是 Java 8+:

      IntStream.range(0,listModel.size()).mapToObj(listModel::get).collect(Collectors.toList());
      

      我个人更喜欢它而不是任何循环方法。

      【讨论】:

        【解决方案5】:

        我们还可以使用 Message 对话框从 JList (named) myL 中获取元素,因此您可以使用以下方法对 JButton 对象执行操作。

        String item = myL.getSelectedValue();
        if( item == null ){
            JOptionPane.showMessageDialog(null,  "Not selected yet");
        }else{
            JOptionPane.showMessageDialog(null, item);
        }
        

        【讨论】:

          猜你喜欢
          • 2013-07-11
          • 1970-01-01
          • 1970-01-01
          • 2015-01-06
          • 2020-04-07
          • 2011-10-20
          • 2011-07-31
          • 2018-10-31
          • 1970-01-01
          相关资源
          最近更新 更多