В продолжение моего вопрос о свойстве java.awt.Component.getName (), мне интересно, есть ли способ найти произвольный объект где-нибудь в Компоненте, аналогичный свойство тега в .NET? Это было бы очень удобно для любого кода, который работает с компонентом, но не обязательно знает, что это за компонент.
Например, скажем, я пытаюсь реализовать справочную систему для всего приложения, которая знает, как смотреть на любой компонент, на который в данный момент указывает мышь, добраться до этого компонента, вытащить его текст справки и отобразить его на собственной панели на экране. (нет, я не хочу использовать всплывающую подсказку). Мой ответ в настоящее время - использовать Имя (getName () / setName ()) для хранения текста справки, и это будет работать, но Имя должно быть строкой. Если бы я хотел стать более привлекательным и сохранить что-нибудь, кроме строки, я бы застрял.




Компонент не может этого сделать. Однако одним из вариантов было бы использовать статическую карту и предоставить ей оболочку, чтобы вы могли запрашивать данные, относящиеся к любому объекту пользовательского интерфейса (или другому). Я делал подобные вещи раньше, и пока вы настраиваете его как своего рода службу с интерфейсами, он может быть довольно элегантным и не нарушать ваш объектно-ориентированный дизайн.
Да, вы можете использовать get / setName для установки какого-либо идентификатора, а затем использовать этот идентификатор для сопоставления с вашей справкой. материал JavaHelp CSH работает примерно так, за исключением того, что я считаю, что сам компонент помещается на карту?
Обычно я создаю хэш и помещаю (компонент, файл cookie) всякий раз, когда добавляю компонент на экран. Когда вам нужно вернуть свой объект cookie (возможно, в случае события), событие всегда получает копию компонента, и тогда вы просто получаете (компонент) от своего файла cookie.
В некоторых экстремальных условиях я разделил элемент управления на подклассы и просто добавил поле. Это быстрое и грязное исправление, поскольку создание подкласса компонента похоже на несколько строк кода и может быть в том же классе, что и файл, в котором вы создаете свой экран. Это полезно только в том случае, если вам просто нужно хранить данные, связанные с одним типом управления.
JComponent имеет putClientProperty и getClientProperty.