Трудности в понимании механизма рендеринга свинга JTable и JTree
Часто при использованииJTable
или жеJTree
Пользователь пишет и присваивает ему свой собственный рендерер ячейки.
Очень часто наследовать пользователякомпонент отDefaultTableCellRenderer
и реализует метод рендерераgetTableCellRendererComponent
, Оказывается, чтоDefaultTableCellRenderer
фактически наследуется от JLabel, таким образом, возвращает себя (this) при вызове super (в методе рендеринга) и, следовательно, user 'Рендерер s может так же вернуть себя (this).
И все это работает хорошо.
Мой вопрос, как это может быть?
Каждый раз, когда этот метод вызывается таблицей, ему присваиваются разные параметры, и метка вывода изменяется в зависимости от этих параметров. Если это действительно тот же самый экземпляр метки - не должен»Может ли он быть изменен в соответствии с последним вызовом этого метода? Wouldn»т это означает, что все таблицы "s-клетки заражены, состоят из одного и того же экземпляра метки, который содержит одно и то же значение (значение последнего вызова метода визуализации)?
Я искал в Интернете и копался в Swingс кодом, и не смог найти какой-либо актклон или жеконструктор копирования это на самом деле дублирует выходной ярлык. Я не смог найти никаких доказательств того, что (возможно) свинг использует отражение для того, чтобы каждый раз создавать экземпляр рендерера с нуля.
Я прочитал качелиучебник по JTablesи там я смог найти следующие строки:
Вы можете ожидать, что каждая ячейка в таблице будет компонентом. Однако из соображений производительности таблицы Swing реализованы по-разному. Вместо этого для отображения всех ячеек, содержащих данные одного типа, обычно используется средство визуализации с одной ячейкой. Вы можете думать о визуализаторе как о настраиваемой маркировке чернил, которую таблица использует для печати соответственно отформатированных данных в каждой ячейке. Когда пользователь начинает редактировать ячейкус данными, редактор ячейки берет на себя ячейку, контролируя ячейкус редактированием поведения.
Они намекают, что на самом деле то, что я говорю, правильно, но не объясняют, как это на самом деле достигается.
Я могу'не понимаю Может кто-нибудь из вас?