2010-06-28 11 views
9

Incluso si no soy nuevo en Java, solo lo he usado en el entorno de la escuela/universidad, así que no conozco todas las mejores prácticas utilizadas en la empresa.Prácticas recomendadas de enlace de datos de Java

En particular, ahora estoy desarrollando una aplicación de escritorio Java (usando Swing en la capa UI) y estoy particularmente interesado en las mejores prácticas sobre el enlace de datos con componentes swing.

Por ejemplo, podría tener una Lista de objetos modelo en la capa modelo y tengo que mostrarlos en una tabla JTable. Luego, cuando se selecciona una sola fila de JTable, necesito mostrar cierta información con respecto al objeto modelo correspondiente a la fila seleccionada en algunos JLabels.

¿Qué bibliotecas debo usar? ¿Cuáles son las mejores prácticas para hacerlo?

Estoy buscando algunos enlaces/artículos/tutoriales (/ libros?) Para profundizar en este tema y conocer los pros y los contras de las diversas soluciones.

Respuesta

6

Para el ejemplo específico que da recomendaría el siguiente enfoque:

  1. Representar los objetos del modelo como un List<Model> cuando la ejecución List apoya RandomAccess (por ejemplo, un ArrayList).
  2. Subclase AbstractTableModel e invalidar getValueAt(int row, int col) para indexar en su List<Model> y recuperar la instancia correspondiente Model. A continuación, devuelva el atributo particular que desea vincular a la columna: col.

En general, hago mi propio esfuerzo cuando se trata de enlace de datos en lugar de utilizar un marco. Para los paneles de estilo editor típicamente implemento tres métodos: initialise(), commit() y clear(), con lo que initialise toma una instancia del objeto de dominio siendo editado, commit se aplica cualquier cambio y devuelve una instancia modificada del objeto de dominio, y clear borra todos los valores de los componentes de interfaz de usuario o los devuelve a los valores predeterminados.

+0

Entonces, ¿cree que podría crear un widget (por ejemplo, subclases de un JPanel?) Que incluye todos los campos y controles para editar el objeto, los métodos initialize(), commit() y clear(), agregando esto ¿Subcategoría de JPanel a mi diseño de JFrame y luego llamar a los diversos métodos en respuesta a los eventos de selección? –

+0

En pocas palabras, sí. Normalmente, si la subclase JPanel es un editor, puede desear mostrarla en un JDialog modal. Normalmente agrego un método de fábrica estático en mi JPanel que creará un JDialog que contiene el panel junto con los botones Aceptar, Aplicar y Cancelar. – Adamski

1

Siempre tenga su aplicación abierta para expansión y tenga en cuenta el factor de acoplamiento. Lo que quiero decir con eso es que debe almacenar todo su modelo de datos en estructuras de datos independientes, independientemente de la capa UI (componentes Swing). Debería tratar de tener una estructura de datos separada (con un paquete de proveedor de datos separado) que le brinde todos los valores necesarios. Una vez que este diseño esté en su lugar, puede comenzar a preocuparse por sus enlaces de interfaz de usuario.

Ten un IDE de UI aseado (como Netbeans) para tu desarrollo relacionado con el swing. SIEMPRE vaya por layouts. Los diseños son difíciles de diseñar al principio, pero una vez que trabaje con ellos, será realmente útil y útil. Además, tendrá que comprender a los oyentes en Swing y por supuesto Swingworkers. Haz un google, encontrarás realmente buenos recursos en estos.

1

Para gestionar la acción de selección, deberá implementar ListSelectionListener en el modelo de selección de su JTable. Puede obtener algunos detalles here y here.

Una vez que se dispare el evento, se le proporcionarán algunos datos en el par, incluido el source del evento. También se le proporcionará el índice de selección principal, que puede usar para identificar la fila seleccionada (suponiendo que no permita la selección múltiple).Deberá reunir el objeto de datos de su modelo de tabla (u otro modelo compartido según el diseño de su modelo) para obtener los valores de sus botones.

0

No sé swing muy bien, pero ¿has probado el patrón de mediador Modelo GUI? Es aplicable en todos los idiomas y con cualquier componente de GUI.

Cuestiones relacionadas