簡體   English   中英

將元素添加到JList不起作用

[英]Adding element to JList does not work

我正在嘗試向我的空JList添加一個新元素,但是它沒有出現。 我正在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有效,我看到了希望添加的正確輸出,但是列表仍然是空的。 我在動作偵聽器中嘗試了listModel.addElement,並且有效。

例如,從ListSelectionListener調用時,您的代碼可以正常工作,請參見下文。

我的猜測是您將項目正確添加到JList中,但是看不到它們,因為JList的尺寸非常小,無法看到其內容。 處理窗口中組件的布局,或者在將其添加到窗口時將一些數據放入JList中。 當然,這可能是其他原因。

一個有效的例子

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