Как зарегистрировать изменение в модели JList?

У меня проблемы с пониманием того, какой интерфейс мне нужен для прослушивания изменений в listModel. Я думал, что это ListDataListener, но я не могу понять методы в нем. В нем есть 3 метода, и этот, кажется, тот, который я хочу, но я не могу понять описание:

contentsChanged(ListDataEvent e) 
      Sent when the contents of the list has changed in a way that's too complex to characterize with the previous methods.

Что значит "слишком сложный"? А под "охарактеризовать предыдущими методами"? Ну, что все это значит? Это интерфейс, который я хочу?

2 ответа

Решение

Да, это правильный слушатель.

Это утверждение означает, что этот метод является более общим, который охватывает все возможные изменения содержимого списка. Другие (intervalAdded а также intervalRemoved) следует использовать, когда происходят эти конкретные события.

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

Учебник по этому слушателю можно найти здесь.

ListModel отправляет события на его ListDataListener слушатели. Для модели списка более эффективно вызывать подробный intervalAdded а также intervalRemoved методы, когда это возможно. Слушатель модели списка (в данном случае JList) может использовать эти подробные изменения, чтобы внести минимальные изменения в визуальный компонент (т. е. для intervalAdded он может просто добавить новую строку вместо перерисовки всего списка).

Однако некоторые изменения могут быть слишком сложными, чтобы их можно было описать как только что добавленные и удаленные. В этом случае модель списка имеет возможность вызывать contentsChanged, когда JList видит contentsChanged Скорее всего, это будет повторное получение всего списка из модели списка.

Другие вопросы по тегам