Java: Есть ли какой-нибудь способ создания объекта вокруг компонента где-нибудь в компоненте?

StackOverflow https://stackoverflow.com/questions/227249

  •  03-07-2019
  •  | 
  •  

Вопрос

В продолжение моего вопроса о java.awt.Component Свойство .getName () , мне интересно, есть ли способ сжимать произвольный объект где-нибудь в компоненте, аналогично свойство тега в .NET ? Это было бы очень удобно для любого кода, который работает с компонентом, но не обязательно знает, что это за компонент.

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

Это было полезно?

Решение

Обычно я создаю хеш и помещаю (компонент, cookie) всякий раз, когда добавляю компонент на экран. Когда вам требуется вернуть ваш объект cookie (возможно, в случае какого-либо события), событие всегда получает копию компонента, а затем вы просто получаете (компонент) от своего cookie.

В некоторых экстремальных условиях я подклассифицировал элемент управления и просто добавил поле. Это быстрое и грязное исправление, поскольку создание подклассов компонента подобно нескольким строкам кода и может идти в том же классе, что и файл, в котором вы создаете экран. Это полезно только в том случае, если вам просто нужно хранить данные, связанные с одним типом элемента управления.

Другие советы

JComponent имеет putClientProperty и getClientProperty .

Компонент не имеет способа сделать это. Однако одним из вариантов будет использование статической карты и предоставление обертки вокруг нее, чтобы вы могли запрашивать данные, относящиеся к любому объекту пользовательского интерфейса (или другого). Я уже делал подобные вещи раньше, и пока вы настраиваете их как сервис с интерфейсами, они могут быть довольно элегантными и не нарушать ваш OO-дизайн.

Да, вы можете использовать get / setName для установки какого-либо идентификатора, а затем использовать этот идентификатор для сопоставления с вашей помощью. JavaHelp CSH работает примерно так, за исключением того, что я верю, что сам компонент помещается в карту?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top