Como usar setLocationRelativeTo

Iniciado por 4dr14n31t0r, 4 Abril 2016, 09:10 AM

0 Miembros y 1 Visitante están viendo este tema.

4dr14n31t0r

Para que sirve el metoo setLocationRelativeTo?
Por mas que busco en internet solo encuentro ejemplos en los que se le pasa por parametro 'null', que lo que hace es centrar la ventana:
setLocationRelativeTo(null);
Pero no encuentro ningun ejemplo que utilize un valor distinto de null. Se supone que lo que hace es colocar la ventana relativo al objeto que se le pasa, pero lo he probado y nada, que sigo sin ver como funciona.
¿Alguien puede ayudarme?
Gracias de antemano.

4dr14n31t0r

Ok acabo de descubrirlo yo solo:

Lo que hace es centrar la ventana, haciendo que el centro de la misma coincida con el centro del componente (hasta ahi todo bien). El problema es que cuando la ventana cambia de posicion respecto de la pantalla, tambien lo hacen todos sus componentes respecto de la ventana, ya que los componentes tienen una posicion fija respecto de la ventana. Entonces lo que sucede es lo siguiente:

1- El componente debe estar añadido a la ventana y debe de poder mostrarse. Es decir, la ventana debe estar visible.(De lo contrario simplemente centrará la ventana en la pantalla).

2- Mueve la ventana a una posicion de tal forma que su centro coincida con el del componente

3- Mueve los componentes respecto de la pantalla para que conserven su posicion respecto de la ventana

Si quieres ver bien como funciona haz lo siguiente: Ejecuta sin utilizar el setLocationRelativeTo, y sin terminar la ejecucion cambia el codigo y añade el setLocationRelativeTo para tener en ejecucion uno con y otro sin el metodo, y despues cambia rapidamente de una ventana a otra SIN CAMBIAR LA VENTANA DE SITIO dejando la ventana tal y como se ha creado. Cuando lo cambies rapidamente de una ventana a otra podrás ver mejor que el componente de una ventana coincide con el centro de otra

Ejemplo:package ejemplos;

import java.awt.Color;

import javax.swing.JFrame;
import javax.swing.JPanel;

public class EjemploSetLocationRelativeTo {

public static void main(String[] args) {
JFrame ventana = new JFrame();
ventana.setLayout(null);//Para usar coordenadas absolutas
/*
* IMPORTANTE
* antes de usar el metodo setLocationRelativeTo
* los componentes deben estar visibles
* asi que la ventana debe de estarlo tambien
* de lo contrario la ventana se centrará
* respecto la pantalla
*/
ventana.setVisible(true);
JPanel p = new JPanel();
p.setBackground(Color.GRAY);//Para distinguirlo. Si no no se vería =D
p.setBounds(200,200,50,50);
ventana.add(p);
ventana.setSize(300, 300);
/*
* Para ver mejor como funciona el metodo haz lo siguiente:
* 1- Ejecuta el codigo (IMPORTANTE no muevas la ventana ni le cambies el tamaño)
* 2- Descomenta la linea 36 (La que contiene el metodo)
* 3- Vuelve a ejecutar
* 4- Cambia rapidamente de una ventana a otra
* Como puedes ver el centro de una ventana coincide
* con el cuadrado gris de la otra
*/
// ventana.setLocationRelativeTo(p);
}

}