簡體   English   中英

有沒有辦法獲取 JList 中的所有元素?

[英]Is there a way to get all elements in a JList?

我想知道是否有辦法檢索已添加到 JList 的所有元素的列表。 例如,我希望 JList 從自定義單元格渲染器返回字符串或 JLabel 的數組或列表。

您可以使用getModel方法來獲取ListModel 然后使用getElementAtgetSize方法來構建數組或列表或任何你想要的。

當然是。 您使用循環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();
    }
}

試試這個...

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

我還沒有看到有人使用最簡潔的方法來做到這一點。 假設您使用的是 Java 8+:

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

我個人更喜歡它而不是任何循環方法。

我們也可以使用 Message 對話框從 JList (named ) myL 中獲取元素,因此您可以使用以下方法對 JButton 對象執行操作。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM