Centrar un JFrame/JDialog en pantalla

11Feb08

Al crear un nuevo JFrame ó JDialog en Swing, al hacerlos visibles estos aparecerán arriba a la izquierda de nuestra pantalla. Por ejemplo si realizamos:

import javax.swing.JFrame;

public class Prueba{
   public static void main(String[] args){

      JFrame frame = new JFrame("Prueba JFrame");
      frame.setSize(500, 500);
     frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
      frame.setVisible(true);
   }
}

al ejecutarlo, veremos como resultado así:

JFrame en posicion de apertura por defecto

Si ahora especificamos por medio del método setLocationRelativeTo a null, la ventana se posicionará en el medio de la pantalla. Por lo que si agregamos la siguiente linea:

import javax.swing.JFrame;

public class Prueba{
   public static void main(String[] args){

      JFrame frame = new JFrame("Prueba JFrame");
      frame.setSize(500, 500);
      frame.setLocationRelativeTo(null);
     frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
      frame.setVisible(true);
   }
}

tendremos un resultado similar a este:

JFrame abierta en el centro de la pantalla

Centrar JDialog en JFrame

Si lo que deseamos es centrar un JDialog en el JFrame «padre», lo que hacemos es usar el mismo método, pero esta vez especificando que la posicioón de apertura del JDialog será con respecta al JFrame:

import javax.swing.JFrame;

public class Prueba{
   public static void main(String[] args){

      JFrame frame = new JFrame("Prueba JFrame");
      frame.setSize(500, 500);
      frame.setLocationRelativeTo(null);

      final JButton boton = new JButton("Abrir Dialogo");
      boton.addActionListener(new ActionListener() {
         public void actionPerformed(ActionEvent e) {
            JDialog dialogo = new JDialog(frame);
            dialogo.setSize(100, 100);
            dialogo.setLocationRelativeTo(frame);
            dialogo.setVisible(true);
         }
      });

      frame.add(boton);
     frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
      frame.setVisible(true);
   }
}

los que no da como resultado al hacer click:

JDialog centrado en JFrame

Espero les sea de utilidad.

Hasta la próxima.



