2010-09-02 3 views
1

В нашем приложении Swing мы используем инструмент автоматического тестирования в QA (Qf-Test), который работает лучше, когда названы компоненты swing. (вызов Component.setName). Хотя их автоматические назначения имен работают достаточно хорошо, мы вводим компоненты SwingX в проект и вызываем некоторые проблемы для этого инструмента.Стратегия для именования компонентов качания

На экране есть много потенциальных компонентов (типичные экраны ввода данных для бизнес-приложений, но многие из них - приложение находится на уровне сложности ERP), какие существуют варианты для обозначения компонентов swing в достаточно ненавязчивая манера?

ответ

1

Я обычно хранят поля в JPanel в свойствах на JPanel, как это:

 
private JLabel firstNameLabel; 
private JTextField firstNameTextField; 

В конце подпрограммы, который создает и раскладывает эти компоненты, вы можете запустить программу, которая использует java.lang.reflect для прокрутки каждого свойства панели. Если свойство опускается из класса Component, вы можете позвонить ему setName с именем свойства. Так, например, было бы в конечном итоге вызова:

 
this.firstNameLabel.setName("firstNameLabel"); 
this.firstNameTextField.setName("firstNameTextField"); 

... кроме как через java.lang.reflect

Вы также могли бы рутину изучить ухабистым регистру имена переменных и заменить его на стандартном случае с пробелами. Это сделает их более читаемыми.

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

+0

Я думал об этом подходе. Моя главная проблема заключается в том, что это означает, что рефакторинг имени поля нарушает именование. Я предполагаю, что аннотации могут быть использованы в этом случае (если вы хотите заставить имя оставаться неизменным после рефакторинга имени поля). – Yishai

+1

Когда имя поля изменяется, не хотите ли вы изменить имя в программе QA вместе с ним? Я всегда называю имена полей после метки на поле, поэтому они будут меняться только в том случае, если метка изменилась в любом случае. Я не знаю, как часто они меняются, но это обеспечит согласованность. –

0

Как вы строите интерфейс? JFormDesigner и, вероятно, большинство других редакторов позволяют автоматически устанавливать имя компонента, что очень удобно. В большинстве случаев мне вообще не нужно думать об именах компонентов. Только исключения - это компоненты, которые не помещаются в JFormDesigner.

+0

Экран здесь ручной кодировки. Для другого компонента приложения мы использовали GUI-конструктор IntelliJ, но у него нет такой функции. Это, безусловно, хорошая особенность JFormDesigner. – Yishai

1

Обычно я использую составное имя для всех моих компонентов; имя построено на родительском имени (например, JDialog) и имени поля (полученного отражением). В большинстве случаев имена компонентов уникальны (у вас все еще могут быть конфликты в зависимости от того, как вы называете родителей и как вы их используете, например, если вы открываете несколько JInternalFrame и все имеют одинаковое имя ...)

Я реализовал (что делает именно это) в Guts-GUI.

Кстати, именование компонентов не только интересно для тестирования пользовательского интерфейса, но также может быть полезно для стратегий вложения ресурсов (i18n компонентов).

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