简体   繁体   English

将元素添加到JList不起作用

[英]Adding element to JList does not work

I'm trying to add a new element to my empty JList but it doesn't appear. 我正在尝试向我的空JList添加一个新元素,但是它没有出现。 I'm running it on the EDT (I've very low information on that subject) 我正在EDT上运行它(关于该主题的信息很少)

public void populateProjectsList(List<Project> projectsList2) {
    EventQueue.invokeLater(new Runnable() {
        @Override
        public void run() {
            DefaultListModel<String> listModel = (DefaultListModel) projectsList.getModel();
            listModel.clear();
            for (Project project : projectsList2) {
                System.out.println(project.id + ") " + project.name);
                listModel.addElement(project.id + ") " + project.name);
            }
        }
    });
}

System.out.println works, I see the correct output that I wish to be added but the list is still empty as it is. System.out.println有效,我看到了希望添加的正确输出,但是列表仍然是空的。 I tried listModel.addElement in an action listener and it worked. 我在动作侦听器中尝试了listModel.addElement,并且有效。

Your code works fine for instance when called from ListSelectionListener, see below. 例如,从ListSelectionListener调用时,您的代码可以正常工作,请参见下文。

My guess is that you add the items correctly to JList, but they are not seen, because the JList has so small dimensions, that its content cannot be seen. 我的猜测是您将项目正确添加到JList中,但是看不到它们,因为JList的尺寸非常小,无法看到其内容。 Work on the layout of the components in your window, or put some data into JList at the time you add it to the window. 处理窗口中组件的布局,或者在将其添加到窗口时将一些数据放入JList中。 It may well be some other reason, of course. 当然,这可能是其他原因。

A working example 一个有效的例子

import java.awt.EventQueue;
import java.util.ArrayList;
import java.util.List;
import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.JList;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

public class Main 
{
    public static void main(String args[])
    {
        new Main();
    }

    public Main()
    {
        JFrame fr = new JFrame("Hello");

        DefaultListModel<String> model = new DefaultListModel<String>();
        model.addElement("hello");
        model.addElement("hi");
        model.addElement("ola");

        projectsList = new JList<>(model);
        fr.add(projectsList);
        fr.pack();
        fr.setVisible(true);

        projectsList.addListSelectionListener(
                new ListSelectionListener() 
                {
                    @Override
                    public void valueChanged(ListSelectionEvent e) 
                    {
                        List<Project> toAdd = new ArrayList<>();
                        toAdd.add(new Project(7, "seven"));
                        toAdd.add(new Project(10, "ten"));
                        toAdd.add(new Project(4, "four"));
                        populateProjectsList(toAdd);
                        projectsList.removeListSelectionListener(this);                
                    }
                }
        );      
    }

    JList projectsList;

    private void populateProjectsList(List<Project> projectsList2) 
    {
        EventQueue.invokeLater(
            new Runnable() {
                @Override
                public void run() 
                {
                    DefaultListModel<String> listModel = (DefaultListModel<String>) projectsList.getModel();
                    listModel.clear();
                    for (Project project : projectsList2) 
                    {
                        System.out.println(project.id + ") " + project.name);
                        listModel.addElement(project.id + ") " + project.name);
                    }                    
                }
            }
        );
    }

    private class Project 
    {
        int id;
        String name;

        public Project(int id, String name) 
        {
            this.id = id;
            this.name = name;
        }        
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM