有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 1 楼答案

    I have managed to print the full names to the console

    你把代码放错地方了。当您实际使用列表创建JList时,应放置代码。(也就是说,您可能在某个地方有代码,在创建列表后的某个时间和使用列表之前意外删除了该列表)

    I'm having an issue when I try to display a JList with an ArrayList

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

    add(new JScrollPane(contactList));
    

    我想真正的问题是上述说法

    无论何时向可见框架添加组件,基本代码应为:

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

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