java在JList(Swing)中显示带有的ArrayList
当我试图用ArrayList显示JLList时,出现了一个问题。我使用动作侦听器来执行所有这些:
ContactArray contactObject = new ContactArray();
addContactBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String firstName = firstNameField.getText();
String lastName = lastNameField.getText();
contactObject.addName(firstName + " " + lastName);
// contactObject.getNames().forEach(System.out::println);
}
});
viewContactButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
String[] contacts = contactObject.getNames().toArray(new String[0]);
contactList = new JList(contacts);
contactList.setVisibleRowCount(5);
contactList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
add(new JScrollPane(contactList));
}
});
ContactArray类:
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
public class ContactArray {
private List<String> names;
public ContactArray() {
this.names = new ArrayList<>();
}
//add a name to list
public void addName(String name) {
if (!Objects.nonNull(names)) {
this.names = new ArrayList<>();
}
this.names.add(name);
}
//get the name attribute
public List<String> getNames() {
if (!Objects.nonNull(names)) {
this.names = new ArrayList<>();
}
return this.names;
}
}
我已经成功地将全名打印到控制台上,并在控制台上添加了contactObject.getNames().forEach(System.out::println);
注释,但似乎无法将它们添加到JList中。通常,当我按下查看联系人按钮时,它会显示它
另外,我正在使用IntelliJ IDEA的Swing GUI表单
谢谢你的帮助:)
# 1 楼答案
你把代码放错地方了。当您实际使用列表创建JList时,应放置代码。(也就是说,您可能在某个地方有代码,在创建列表后的某个时间和使用列表之前意外删除了该列表)
那么问题是ArrayList还是您也尝试在JList中硬编码数据?为了解决问题,你需要知道真正的问题是什么。始终首先尝试显示硬编码数据,而不是动态数据
我想真正的问题是上述说法
无论何时向可见框架添加组件,基本代码应为:
您需要调用面板的布局管理器。否则,组件的大小为0,因此无需绘制任何内容