2009-02-16 16 views
6

Tengo un problema muy específico, y quería saber si hay una forma de cambiar el propietario de un JDialog (se puede establecer usando el constructor). Supongo que no hay posibilidad "oficial" (que no sea un truco), pero quería asegurarme de no perderme nada. Cualquier idea o sugerencia sobre el tema sería útil, gracias ya ...¿Hay alguna manera de cambiar el propietario de un JDialog?

+0

¿Por qué demonios querrías hacer eso? – Bombe

Respuesta

7

Si su pregunta es acerca de la forma de reutilizar los cuadros de diálogo durante su ciclo de vida de aplicaciones, a continuación, una forma mejor es:

  1. definir todos sus contenidos de diálogo como JPanel subclases
  2. e instanciar un nuevo JDialog con la instancia de la subclase de JPanel existente

Para el punto 2, se puede, por supuesto, utilizar la evaluación perezosa de los paneles (instanciar a primera usar solo, luego reutilizar).

También necesitará que sus paneles implementen alguna interfaz (propia) que le permita reinicializarlos para su reutilización en un nuevo JDialog (reiniciar normalmente significa borrar todos los campos del contenido, o configurar estos campos nuevamente en su valores predeterminados).

1

Lo único que se me ocurre es un hack inseguro (use la reflexión y modifique el propietario, pero eso podría cambiar bajo diferentes versiones de la JVM (incluso del mismo vensor en la misma plataforma)).

Quizás una pregunta mejor para que usted pregunte es "esto es lo que estoy tratando de hacer ... ¿realmente necesito cambiar el dueño del diálogo o hay una manera mejor"? Estoy tratando de pensar en razones para querer cambiar el propietario y no puedo llegar a cualquier ...

1

j:

he tenido una necesidad similar de un único cuadro de diálogo "global" en mi solicitud para servir a un diálogo "notas" cuando el texto en una celda de la tabla es demasiado largo para mostrar. En este caso, el usuario puede desplazarse o hacer clic con el botón derecho en la celda y obtener un cuadro de diálogo que muestra todo el texto. Sin embargo, quería que el cuadro de diálogo se mostrara rápidamente, especialmente cuando se movía, así que simplemente quería mostrarlo y ocultarlo. Decidí crear y almacenar este diálogo en la clase principal con el marco de la aplicación como propietario. Luego, cada vez que una vista cuyo propietario era el marco necesitaba el diálogo de notas, la vista podía obtenerlo de la clase principal. En aquellos casos en los que un diálogo necesitaba el diálogo de notas, el cuadro de diálogo padre podía crear una nueva instancia del diálogo de notas con el propietario apropiado. Dado que estos cuadros de diálogo principales (al menos en mi aplicación) se eliminan cuando se cierran, la instancia del cuadro de diálogo de notas extra estará fuera del alcance y de la basura recolectada. Espero que ayude.

Cuestiones relacionadas