#java #swing #listener #jlist #defaultlistmodel
#java #swing #слушатель #jlist #defaultlistmodel
Вопрос:
У меня возникли проблемы с пониманием того, какой интерфейс мне нужен для прослушивания изменений в 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.
Что означает «слишком сложный»? И «охарактеризовать предыдущими методами»? Ну, что все это значит? Это тот интерфейс, который я хочу?
Ответ №1:
ListModel
отправляет события своим ListDataListener
слушателям. Для модели списка более эффективно вызывать подробные intervalAdded
intervalRemoved
методы и, когда это возможно. Слушатель модели списка (в данном случае a JList
) может использовать эти подробные изменения для внесения минимальных изменений в визуальный компонент (т. Е. Для intervalAdded
него можно просто добавить новую строку вместо перерисовки всего списка).
Однако некоторые изменения могут быть слишком сложными, чтобы их можно было описать как просто добавленные и удаленные. В этом случае модель списка имеет возможность вызова contentsChanged
. Когда JList
увидит contentsChanged
, он, скорее всего, повторно извлечет весь список из модели списка.
Ответ №2:
Да, это правильный слушатель.
Утверждение означает, что этот метод является более общим, который будет охватывать все возможные изменения содержимого списка. Другие ( intervalAdded
и intervalRemoved
) следует использовать при возникновении этих конкретных событий.
В моей практике вы всегда будете использовать самый общий (даже с прослушивателями таблиц).. Я предполагаю, что это должно было использоваться для оптимизации (особенно с большими списками).
Учебное пособие по этому слушателю можно найти здесь.
Комментарии:
1. Нужно ли мне также помещать событие fire в модель? Если да, то где? Спасибо!