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