Я вижу, что вы в основном скопировали код по ссылке в своем вопросе. Этот пример касается только добавления одного элемента в JList
при нажатии JButton
. Это не касается выбора JList
. Я не думаю, что автор этого примера рассматривал, что происходит, когда пользователь выбирает один или несколько элементов в JList
до , щелкнув JButton
.
, который мне удалось воспроизвести. поведение, описанное в вашем вопросе. Это может быть ошибка в реализации JList
или ListSelectionModel
. Я исправил это, добавив код в метод actionPerformed()
, который обрабатывает любые существующие выборки JList
.
Вот моя модифицированная версия метода actionPerformed()
. Обратите внимание, что весь остальной код не изменился. Сначала я сохраняю индексы всех выбранных строк. Затем я очищаю существующие выборы. Затем я добавляю новый элемент в JList
. Теперь мне нужно повторно выбрать строки, которые были выбраны до того, как я добавил новый элемент. Но обратите внимание, что мне нужно увеличивать каждый индекс на единицу, потому что есть новый элемент с индексом 0 (ноль).
jb.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent actionEvent) {
int[] indices = jlist.getSelectedIndices();
jlist.getSelectionModel().clearSelection();
model.add(0, "First");
for (int index : indices) {
jlist.getSelectionModel().addSelectionInterval(index + 1, index + 1);
}
}
});