Java: JList ListSelectionListener только для MouseClick - PullRequest
0 голосов
/ 19 марта 2011

Я довольно новичок в Java и исчерпал свой Google для решения этой проблемы с выбором компонента JList. У меня есть список строк, которые динамически меняются, когда пользователь нажимает различные кнопки JButton. Мой режим выбора JList установлен в SINGLE_SELECTION, а ListSelectionModel зарегистрирован в пользовательском ListSelectionChangeHandler, который реализует ListSelectionListener.

Моя проблема заключается в том, что каждый раз, когда содержимое модели JList изменяется (щелкая JButton), вызывается ListSelectionChangeHandler и возникает исключение NullPointerException - например, Пользователь выбирает элемент в списке, нажимает кнопку, содержимое списка изменяется, и слушатель вызывается. Я хочу, чтобы ListSelectionListener выполнял какое-то действие только тогда, когда MouseClick запускает событие. Как я могу предотвратить прослушивание моего слушателя при изменении данных модели?

Соответствующий код:


this.suggestionsList = new JList();
this.suggestionsList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);</p>

<p>ListSelectionModel model = this.suggestionsList.getSelectionModel();
model.addListSelectionListener(new ListSelectionChangeHandler());</p>

<p>class ListSelectionChangeHandler implements ListSelectionListener {</p>

<code>@Override
public void valueChanged(ListSelectionEvent arg0) {

    Object selectedValue = suggestionsList.getSelectedValue();

    // Perform action on selectedValue
    // Enable/Disable components as needed
}

}

Спасибо за помощь!

1 Ответ

0 голосов
/ 19 марта 2011

Самым простым способом, о котором я могу подумать, является создание переключателя - логической переменной, которая будет проверяться каждый раз в вашем слушателе, прежде чем он действительно начнет что-то делать.Затем вы можете запустить все свои модификации с выключением этой переменной.В случае многопоточности здесь может потребоваться некоторая синхронизация.

...