java JList не обновляется, работает в отладчике - PullRequest
0 голосов
/ 22 февраля 2019
JList Jlist;
JScrollPane scrollPane;
DefaultListModel<String> myModel = new DefaultListModel<>();

Jlist = new JList<String>();
scrollPane = new JScrollPane(Jlist);

Я отправляю JList и myModel в другой класс, где они делают следующее.

myModel.addElement(aString);
Jlist.setModel(myModel );

Это обновляет JList в отладчике.Однако, когда я запускаю его вживую, я не вижу изменений в JList в моем графическом интерфейсе, но переменные есть в отладчике.

EDIT # 1 внес изменения в соответствии с рекомендациями ответа:

DefaultListModel<String> myModel = new DefaultListModel<>();
JList Jlist = new JList<String>(myModel );
JScrollPane scrollPane = new JScrollPane(Jlist);

в другом классе.

myModel.addElement(aString);

к сожалению, проблема остается

проблема была связана с параллелизмом, я не защищал разделяемый ресурс должным образом.

1 Ответ

0 голосов
/ 22 февраля 2019

Вы можете (и, скорее всего, должны в вашем случае) добавить элементы после того, как вы создали список и инициализировали его моделью:

jlist = new JList<String>(myModel);
scrollPane = new JScrollPane(jlist);

Затем просто передайте модель заполненному классу:

myModel.addElement(aString);

Также может возникнуть такая проблема, если вы измените модель в потоке без пользовательского интерфейса.Чтобы проверить, так ли это, попробуйте вызвать addElement внутри invokeLater:

javax.swing.SwingUtilities.invokeLater(new Runnable() {
    public void run() {
        myModel.addElement(aString);
    }
});

...