JList setSelected больше не работает после повторного вызова setListData - PullRequest
0 голосов
/ 15 ноября 2018

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

jList.setListData(arrays);
jList.setSelectedIndex(0);

Итак, это первое, что я вызываю в jList после создания JList как

JList<String> jList = new JList<>();

Затем я пытаюсь изменить данные JList для действия JButton

chooseBtn.addActionListener(e -> chooseButtonClicked());

Проблема:

private void chooseButtonClicked() {
    jList.setListData(newData);
    jList.setSelectedIndex(0);
}

после обновления JList индекс больше не выбирается, даже когда я звоню setSelectedIndex

1 Ответ

0 голосов
/ 15 ноября 2018

Похоже, setSelectedIndex не работал должным образом, потому что addListSelectionListener вернул ноль при e.getSource().getSelectedValue();

Я добавил чек на ноль

if (source instanceof JList) {
    JList < String > jList = (JList) e.getSource();
    if (jList != null) {
        String selectedValue = jList.getSelectedValue();
        if (selectedValue != null) {
            selectedIndex = selectedValue;
        } else {
            System.out.println("Failed to get Selected Value. Cause: NullPointerException");
        }
    } else {
        System.out.println("Failed to get JList. Cause: NullPointerException");
    }
}

Он печатает Failed to get Selected Value. Cause: NullPointerException один раз, а затем правильно выбирает индекс без каких-либо проблем.

...