[英]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.