Быстрый вопрос о примере кода в JavaDoc for javax.swing.ListCellRenderer
:Функциональность свинг ListCellRenderer
Я немного удивлен, что в этом примере ListCellRenderer
реализуется классом, который простирается JLabel
и что getListCellRendererComponent(...)
-метода просто возвращает this
. Похоже, что тогда есть только один экземпляр JLabel
, даже для списка, содержащего более одного элемента.
Обычно я ожидал, что когда метод setText(...)
вызывается внутри getListCellRendererComponent(...)
для второго элемента в списке, он меняет метку уже существующего первого элемента в списке. Или, на самом деле, вероятно, не должно быть даже возможным, чтобы список использовал один и тот же код JLabel
- в два раза (или более раз) один раз для каждого элемента в списке.
Теперь, я пришел с двумя возможными способами, чтобы решить эту проблему, и было интересно, какой из них (если таковые имеются), на самом деле происходит:
- ли
JList
каким-то образом создать новые экземпляры предоставленномуListCellRenderer
для каждого списка пункт? - Или он использует компонент, возвращаемый
getListCellRendererComponent(...)
, только для вызова методаpaint(...)
на холсте списка, а не добавления этого компонента в какую-либо панель?
ListCellRenderer отвечает за декорирования виртуальной картины JList, JComboBox, визуализатор вызываются из всех мышей и ключевых событий, оповещатели, реализованные в конкретных API Q: 'как-то JList ... '---> да, но ответ не« Или он использует ... »---> - да окраска только виртуальных JComponents как элемент в прямоугольники JLists – mKorbel
@mKorbel: Теперь я смущен. ;) «рисование только виртуальных JComponents как элементов в прямоугольниках JLists» - это то, что я имел в виду в «Или он использует ...». Но в предложении, прежде чем вы напишите, что это неверный. :) –