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