在JList(Swing)中显示带有的ArrayList



当我尝试用ArrayList显示JList时遇到问题。我正在使用Action Listeners来执行所有这些:

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中。通常,当我按下viewContactButton时,它应该会显示它。

此外,我正在使用IntelliJ IDEA中的Swing GUI表单。

感谢您的帮助:(

我已经设法将全名打印到控制台

好吧,你把代码放错地方了。当您实际使用List创建JList时,应该放置代码。(例如,也许你在某个地方有代码在创建列表后和使用列表前的某个时间意外删除了列表(

当我尝试用ArrayList 显示JList时遇到问题

问题出在ArrayList上,还是您也试图对JList中的数据进行硬编码?为了解决问题,你需要知道真正的问题是什么。总是首先尝试显示硬编码数据,而不是动态数据。

add(new JScrollPane(contactList));

我想真正的问题是上面的说法。

每当您将组件添加到可见框架时,基本代码应该是:

add(...);
revalidate();
repaint();

您需要调用面板的布局管理器。否则,组件的大小为0,因此没有可绘制的内容。

最新更新