2012-02-28 22 views
7

Tengo una aplicación Java Swing que contiene un grupo de marcos que a su vez contiene principalmente tablas que muestran grandes cantidades de datos. Dado que siempre es una molestia y lleva mucho tiempo organizar todas las ventanas y tablas al inicio, me gustaría implementar la funcionalidad de "espacio de trabajo" para que el usuario pueda guardar una configuración de preferencia y al inicio elegir cargar automáticamente el espacio de trabajo almacenado para tener todas las ventanas y tablas aparecen como se guardaron previamente. En concreto, los ajustes que desee almacenar en un espacio de trabajo son:Java Swing guardar y cargar espacio de trabajo/configuración

  • ventanas activas (JFrame) y sus tamaños y posiciones en la pantalla
  • Los arreglos de mesa, columnas incl seleccionados, orden de las columnas, el ancho de la columna, la clasificación, filtrado

¿alguien sabe de una manera inteligente y fácil de lograr esto sin la obvia, y lo que parece un muy complejo y engorroso, la solución de la iteración en todas las ventanas abiertas y guardar cada pieza de información con el Preferences api ? Gracias

+1

Siempre hay 'serializar toda la GUI', pero sospecho que 1) habrá partes no serializables de esas GUI 2) que será una molestia trabajar correctamente. –

+0

Creo que tiene razón en ambas sospechas. – hgus1294

+1

podría considerar utilizar (Mejor) Swing Application Framework, que permite almacenar el estado de la aplicación, entre otras cosas, sin problemas (aunque cambiar a un nuevo framework podría ser demasiado invasivo :-) – kleopatra

Respuesta

7

En este caso, la solución obvia, java.util.prefs.Preferences, es probablemente la correcta. RCPrefs de este game es un ejemplo simple que demuestra el ahorro de una variedad de tipos de datos, incluido enum. La implementación exacta depende en gran medida de la aplicación. Aunque tedioso, no necesita ser especialmente complejo. Por conveniencia, el example usa métodos estáticos; las preferencias de cuadro y tabla probablemente valgan una clase cada una.

+0

Me gustaría recibir un contraejemplo. – trashgod

+0

Gracias. El ejemplo fue útil y pensé que la idea de hacer clases de espacio de trabajo tenía sentido. Creé una clase 'WsFrame' que contiene configuraciones genéricas como posición y tamaño. Este objeto puede contener una o varias configuraciones específicas como 'WsTable' (para configuraciones de tabla). Opté por no almacenar esta información a través de 'Preferences' y decidí simplemente serializar la lista de objetos' WsFrame' mediante XStream y almacenarla como xml (ya que soy flojo y es conveniente ver/editar la salida). En realidad funciona bastante bien. Gracias. – hgus1294

+0

Excelente. Es posible que esté mimado, ya que mi plataforma usa XML para implementar 'Preferences'. Hazme ping si agregas esto como respuesta contrastante; Creo que sería útil. – trashgod