Как зарегистрировать изменение в модели JList? - PullRequest
3 голосов
/ 28 октября 2011

У меня проблемы с пониманием того, какой интерфейс мне нужен для прослушивания изменений в модели списка. Я думал, что это 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 ]

3 голосов
/ 28 октября 2011

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

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

2 голосов
/ 28 октября 2011

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

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

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

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

...