Dialogo
Muy buenas,
Y perdona antes me comentabas que me podías dar el ejemplo con un layout normal pues la verdad es que me vendría bien. Porque estoy usando este "java.awt.BorderLayout.CENTER". Pero esto es lo de menos. Lo de más es que la clase que me pasas de Dialogo haces un extends con JFrame ¿Por qué no la extiendes de JPanel? Si fuera así seria más fácil añadirla a un JOptionPane.
Es que no si yo lo hago mal. Pero en mi programa todos los menuitem del menuvar cuando los clico me abren JOptionPane que contienen algún Jpanel que me he creado especifico para ese botón. De esta forma me resulta más fácil controlar las acciones y validar los datos que introduce el usuario.
Saludos y espero que no te aburras puesto que me parece que he escrito el Quijote.
Y perdona antes me comentabas que me podías dar el ejemplo con un layout normal pues la verdad es que me vendría bien. Porque estoy usando este "java.awt.BorderLayout.CENTER". Pero esto es lo de menos. Lo de más es que la clase que me pasas de Dialogo haces un extends con JFrame ¿Por qué no la extiendes de JPanel? Si fuera así seria más fácil añadirla a un JOptionPane.
Es que no si yo lo hago mal. Pero en mi programa todos los menuitem del menuvar cuando los clico me abren JOptionPane que contienen algún Jpanel que me he creado especifico para ese botón. De esta forma me resulta más fácil controlar las acciones y validar los datos que introduce el usuario.
Saludos y espero que no te aburras puesto que me parece que he escrito el Quijote.
Respuesta de i-more java
1
1
i-more java, Internet y más
La clase "Dialogo" no es un panel, si no el contenedor de una aplicación donde existe un panel, "pnlPrincipal", que es el que realmente te interesa. Es por esta razón que la clase "Dialogo" extiende de un JFrame.
Es cierto que en una aplicación cliente más realista tendría la clase del panel extendiendo de JPanel, pero debería tener dos clases: una como JFrame y otra como JPanel... no quería complicarlo y lo hice todo en la misma.
Con respecto a la utilización del tipo de layout, de los estándar he optado por utilizar el GridBagLayout que es el que más libertad ofrece. El BorderLayout es más útil para Frames (Norte-Menu, Sur-Barra de estado, Center-Paneles... etc).
Si quieres saber un poco sobre los tipos de layouts te puedo recomendar la página (y siguientes):
http://www.cica.es/formacion/JavaTut/Cap4/layout.html
Así que con las nuevas especificaciones (menu items, JFrame, JOption y Layouts) te he creado otro ejemplo...
http://es.geocities.com/imorenohojas/Dialogo.java
http://es.geocities.com/imorenohojas/PanelSuelto.java
Aprovecho para responder a tu otra pregunta, sobre el pdf, el problema es por el entorno de ejecución, una aplicación java. Al ser un entorno más restringido, la seguridad aumenta (poco, pero aumenta) no accendiendo al registro de extensiones de ficheros. La solución es ejecutar el programa "Adobe Acrobat Reader" pasando el fichero como argumento. Te lo he añadido al ejemplo.
Esto empieza a complicarse, ya que son dos clases, con menús, paneles, un layout más complicado, pdf... si quieres centrarte en alguna de las partes no tienes más que decirlo.
Y no te preocupes, estoy aquí para ayudar...
Es cierto que en una aplicación cliente más realista tendría la clase del panel extendiendo de JPanel, pero debería tener dos clases: una como JFrame y otra como JPanel... no quería complicarlo y lo hice todo en la misma.
Con respecto a la utilización del tipo de layout, de los estándar he optado por utilizar el GridBagLayout que es el que más libertad ofrece. El BorderLayout es más útil para Frames (Norte-Menu, Sur-Barra de estado, Center-Paneles... etc).
Si quieres saber un poco sobre los tipos de layouts te puedo recomendar la página (y siguientes):
http://www.cica.es/formacion/JavaTut/Cap4/layout.html
Así que con las nuevas especificaciones (menu items, JFrame, JOption y Layouts) te he creado otro ejemplo...
http://es.geocities.com/imorenohojas/Dialogo.java
http://es.geocities.com/imorenohojas/PanelSuelto.java
Aprovecho para responder a tu otra pregunta, sobre el pdf, el problema es por el entorno de ejecución, una aplicación java. Al ser un entorno más restringido, la seguridad aumenta (poco, pero aumenta) no accendiendo al registro de extensiones de ficheros. La solución es ejecutar el programa "Adobe Acrobat Reader" pasando el fichero como argumento. Te lo he añadido al ejemplo.
Esto empieza a complicarse, ya que son dos clases, con menús, paneles, un layout más complicado, pdf... si quieres centrarte en alguna de las partes no tienes más que decirlo.
Y no te preocupes, estoy aquí para ayudar...
Muy buenas,
Y gracias por los ejemplos anteriores. Los he probado y he conseguido abrir un pdf. Y me pregunta es si alguna forma de buscar el ejecutable del adobe sin tener que pedir al usuario el path del ejecutable.
Y la segunda cuestión es la siguiente. He probado los dos ejemplos java que me has pasado y que aprovecho para agradecerte y me funcionan correctamente. Pero entonces me ha surgido una pequeño problema. Yo lo que quiero es que cuando le doy a un botón de la barra de herramientas salga un ventana que contenga el Jpanel y no hacer depender el JPanel del Frame. Yo lo que hago ahora para consegurilo es en el evento hago visible un JOptionPane estándar donde le agrego los Jpanel que yo creo. No si es la forma correcta porque me parece que seria más correcto el uso de InternalFrame y de esta forma tendría el control de la estética de las ventanas que salen y no dejaría la estética estándar del dialogo que muestro.
Saludos y no me cansaré de decir gracias.
Y gracias por los ejemplos anteriores. Los he probado y he conseguido abrir un pdf. Y me pregunta es si alguna forma de buscar el ejecutable del adobe sin tener que pedir al usuario el path del ejecutable.
Y la segunda cuestión es la siguiente. He probado los dos ejemplos java que me has pasado y que aprovecho para agradecerte y me funcionan correctamente. Pero entonces me ha surgido una pequeño problema. Yo lo que quiero es que cuando le doy a un botón de la barra de herramientas salga un ventana que contenga el Jpanel y no hacer depender el JPanel del Frame. Yo lo que hago ahora para consegurilo es en el evento hago visible un JOptionPane estándar donde le agrego los Jpanel que yo creo. No si es la forma correcta porque me parece que seria más correcto el uso de InternalFrame y de esta forma tendría el control de la estética de las ventanas que salen y no dejaría la estética estándar del dialogo que muestro.
Saludos y no me cansaré de decir gracias.
Lo de conocer el ejecutable del adobe no lo conozco, pero se puede investigar. Pero lo que esta claro es que depende del sistema operativo donde se ejecute la aplicación... en Windows habrá que acudir al registro, en Linux a los ficheros de configuración, en Unix ¿quién sabe?. Dime en que sistema/s operativo/s lo quieres y así puedo centrarme más.
Con respecto al panel a utilizar, depende mucho de lo que deseas...
- Los InternalFrames se utilizan como ventanas dentro de una ventana principal, así que siempre estarán ligados al principal. Ten en cuenta que el concepto de aplicación engloba todas las funcionalidades, que deben ser ejecutadas dentro de un mismo encuadre para que el usuario no se pierda.
- Los JOptionPanel se utilizan cuando se desea mostrar mensajes o solicitar una respuesta rápida del usuario.
Sospecho por el código que mandaste que lo que quieres es sacar la ayuda en una ventana nueva, ayuda que esta en un documento pdf. Si es realmente lo que quieres, personalmente abriría otra aplicación, es decir, crearía una aplicación nueva con su JFrame y su funcionalidad (nula, solo abre el pdf directamente). De esta forma el usuario puede tener las dos cosas.
Espero tu respuesta con el/los sistema/s opertivo/s.
Con respecto al panel a utilizar, depende mucho de lo que deseas...
- Los InternalFrames se utilizan como ventanas dentro de una ventana principal, así que siempre estarán ligados al principal. Ten en cuenta que el concepto de aplicación engloba todas las funcionalidades, que deben ser ejecutadas dentro de un mismo encuadre para que el usuario no se pierda.
- Los JOptionPanel se utilizan cuando se desea mostrar mensajes o solicitar una respuesta rápida del usuario.
Sospecho por el código que mandaste que lo que quieres es sacar la ayuda en una ventana nueva, ayuda que esta en un documento pdf. Si es realmente lo que quieres, personalmente abriría otra aplicación, es decir, crearía una aplicación nueva con su JFrame y su funcionalidad (nula, solo abre el pdf directamente). De esta forma el usuario puede tener las dos cosas.
Espero tu respuesta con el/los sistema/s opertivo/s.
Muy buenas de nuevo,
Te reenvío mi petición de aclaración porque no tengo la certeza de que la hayas recibido.
Lo que me comentas no estaría mal aunque no es lo que yo quiero.
Lo que quiero exactamente es:
Que cuando le hago click en el la opción "Desplazamientos diarios" le salga al usuario un formulario dentro de una ventana y dicha ventana quiero que dependa del frame principal(el que contiene MenuBar). Dicha ventana quiero que me salga centrada el frame principal. Lo que no quiero es que el formulario depende de la frame principal porque si no ocupa toda la pantalla y no es lo que quiero.
Saludos y gracias por tu tiempo ayuda y por tu amabilidad.
Te reenvío mi petición de aclaración porque no tengo la certeza de que la hayas recibido.
Lo que me comentas no estaría mal aunque no es lo que yo quiero.
Lo que quiero exactamente es:
Que cuando le hago click en el la opción "Desplazamientos diarios" le salga al usuario un formulario dentro de una ventana y dicha ventana quiero que dependa del frame principal(el que contiene MenuBar). Dicha ventana quiero que me salga centrada el frame principal. Lo que no quiero es que el formulario depende de la frame principal porque si no ocupa toda la pantalla y no es lo que quiero.
Saludos y gracias por tu tiempo ayuda y por tu amabilidad.
Entonces es la primera opción:
- Para que sea un Frame, cambia la clase "PanelSuelto" para que extienda de JInternalFrame.
- Para que salga en el centro, cambia el layout del Frame principal por un GridBagLayout y ajusta la visualización en el método "abrirPanelSuelto" de la clase "Dialogo"
Te los "cuelgo" de donde siempre:
http://es.geocities.com/imorenohojas/Dialogo.java
http://es.geocities.com/imorenohojas/PanelSuelto.java
- Para que sea un Frame, cambia la clase "PanelSuelto" para que extienda de JInternalFrame.
- Para que salga en el centro, cambia el layout del Frame principal por un GridBagLayout y ajusta la visualización en el método "abrirPanelSuelto" de la clase "Dialogo"
Te los "cuelgo" de donde siempre:
http://es.geocities.com/imorenohojas/Dialogo.java
http://es.geocities.com/imorenohojas/PanelSuelto.java
Muy buenas y gracias por tu ayuda como siempre,
Siento no haber podido mirarlo antes y contestar, perdona.
He estado mirando el ejemplo que me has pasado y aunque esta bien porque me permite configurar los elementos del interior del frame como yo quiera. Pero el problema es que no tiene algunas características que me gustaban de los JOptionPanel como que tenia la misma apariencia que mi frame y que me bloqueaba a la usuario, es decir, lo le permitía clickar en ningún sitio que no fuera dentro de la ventana. Me podrías indicar como puedo dotar de estas peculiaridades al JInternalFrame, me seria de gran utilidad.
Saludos y muchas gracias por todo
Siento no haber podido mirarlo antes y contestar, perdona.
He estado mirando el ejemplo que me has pasado y aunque esta bien porque me permite configurar los elementos del interior del frame como yo quiera. Pero el problema es que no tiene algunas características que me gustaban de los JOptionPanel como que tenia la misma apariencia que mi frame y que me bloqueaba a la usuario, es decir, lo le permitía clickar en ningún sitio que no fuera dentro de la ventana. Me podrías indicar como puedo dotar de estas peculiaridades al JInternalFrame, me seria de gran utilidad.
Saludos y muchas gracias por todo
Siento el retraso...
Para dotar al JInternalFrame de esas cualidades, hay que realizarlo a base de código. Tal vez cambiar a un JDialog sea lo más fácil: Tienes la opción de ponerlo como modal, tiene el mismo aspecto que el frame inicial (ya que es una ventana nueva como el JOption) y te permite configurar los elementos del interior.
Para realizarlo necesitas que la clase "PanelSuelto" extienda de JDialog, implementar el constructor que permita su uso como modal (con el padre y la opción modal) y cambiar la forma de llamarlo.
A modo personal no utilizo estos objetos ya que se pierde un poco la forma "normal" de uso de las aplicaciones. Normalmente existe un frame principal (que tiene una apariencia) en el que aparecen paneles secundarios (que tienen otra apariencia). Eventualmente aparecen mensajes, avisos, etc ... que tienen la misma apariencia que el frame principal, pero son eso, avisos, nunca ventanas que recojan información o realicen alguna funcionalidad. Realmente lo que cambia es la capa (posición z) donde aparece, la apariencia se pinta en función de ello. Mientras que los paneles secundarios no pueden salir del entorno del frame principal, los avisos si, como si fueran algo independientes, pero que dependen por ser modales. Espero haberme explicado.
Te dejo el ejemplo de nuevo... espero que tengas el histórico, ya que yo los voy borrando.
http://es.geocities.com/imorenohojas/Dialogo.java
http://es.geocities.com/imorenohojas/PanelSuelto.java
Para dotar al JInternalFrame de esas cualidades, hay que realizarlo a base de código. Tal vez cambiar a un JDialog sea lo más fácil: Tienes la opción de ponerlo como modal, tiene el mismo aspecto que el frame inicial (ya que es una ventana nueva como el JOption) y te permite configurar los elementos del interior.
Para realizarlo necesitas que la clase "PanelSuelto" extienda de JDialog, implementar el constructor que permita su uso como modal (con el padre y la opción modal) y cambiar la forma de llamarlo.
A modo personal no utilizo estos objetos ya que se pierde un poco la forma "normal" de uso de las aplicaciones. Normalmente existe un frame principal (que tiene una apariencia) en el que aparecen paneles secundarios (que tienen otra apariencia). Eventualmente aparecen mensajes, avisos, etc ... que tienen la misma apariencia que el frame principal, pero son eso, avisos, nunca ventanas que recojan información o realicen alguna funcionalidad. Realmente lo que cambia es la capa (posición z) donde aparece, la apariencia se pinta en función de ello. Mientras que los paneles secundarios no pueden salir del entorno del frame principal, los avisos si, como si fueran algo independientes, pero que dependen por ser modales. Espero haberme explicado.
Te dejo el ejemplo de nuevo... espero que tengas el histórico, ya que yo los voy borrando.
http://es.geocities.com/imorenohojas/Dialogo.java
http://es.geocities.com/imorenohojas/PanelSuelto.java
Muy buenas,
Esto es lo que quería muchas gracias, por todo. Pero abusar un poco más de ti si me lo permites.
Tengo un par de dudas más:
1)Tengo una función de auto guardado cada 5 minutos pero no se exactamente como debo implementarla me puedes ayudar.
2)Un compañero ha hecho una parte del programa usando la librería jgraph. Esta parte permite guardar, mostrar... mapas. Pero me gustaría integrar dicha parte que en mi frame principal en vez de hacer de llamar a su programa cuando necesite alguna cosa. Como lo puedo. Y una vez hecho como podría pasarnos datos entre uno y el otro.
Saludos y gracias de nuevo.
PD:Si este no es lugar para abrir otra pregunta. Dímelo la cierro y te abro una nueva, gracias.
Esto es lo que quería muchas gracias, por todo. Pero abusar un poco más de ti si me lo permites.
Tengo un par de dudas más:
1)Tengo una función de auto guardado cada 5 minutos pero no se exactamente como debo implementarla me puedes ayudar.
2)Un compañero ha hecho una parte del programa usando la librería jgraph. Esta parte permite guardar, mostrar... mapas. Pero me gustaría integrar dicha parte que en mi frame principal en vez de hacer de llamar a su programa cuando necesite alguna cosa. Como lo puedo. Y una vez hecho como podría pasarnos datos entre uno y el otro.
Saludos y gracias de nuevo.
PD:Si este no es lugar para abrir otra pregunta. Dímelo la cierro y te abro una nueva, gracias.
Cuando cambies radicalmente la pregunta, es mejor cerrar y abrir una nueva, ya que así se tienen bien definidos los hilos... pero con esta sigamos así para no liarlo más.
Con respecto al abuso... te lo permito, por supuesto. Para esto estamos.
Vamos con las preguntas:
1) Yo me decantaría por realizar un hilo que realizara una pausa de 5 minutos (u otro tiempo pasado por parámetro) y luego guardara. Tal vez el problema principal sea que el objeto a guardar no lo tiene el hilo, así que debe llamar a un método externo, de algún objeto estático que si sepa qué guardar. Así se tendría una clase estática que contiene un objeto (o varios) que es el que se esta modificando continuamente, esta clase debe tener un método público para guardar dicho objeto, precisamente a este método es al que debe llamar el hilo que realiza la salvaguarda.
2) Hay que modificar la aplicación de tu compañero cuanto menos mejor para no perder el encapsulamiento. Seguramente tiene un frame principal que es quien lleva la voz cantante de todo el proceso, personalmente, reharía únicamente este frame para que sea un JInternalFrame, un JOptionPanel, un JDialog... y así poderlo llamar desde tu programa. La parte de transferencia de información entre ambos depende mucho de como este realizado el programa. Pero generalizando mucho, en esa clase nueva se debería implementar aquellos métodos que permitan acceder a la información del programa de tu compañero y así poderlo llamar desde el tuyo. Resumiendo, se puede decir que la aplicación de jgraf quedaría exactamente igual, añadiendo una clase que realizara las labores de interface entre tu aplicación y la suya, de esta forma puede ejecutarse independientemente o dentro de tu aplicación.
Sé que los esbozos que te doy son muy genéricos, pero es un comienzo para ahondar más en las preguntas. Además, ten en cuenta que para realizar funcionalidades siempre existen infinitas formas, el problema reside en escoger la mejor, así que se admiten todo tipo de discusiones al respecto de las soluciones que te doy.
Un saludo.
PD: Si quieres que utilicemos el mail para que tengas las cosas más ordenadas y poder enviar archivos, por mi no hay problema. Cierra la pregunta y escríbeme a: [email protected]
Con respecto al abuso... te lo permito, por supuesto. Para esto estamos.
Vamos con las preguntas:
1) Yo me decantaría por realizar un hilo que realizara una pausa de 5 minutos (u otro tiempo pasado por parámetro) y luego guardara. Tal vez el problema principal sea que el objeto a guardar no lo tiene el hilo, así que debe llamar a un método externo, de algún objeto estático que si sepa qué guardar. Así se tendría una clase estática que contiene un objeto (o varios) que es el que se esta modificando continuamente, esta clase debe tener un método público para guardar dicho objeto, precisamente a este método es al que debe llamar el hilo que realiza la salvaguarda.
2) Hay que modificar la aplicación de tu compañero cuanto menos mejor para no perder el encapsulamiento. Seguramente tiene un frame principal que es quien lleva la voz cantante de todo el proceso, personalmente, reharía únicamente este frame para que sea un JInternalFrame, un JOptionPanel, un JDialog... y así poderlo llamar desde tu programa. La parte de transferencia de información entre ambos depende mucho de como este realizado el programa. Pero generalizando mucho, en esa clase nueva se debería implementar aquellos métodos que permitan acceder a la información del programa de tu compañero y así poderlo llamar desde el tuyo. Resumiendo, se puede decir que la aplicación de jgraf quedaría exactamente igual, añadiendo una clase que realizara las labores de interface entre tu aplicación y la suya, de esta forma puede ejecutarse independientemente o dentro de tu aplicación.
Sé que los esbozos que te doy son muy genéricos, pero es un comienzo para ahondar más en las preguntas. Además, ten en cuenta que para realizar funcionalidades siempre existen infinitas formas, el problema reside en escoger la mejor, así que se admiten todo tipo de discusiones al respecto de las soluciones que te doy.
Un saludo.
PD: Si quieres que utilicemos el mail para que tengas las cosas más ordenadas y poder enviar archivos, por mi no hay problema. Cierra la pregunta y escríbeme a: [email protected]
- Compartir respuesta
- Anónimo
ahora mismo