Для чего нужно свойство name компонентов Swing? - PullRequest
8 голосов
/ 05 января 2012

Для чего предназначено свойство name компонентов Swing?Используется ли внутри свинг?

Предыстория: коллега реализовал механизм интернационализации, сохранив ключ для текстовой строки в свойстве name.Затем он просто просматривает все элементы swing и получает ключ, сохраненный в свойстве name компонента.Он утверждал, что свойство name, кажется, не используется иначе, и это был самый простой способ сделать это.

Ответы [ 3 ]

8 голосов
/ 05 января 2012

Имя компонента из javadoc «Установите или получите имя компонента. Это может быть полезно, когда вам нужно связать текст с компонентом, который не отображает текст.». Поэтому я думаю, что это хорошо, чтобы использовать имя.

Вы также можете поместить что-то в свойствах компонента.

3 голосов
/ 06 января 2012

Используется ли внутри свинг?

Краткий ответ: да.

Более длинный ответ: довольно легко проверить - просто создайте некоторый интерфейс и пройдитесь по дереву. Или посмотрите на ф.и. SwingLabs-Demo (не могу устоять :-),

  • щелкните по демонстрационной задаче JXTree и посмотрите имена некоторых дочерних элементов простого JFrame, заданного Swing (показано в тройке, скобка).
  • измените LAF на Nimbus, щелкните по демонстрационной задаче JXTreeTable, наведите указатель мыши на полосу прокрутки treeTable и увидите название кнопок scrollBar, как установлено LAF

Следующий вопрос: внутренние настройки Swing не влияют на установку имени по причинам приложения?

Краткий ответ: трудно сказать, скорее всего нет

Более длинный ответ: внутренние параметры, которые я видел, вряд ли будут перезаписаны для нужд приложения, поскольку они глубоко скрыты в иерархии контейнера. На самом деле, некоторые рамки, такие как f.i. SAF действительно использует имя для внедрения ресурсов (аналогично тому, что вы описываете, что делает ваш коллега). Мой собственный (не поддерживаемый) каркас FormBuilder сделал для ограничений макета.

Неопределенное (читай: не определено) определение свойства name является одновременно преимуществом и ловушкой:

  • adv: да, любой код может использовать его, у него нет реального контракта
  • ловушка: возможно, есть много конкурирующих пользователей этого свойства
2 голосов
/ 10 января 2012

По моему опыту, я никогда не сталкивался с какими-либо проблемами при настройке имени компонента Swing. Для «листовых» компонентов Swing (которые вы используете прямо, например, JLabel, JButton, JMenu ...), name всегда остается null от Swing.

Как уже упоминалось @kelopatra, внутренним компонентам "сложных" компонентов Swing (например, JColorChooser) могут быть присвоены имена, но вы, как правило, не можете получить доступ к этим внутренним компонентам напрямую (кроме обхода дерева иерархии компонентов). 1009 *

Согласно использованию свойства name, оно часто используется для внедрения ресурсов (i18n), но оно также может быть чрезвычайно полезным для автоматизации пользовательского интерфейса (для тестов или демонстраций), потому что большинство роботов (например, FEST Swing) будут быть в состоянии найти компонент по имени, при условии, что вы назначаете уникальные имена своим компонентам.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...