java,怎么给一个JList添加元素啊????

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java,怎么给一个JList添加元素啊????相关的知识,希望对你有一定的参考价值。

看Java API就知道了。
比如可以这样:
String[] message="数据一","数据二","数据三";
JList jlist=new JList(message);
这样就OK,还有其他的方法,多看API追问

我就是这样创建一个JList列表的啊,但是JList没有add()方法,所以我不知道怎么动态添加和动态删除一个元素....亲,你指点一下吧.....

追答

看到JList的API中Jlist的构造方法分别是:
JList()
JList(ListModel dataModel)
JList(Object[] listData)
JList(Vector listData)

看到这里,我第一理解直接用的是第三种。但是你说要动态,不得不联想起JTable的动态。JTable是用得最多的。那么这里也有添加Model。就是第二种。
那么直接查ListModel的应用就是了。动态方法如下
DefaultListModel dlm = new DefaultListModel();
dlm.addElement("内容");
......
JList jl = new JList();
jl.setModel(dlm);
//删除所有信息:
/*
dlm.clear();
jl.setModel(dlm);
*/
删除指定项:
/*
dlm.remove(int index);
jl.setModel(dlm);
*/

跟JTable的用法是一样的。

追问

如果一定要用JList(Object[] listData)呢,怎么实现动态的删除和添加元素啊....

.

追答

JList(Object[] listData)的用法上面就用到了啊。
String[] message="数据一","数据二","数据三";
JList jlist=new JList(message);

String[]数组也是Object[]对象啊。

追问

你用DefaultListModel进行动态的添加元素我明白了,但是,用JList jlist=new JList(message);动态添加数组我不知道....???

追答

既然它的构造方法里有JList(Object[] listData)。那么你说String[]是不是Object[]嘛?
既然参数是Object[]数组,那么就可以传String[]、int[]、Double[]、Float[]、Byte[]都可以。我上面用的String[]。只要是数值类型的数组都可以传啊。
JList(Vector listData)的话就是List/Map都可以传说的是数据类型的范型。比如List

、Map。。。。。。。

参考技术A 使用 ListModel

DefaultListModel<String> model = new DefaultListModel<>();
JList<String> list = new JList<>(model);
model.addElement("Hello");
参考技术B 上面这些人发的代码都不行啊,又没报错又没效果,奇怪的很 参考技术C 百度一下吗

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

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

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

【问题讨论】:

是的,有办法。大概有几个。检查文档。对于每种方法,以及How to use Lists。 docs.oracle.com/javase/tutorial/uiswing/components/list.html 【参考方案1】:

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

【讨论】:

另外请注意,如果您使用的是DefaultListModel,您可以使用toArray() 方法获取所有元素的数组。【参考方案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);

【讨论】:

以上是关于java,怎么给一个JList添加元素啊????的主要内容,如果未能解决你的问题,请参考以下文章

java新手求助-急急急-关于向JList中添加元素

java swing 中的列表框JList如何在程序中动态的添加和删除元素

java 中的那个Jlist怎么才能显示东西

关于JAVA中JLIST显示问题

如何清除 Java 中的 JList?

java将数组刷新到jList中