Pregunta

En nuestra aplicación Swing, estamos utilizando una herramienta de prueba automatizada de control de calidad (QF-Test) que funciona mejor cuando los componentes Swing se nombran. (Llamando Component.setName). A pesar de sus asignaciones de nombres automáticos funcionan razonablemente bien, estamos introduciendo componentes SwingX en el proyecto y que está causando algunos problemas para la herramienta.

Hay una gran cantidad de componentes potenciales en una pantalla (las pantallas típicas de entrada de datos de aplicaciones de negocios, pero muchos de ellos - la aplicación es en el nivel de complejidad de un ERP), ¿qué opciones existen para nombrar los componentes Swing en una razonablemente de manera discreta?

¿Fue útil?

Solución

Me suelen almacenar los campos en un JPanel en propiedades en el JPanel, como esto:

private JLabel firstNameLabel;
private JTextField firstNameTextField;

Al final de la rutina que instancia y expone estos componentes, se podría ejecutar una rutina que utiliza java.lang.reflect a recorrer cada propiedad del panel. Si una propiedad desciende de la clase Component, puede llamar setName en él con el nombre de la propiedad. Así, por ejemplo, sería acabar llamando a:

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

... excepto a través de java.lang.reflect

También podría tener la rutina de examinar los nombres de los casos con baches de las variables y sustituirlo por caso estándar con espacios. Esto haría más fácil de leer.

Este enfoque garantizará que no importa qué componentes se agrega a un panel, todos ellos obtendrá nombres descriptivos.

Otros consejos

Yo generalmente usan un nombre compuesto por todos mis componentes; el nombre se basa en el nombre de los padres (por ejemplo, un JDialog) y el nombre del campo (obtenido por reflexión). Eso hace que los nombres de componentes única en la mayoría de los casos (es posible que tenga conflictos dependiendo de cómo se nombra a los padres y cómo los utiliza, por ejemplo, si abre varias JInternalFrame y todos tienen el mismo nombre ...)

He implementado una estrategia de nombres genéricos (que hace precisamente eso) en Tripas-GUI .

Por cierto, denominación componente no sólo es interesante para las pruebas de interfaz de usuario, sino que también puede ser útil para las estrategias de inyección de recursos (i18n de los componentes).

¿Cómo está usted construyendo la interfaz? JFormDesigner y, probablemente, la mayor parte de los otros editores permiten establecer el nombre del componente de forma automática, lo cual es muy práctico. La mayoría de las veces no tengo que pensar en los nombres de los componentes en absoluto. Únicas excepciones son los componentes que no se colocan con JFormDesigner.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top