54 Responses to “Centrar un JFrame/JDialog en pantalla”

  1. Más sencillo era.. botón derecho sobre el JFrame -> Properties, Solapa «Code», opción.. «Generate Center».. la tildamos.. y Chau! 😉 (Lo descubrí por pasear en las opciones xD)

  2. 2 josem

    graciass… me sirvio mucho!

  3. 3 MasSoft

    Hola amigos yo tengo un JFrame con controles JPanel y JTextfield y mas y cuando ingreso tu codigo lo ejecuto me muestra el form centrado pero sin nada(sin controles), soy nunevo en esto jeje

  4. 4 Erick

    Una pregunta como centro un JinternalFrame dentro de un desktop????

  5. 5 Jorge

    Excelente aporte….gracias 🙂 Soy novato en java…dejo mi correo por si alguien quiere intercambiar info… arrobax4@homail.com

  6. 6 Álvaro

    Muchas gracias!

  7. 7 usuario

    Muy bueno 😉

  8. 8 juanra

    buenisimo gracias

  9. 9 Smith

    Buen dato. Gracias.

  10. 10 Jair

    gracias, lo hacia al calculo d mi monitor 100pr pero cuando kise correrlo en una mini fallo… asi q gracias x la ayuda facil y practik

  11. COOL, funciona a la perfección, grax desde

  12. Gracias!

  13. 13 Nicolaz

    que pena, es que el dialogo me sale en el centro del fram exactamente. lo que me sale en el centro del frame es la primera esquina del dialogo

  14. 14 Ouro

    Muchas gracias por este consejo tan util, justo lo que buscaba!

  15. 15 Josue

    gracias me sirvio mucho =

  16. 16 arkero24

    Gracias genio!!!

    De lo mejor!
    Era una bobada pero el ke no sabe, es como el ke no ve…Gracias a Dios a hay genios como vos!!

  17. 17 rafo

    import java.awt.Dimension;
    import java.awt.Toolkit;

    public class menu_principal extends javax.swing.JFrame {
    public menu_principal() {
    initComponents();
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    this.setSize(d);
    }

    Para maximizar una formulario, de tu amigo rafo, si quieres intercambiar o necesitas ayuda en netebeans, escribeme a rafofoxbasic2000@hotmail.com

  18. Es mas facil centrar las ventanas java con solo la siguiente linea:

    setLocationRelativeTo(null);

    Bye bye!

    • 19 padurwa

      Pero si eso es lo que dice el articulo!

  19. 20 yurifull

    muy buen aporte man!! justo lo q queria saber…

  20. 21 Luis

    Buena amigo,gracias por el aporte. bien explicado, como se debe hacerlos tutoriales

  21. 22 CV

    Me muestra este error

    ——————–Configuration: Juego6 – j2sdk1.4.1_04 – ——————–
    D:\Materiales de Programacion\Mis Programas\Java\Juego6\frmInicio.java:19: cannot resolve symbol
    symbol : class JButton
    location: class frmInicio
    final JButton boton = new JButton(«Abrir Dialogo»);
    ^
    D:\Materiales de Programacion\Mis Programas\Java\Juego6\frmInicio.java:19: cannot resolve symbol
    symbol : class JButton
    location: class frmInicio
    final JButton boton = new JButton(«Abrir Dialogo»);
    ^
    D:\Materiales de Programacion\Mis Programas\Java\Juego6\frmInicio.java:20: cannot resolve symbol
    symbol : class ActionListener
    location: class frmInicio
    boton.addActionListener(new ActionListener()
    ^
    3 errors

    Process completed.

  22. 23 hp

    bueno amio sabes tus metodos no me ayudan mucho sabes lo intente y no da resultado ps mi ventana JFrame no se centra en mi consola; asi no se si seria mucho pedirte k me envies otra opcion talvez si la hubiese ok gracias

    • Me ayudo mucho tu explicacion, gracias hermano de verdad, solo que no entiendo por que hay gente tan pendeja que comenta que no les sirven tus metodos y aun asi se atreven a pedirte otra opcion :/ , si no te sirve es por que algo estas haciendo mal en alguna parte de tu codigo, solo es cuestion de que le pongas empeño en estructurar tu interfaz y dejes de mamar con ese tipo de comentarios.

  23. 25 pedro

    Hola yo tengo otro problema que espero me sepan resolver.

    Cuando le doy a un boton, se me abre una nueva ventana, y he conseguido que se me habra maximizada segun el tamaño de mi pantalla:
    Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    this.setSize(d);

    Ahora tengo el problema que los botones, textbox y todo esos componentes, al ser el formulario gigante, se me coloca en la parte superior izquierda…como puedo hacer para que se quede centrado en la pantalla dentro del JDialog?

  24. 26 pamela

    si d verdad muy util me sirvio lo q ahora me gustaria saber es como poder cerrar un frame mediante un boton sin q se cierre el frame principal ya q system.exit(0); no me resulta bueno seguire investigando a ver si puedo subir yo misma mi solucion igual si me ayuda alguien s elo agradeceria

  25. Ha sido de mucha ayuda, cada día se aprende más.
    Saludos

  26. 28 Eddy

    Hola, solo queria agradecerte por este tics, la verdad es q si me estaba costando hacerlo a puro codigo… y todo eso.. como dijeron «NOS ALEGRASTE EL DIA»»…

  27. 29 jegnner

    gracias me sirvio mucho !!!

  28. 30 CAPE

    Mis respetos, me ha sido de mucha ayuda. La verdad es la primera vez que envio un comentario.
    Esa si es manera de ayudar, neto gracias

  29. 31 HombreQRie

    holas tengo un problema, cuando le pongo en run como java aplication , no se ven mis botones que programe

    y cuando pongo como jababeans ahi si se ven , tu sabes por que pasa eso ???

  30. 32 micki

    Gracias me sivio de mucho!

  31. Retracto lo dicho… tiene razon señor Le Funes

  32. Hola que tal?.. me parece que no estas centrando ninguna JFrame sino que le estas diciendo que se ubique en el pixel (500,500) de la pantalla el angulo superior izquierdo de este.. y apartir de alli se dibuje.

    La idea de centrar es que el jFrame pueda aparecer en el centro siempre, sin importar la resolucion con la que este la pantalla.XD

  33. 35 carlos

    Disculpa mi ignorancia, no tengo mucha experiencia sobre la edición de blogs, pero me parece genial la herramienta para mostrar código. ¿Es nativa de este blog?, o ¿utilizas alguna herramienta?

  34. 36 Fernando Méndez

    Gracias por la información. Me ha sido muy util para detallar la apariencia de mi proyecto.

  35. 37 Me

    Muy buena información, desconocia el método.

  36. 38 Victor Hugo

    Excelente, gracias por la información.

    Hugo

  37. @Javix, para deshabilitar el botón de maximizado y no permitir que el usuario redimencione tu jFrame simplemente realiza un:

    jframe.setResizable(false);
    

    por el lado del botón minimizar la historia es otra. Existen varias soluciones pero dependen de otras variables que no siempre funcionan correctamente (el Look&Feel utilizado por el usuario por ejemplo). Para el caso de tambien querer dejar sin funcionamiento el botón minimizar una buena alternativa es directamente utilizar JDialog en vez de JFrame.

    Saludos

    • Hola Funes, pregunta:

      Si usamos JDialog en lugar de JFrame, ¿se pierde el acceso a las ventanas que están detrás, como en Windows Forms?

  38. 41 Javix

    Hola una pregunta , como haria para tener deshabilitado los botones de minimizar y maximizar del JFrame.
    Muchas graciasssssssssssssssssssssss

  39. Muchísimas gracias por el consejo.
    Lo estoy utilizando en mi aplicación y funciona de perlas!!

  40. @Ricardo no hay problema 🙂

  41. Muchas gracias por tu artículo, muy útil y descriptivo.

    Me permito hacer un artículo en mi blog y mencionarte como fuente.

    ¡Saludos y de nuevo gracias!

  42. 45 Cesar

    Muy buena la ayuda no tenia ni idea de como efectuar el centrado.

  43. 46 Flipandolo

    Muchisimas gracias, me tenia loco porque no me funcionaba, claro era por que no lo ponia detras de pack()

    Me habeis alegrado el dia!!

  44. 47 Ismael

    Gracias por el tip. Ha sido de gran ayuda.

  45. 48 ISC. JOLU

    Excelentee

    Gracias muy buena informacion
    me sirvio de mucho.

  46. Claro, lo que hace setLocationRelativeTo en el momento que es invocado, pero modificando luego el tamaño del JFrame (ya sea en un pack o setSize) se modificará pero no se autocentrará en la pantalla. En este caso deberá volverse a llamar a setLocationRelativeTo.

    Gracias por la aclaración.

  47. 50 franjo

    Tambien me sirvio, ya que estoy trabajando con JFrame principal y ventanas JDialog. Es importante recalcar que el setLocationRelativeTo solo funcionara si lo ponemos luego de un pack() o setSize(), chauuuu

    • 51 Arturo

      Muchas gracias me haz ahorrado media hora de programacion, muy util no sabia que existiera ese metodo.

    • 52 Nicolaz

      jajaja gracias me salia en el centro no el centro del dialogo sino la primera esquina del dialogo


  1. 1 Jframe | TagHall
  2. 2 Centra un JFrame/JDialog en Java | Código Fantasma