El 4 de mayo de 2017, 21:44, Alex Irmel Oviedo Solis <alleinerw...@gmail.com > escribió:
> Buenas tardes amigas y amigos, quisiera que me den una luz, quiero obtener > la lista de ventanas abiertas de gvSIG para un script que estoy > desarrollando o en su defecto como crear una ventana del tipo Singleton. > Saludos a todos > Voy comentando cosas sobre ventanas en gvSIG. Cuando se inicio el desarrollo de gvSIG, se creo un "MDIManager" que se encargase de la gestion de las ventanas. Tiene metodos como: - addCentredWindow(IWindow p) - addWindow(IWindow p) - addWindow(IWindow p, int align) - closeWindow(IWindow p) - closeAllWindows() - getActiveWindow() - getAllWindows(), esta seria la forma de obtener la lista de ventanas abiertas. Hay un interface IWindow, que define las caracteristicas de la ventana como: - Si se puede minimizar - Si se puede maximinar - Si se puede redimensionar - Cual es su titulo - Si va a ser modal o no. - Que ancho y alto tiene en pixels. Normalmente para crear una ventana creas tu clase que extiende de JPanel y haces que implemente IWindow y es eso con lo que trabaja el "MDIManager". Esto hace que sea bastante engorroso crear ventanas simples. Para la mayoria de los casos es suficiente con crear un JPanel y simplemente decirle que lo muestre como una ventana modal o no ajustando su tamaño al contenido y poco mas. Usar el MDIManager, ademas de ser engorroso obligaba a que si querias presentar una ventana desde una libreria de gvSIG debias depender de andami, con lo que no podias hacer que el interface de usuario de tu libreria fuese independiente del framework de ejecucion de gvSIG. Asi que mas tarde se introdujo el concepto de "WindowsManager". Esta en una libreria y no depnde de andami, aunque este aporta una implementacion para el. Asi podemos presentar una ventana de forma simple, sin muchos calentamiento de cabeza. Seria algo como: ToolsSwingLocator.getWindowManager().showWindow(mijpanel, eltitulo, WindowManager.MODE.DIALOG) Ahora mismo estan conviviendo los dos mecanismos en gvSIG. Si no quieres mas que una ventana modal o no que sea redimensionable te basta con crear un JPanel y usar el WindowsManager para presentarla. Si precisas hilar mas fino en cuanto al comportamiento de la ventana usas el "MDIManager". Esto en cuando al funcionamiento general de las ventanas. Pero en gvSIG hay algunas ventanas que tienen un comportamiento un tanto especial. Por ejemplo la ventana del proyecto o la de una vista. Para una vista dada, solo hay una ventana abierta de ella. No es posible abrir dos ventanas de una misma vista. Si ya esta abierta la vista y tratamos de abrirla de nuevo, aunque sea por codigo, simplemente se activa la ventana de esa vista que ya existia sin abrirse una nueva. Este tipo de ventanas son las que en gvSIG se llaman SingletonWindow. Normalmente cuando hacemos un componente de interface de usuario, por ejemplo la ventana de la vista, por un lado tendremos el interface de usuario, y por otro el modelo de este. En el caso de la vista, por un lado tendremos el ViewDocument, solo con la parte de logica de la vista, y por otro un IView que representa al interface de usuario y extiende de IWindow y SingletonWindow, y que su metodo getWindowModel devolvera el ViewDocument de la vista. Cuando intentamos volver a crear una ventana de una vista, el "MDIManager" se recorre las IWindow ya abiertas, les pregunta si son "SingletonWindow" y de serlo les pide el "WindowModel" y lo compara con el de la ventana que se quiere crear. Si son el mismo, reutiliza la ya existente. ¿ Como creas una ventana de tipo SingletonWindow ? Lo primero tendras que tener una clase que represente la parte de logica de tu ventana. Luego haras tu panel, y haras que implemente el interface SingletonWindow. Normalmente para crear tu ventana, crearas la parte de logica, y luego instanciaras tu parte de UI pasandole la parte de logica. Y haras que el metodo getWindowModel devuelba la parte de logica de tu ventana. Y para presentarla deberas llamar a alguno de los metodos "addWindow" del "MDIManager". Algunas cosillas mas... El interface IWindow te obliga a implementar: public WindowInfo getWindowInfo() WindowInfo es una clase que usaras directamente, no tienes que extender de ella. Simplemente en tu panel instancias un WindowInfo y lo rellenas con los atributos que precises para luego devolverlo en el getWindowInfo. Para acceder al "MDIManager" tienes un par de formas, las dos admitidas en gvSIG. Por un lado usando el MDIManagerFactory: mdimanager = MDIManagerFactory.createManager() Este crea el MDIManager si no esta creado ya o te devuelbe el ya que exista si ya habia sido creado antes. O puedes usar el ApplicationManager: mdimanager = ApplicationLocator.getManager().getUIManager() Espero que se entienda algo y que te sirba la explicacion. Un saludo Joaquin > > _______________________________________________ > gvSIG_desarrolladores mailing list > gvSIG_desarrolladores@listserv.gva.es > Para ver histórico de mensajes, editar sus preferencias de usuario o darse > de baja en esta lista, acuda a la siguiente dirección: > https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores > > -- -------------------------------------- Joaquin Jose del Cerro Murciano Development and software arquitecture manager at gvSIG Team jjdelce...@gvsig.com jjdelce...@gvsig.org gvSIG Association www.gvsig.com www.gvsig.org
_______________________________________________ gvSIG_desarrolladores mailing list gvSIG_desarrolladores@listserv.gva.es Para ver histórico de mensajes, editar sus preferencias de usuario o darse de baja en esta lista, acuda a la siguiente dirección: https://listserv.gva.es/cgi-bin/mailman/listinfo/gvsig_desarrolladores