2012-01-05 1 views
8

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

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

ответ

3

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

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

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

  • нажмите на демонстрационной задачи JXTree и увидеть имена некоторых детей просто JFrame как установлено Качели (как показано в TreeNode, скобка).
  • изменить LAF к Nimbus, нажмите на демонстрационной задачи JXTreeTable, переместите курсор на полосу прокрутки на TreeTable и увидеть название кнопки ScrollBar как установлено LAF

Следующий вопрос: делает это свинг внутренняя настройка мешает установить имя для причины применения?

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

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

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

  • ADV: да, любой код может использовать его, он не имеет никакого реального контракта
  • ловушку: Возможно, существует много конкурирующих пользователей этого имущества
+0

Большое спасибо за подробный ответ! Думаю, я просто оставлю это так, так как это довольно небольшое приложение, риск другого вмешательства в код не слишком велик. – mort

8

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

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

+2

+1 для свойств клиента. – trashgod

2

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

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

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

Смежные вопросы