Foro de elhacker.net

Programación => Java => Mensaje iniciado por: Flamethrower en 3 Octubre 2013, 03:00 am



Título: Java Swing - Posicionar ventanas
Publicado por: Flamethrower en 3 Octubre 2013, 03:00 am
Saludos,

Tengo una duda respecto del posicionamiento de ventanas con swing. Pimero tengo varios JDialog desplegables, es decir que incorporarán paneles si se producen ciertos eventos. El problema es que algunas de las ventanas desplegadas son un poco largas y en algunas pantallas el menú final se pierde en el borde inferior.

Antes que nada, mi proyecto no usa Layouts (y no dispongo de más tiempo como para aprender a usarlos e implementarlos). Cosas de las que me entero tarde -_-

Mi problema anterior se pseudo-soluciona con el método setLocationRelativeTo(null); pero me gustaría más que dicho Dialog se pueda mover por el usuario y que al momento de desplegarse, sólo se reposicione verticalmente.
¿Se puede sólo centrar verticalmente el Dialog sin importar en que posición horizontal se encuentre? Cuando digo se puede, no contemplo la posibilidad de que no, sino más bien aludo a la dificultad de la tarea xD!

Luego, tengo un JFrame como ventana inicial de la aplicación que he intentado hacer que ocupe el tamaño completo de la pantalla sin resultado positivo.
He utilizado el método SetSize(arg); con argumento un objeto Dimension creado con distintos parámetros, y la ventana permanece inmutable -_-

Agradezco desde ya las lecturas y cualquier ayuda sobre el tema.
Por cierto, trabajo sobre Netbeans. También he jugado un poco con las propiedades del JFrame desde la vista de diseño, y nada... Por ahí yo mismo he bloqueado de alguna forma la ventana :P!

Buena vida.


Título: Re: Java Swing - Posicionar ventanas
Publicado por: Mine Sweeper en 3 Octubre 2013, 16:55 pm
No estoy muy seguro de como hacer lo que quieres hacer, pero lo de hacerlo en full screen si te puedo ayudar

Código:
setExtendedState( MAXIMIZED_BOTH );

me dices si te sirve


Título: Re: Java Swing - Posicionar ventanas
Publicado por: Flamethrower en 4 Octubre 2013, 05:34 am
Coloque el método en el constructor del JFrame y nada.

Anteriormente probé con:
Código:
float escalar = 0.5F;
int ancho = (int)(Toolkit.getDefaultToolkit().getScreenSize().width*escalar);
int alto = (int)(Toolkit.getDefaultToolkit().getScreenSize().height*escalar);
principal.setSize(ancho,alto);
Y también con variaciones de los anteriores métodos y parámetros.

No he seguido buscando porque tengo cuestiones del programa con más prioridad (como terminar su funcionalidad xD!). Pero me da pensar que la dificultad esta por algo que he tocado... Ya miraré el código con más detalle.

Gracias por la sugerencia. Si tienes más ideas, bienvenido eres :P!


EDITO:
Solucioné el problema del JFrame. En mi clase principal el método main invocaba a dicho Frame mediante un show("JFrame"); Quité eso y coloqué simplemente new "JFrame"(); Agregando un setVisible(true); en el constructor del JFrame.

Ahora tengo otro problema. Este JFrame muestra dos JPanel según un par de opciones. El tema es que no puedo hacer que aparezca un JPanel sin hacer un pack(); lo cual me conduce a reducir el tamaño del JFrame.
La pregunta es: ¿Como agregar o quitar paneles en un JFrame manteniendo su formato? Ya sea el inicial o el que el usuario dejo moviendo la ventana.

Saludos.


Título: Re: Java Swing - Posicionar ventanas
Publicado por: ThinkByYourself en 12 Octubre 2013, 15:05 pm
No lo sé, pero puede que esta sea una de esas cosas que se puedan solventar usando un layout, y el layout por excelencia en swing es gridbaglayout. Mi opinión, como no he entendido del todo el problema, no sé decirte con detalle si es lo que estás buscando. Si buscas encuentras!
https://www.youtube.com/watch?v=Dw4rtERX0zw
Un saludooooo!


Título: Re: Java Swing - Posicionar ventanas
Publicado por: Chuidiang en 14 Octubre 2013, 07:18 am
Hola:

Una vez visible una ventana, si añades o quitas componentes, estos no se pintan, siendo necesario redimensionar la ventana o hacer algo que obligue al repintado. Debes llamar al método updateUI() para hacer que se redibuje todo, no valen método como repaint().

Se bueno.