Отобразить ArrayList с помощью JList (Swing) - PullRequest
1 голос
/ 18 февраля 2020

У меня проблема при попытке отобразить JList с ArrayList. Я использую 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 , он должен отобразить его.

Кроме того, я использую форму Swing GUI от IntelliJ IDEA.

Спасибо за любые помощь:)

1 Ответ

1 голос
/ 18 февраля 2020

Мне удалось вывести полные имена на консоль.

Ну, вы поместили этот код в неправильном месте. Код должен быть размещен, когда вы фактически используете List для создания JList. (ie. Возможно, у вас есть код, который случайно удаляет Список через некоторое время после его создания и перед использованием)

У меня возникла проблема при попытке отобразить JList с ArrayList

Что ж, проблема в ArrayList или вы также пытались жестко закодировать данные в JList? Чтобы решить проблему, вам нужно знать, в чем заключается настоящая проблема. Всегда сначала пытайтесь отображать жестко закодированные данные вместо динамических c данных.

add(new JScrollPane(contactList));

Я думаю, что настоящая проблема заключается в приведенном выше утверждении.

Всякий раз, когда вы добавляете компоненты в видимую рамку код basi c должен быть:

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

Вам необходимо вызвать менеджер раскладки панели. В противном случае компонент имеет размер 0, поэтому рисовать нечего.

...