【问题标题】:Display a ArrayList with in a JList (Swing)在 JList (Swing) 中显示 ArrayList
【发布时间】:2020-06-02 15:02:36
【问题描述】:

当我尝试使用 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); 将全名打印到控制台,我将其放入 cmets,但似乎无法将它们添加到 JList。通常,当我按下 viewContactButton 时,它应该会显示它。

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

感谢您的帮助:)

【问题讨论】:

  • 您是否将JList (contactList) 添加到您的框架中的某个地方?如果是这样,那么在添加联系人时尽量不要创建新列表。但清除现有 ListModel 中的所有元素

标签: java arrays swing arraylist jframe


【解决方案1】:

我已成功将全名打印到控制台

嗯,你把代码放错了地方。代码应该在实际使用 List 创建 JList 时放置。 (即。也许你有代码在某个地方意外删除了 List 在创建之后和使用之前的某个时间)

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

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

add(new JScrollPane(contactList));

我猜真正的问题是上面的陈述。

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-03-25
    • 1970-01-01
    • 1970-01-01
    • 2020-12-19
    • 1970-01-01
    • 1970-01-01
    • 2011-01-09
    相关资源
    最近更新 更多