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);
}
}