JFrame en el centro de la pantalla – Java Swing

Java Swing JFrame Center

Con este ejemplo sencillo vamos a inaugurar una serie de ejemplos básicos con Java Swing, estos están dedicados a la gente que empieza con Java y busca ejemplos para su aprendizaje inicial.

JFrame en el centro de la pantalla – Java Swing

En este sencillo ejemplo lo único que vamos a hacer es crear un JFrame añadirle un par de JLabel con un texto cualquiera, y finalmente, ejecutar el método que coloca nuestro JFrame en el centro de la pantalla.

En mi caso para este ejemplo he usado Netbeans, no dudes en usar tu IDE favorito en cualquiera lo podrás hacer.

Por donde empezamos, en primer lugar al utilizar el Netbeans necesitamos crear un proyecto, selecciona File > New Project, una vez ahí seleccionamos Java para marcar Java Application, listo proyecto creado.

Ahora vamos a crear un JFrame con el nombre JFrameCenterSimple para ello seleccionamos en el proyecto la opción New JFrame Form aquí introducimos el nombre y el paquete donde lo ubicamos en mi caso org.xulescode.swing.

En el diseñador de Netbeans añade lo que veas en mi ejemplo he añadido dos JLabel, para ello abre la clase en la opción Design y arrastra los componentes así de fácil.

Añadimos el código con los métodos que utilizo para este ejemplo para situar el JFrame en el centro de la pantalla o en el lugar que quereamos, son dos, en el código encontrarás la explicación, este es el primero:

    /** 
     * Place the JFrame with the parameters by moving the component relative to the center of the screen.
     * Colocamos el JFrame con los parámetros desplazando el componente respecto al centro de la pantalla.  
     * @param moveWidth int positive or negative offset width (desplazamiente de width positivo o negativo).
     * @param moveHeight int Positive or negative offset height (desplazamiento de height positivo o negativo).
     */    
    public void setLocationMove(int moveWidth, int moveHeight) {
        // Obtenemos el tamaño de la pantalla.
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        // Obtenemos el tamaño de nuestro frame.
        Dimension frameSize = this.getSize();
        frameSize.width = frameSize.width > screenSize.width?screenSize.width:frameSize.width;
        frameSize.height = frameSize.height > screenSize.height?screenSize.height:frameSize.height;   
        // We define the location. Definimos la localización.
        setLocation((screenSize.width - frameSize.width) / 2 + moveWidth, (screenSize.height - frameSize.height) / 2 + moveHeight);        
    }

 

Para centrar nuestro JFrame en el centro de la pantalla simplemente creamos un nuevo método setLocationCenter() donde llamamos a setLocationMove(0, 0), es decir, con los valores de desplazamiento a cero.

    /**
     * Set the JFrame in the center of the screen.
     * Colocamos nuestro JFrame en el centro de la pantalla.
     */
    public void setLocationCenter(){
        setLocationMove(0, 0);
    }

 

En el método main del ejemplo añado tres llamadas al JFrameCenterSimple para obtener este resultado:

JFrame Center Simple

JFrame Center Simple

Este será el código final:

package org.xulescode.swing;

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

/**
 * Easy to focus a JFrame on screen or place where we want about the center example.
 * Ejemplo sencillo para centrar un JFrame en pantalla o colocar donde queramos respecto al centro.
 * @author xules
 *      You can follow me on my website http://www.codigoxules.org/en 
 *      Puedes seguirme en mi web http://www.codigoxules.org.
 */
public class JFrameCenterSimple extends javax.swing.JFrame {

    /**
     * Create a new form JFrameCenterSimple centered with respect to the screen
     * Crea un nuevo form JFrameCenterSimple centrado con respecto a la pantalla.
     */
    public JFrameCenterSimple() {
        initComponents();
        setLocationCenter();
        setVisible(true);
    }
    /**
     * Create a new form JFrameCenterSimple centered with respect to the screen
     * Crea un nuevo form JFrameCenterSimple centrado con respecto a la pantalla.
     * @param moveWidth int positive or negative offset width (desplazamiente de width positivo o negativo).
     * @param moveHeight int Positive or negative offset height (desplazamiento de height positivo o negativo).
     */
    public JFrameCenterSimple(int moveWidth, int moveHeight) {    
        initComponents();
        setLocationMove(moveWidth, moveHeight);
        setVisible(true);
    }
    /**
     * Set the JFrame in the center of the screen.
     * Colocamos nuestro JFrame en el centro de la pantalla.
     */
    public void setLocationCenter(){
        setLocationMove(0, 0);
    }
    /** 
     * Place the JFrame with the parameters by moving the component relative to the center of the screen.
     * Colocamos el JFrame con los parámetros desplazando el componente respecto al centro de la pantalla.  
     * @param moveWidth int positive or negative offset width (desplazamiente de width positivo o negativo).
     * @param moveHeight int Positive or negative offset height (desplazamiento de height positivo o negativo).
     */    
    public void setLocationMove(int moveWidth, int moveHeight) {
        // Obtenemos el tamaño de la pantalla.
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        // Obtenemos el tamaño de nuestro frame.
        Dimension frameSize = this.getSize();
        frameSize.width = frameSize.width > screenSize.width?screenSize.width:frameSize.width;
        frameSize.height = frameSize.height > screenSize.height?screenSize.height:frameSize.height;   
        // We define the location. Definimos la localización.
        setLocation((screenSize.width - frameSize.width) / 2 + moveWidth, (screenSize.height - frameSize.height) / 2 + moveHeight);        
    }
    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jTextField1 = new javax.swing.JTextField();
        jLabel1 = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();

        jTextField1.setText("jTextField1");

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("JFrame screen location (posicionamiento en pantalla)");

        jLabel1.setFont(new java.awt.Font("Ubuntu", 1, 18)); // NOI18N
        jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel1.setText("Centramos el JFrame en la pantalla");
        jLabel1.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);

        jLabel2.setFont(new java.awt.Font("Ubuntu", 1, 18)); // NOI18N
        jLabel2.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        jLabel2.setText("Center the JFrame on the screen");
        jLabel2.setHorizontalTextPosition(javax.swing.SwingConstants.CENTER);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap(107, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                    .addComponent(jLabel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, 312, Short.MAX_VALUE))
                .addContainerGap(120, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(79, Short.MAX_VALUE)
                .addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(59, 59, 59)
                .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(84, 84, 84))
        );

        pack();
    }// </editor-fold>                        

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(JFrameCenterSimple.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(JFrameCenterSimple.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(JFrameCenterSimple.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(JFrameCenterSimple.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {                
                new JFrameCenterSimple(100, 200).setVisible(true);
                new JFrameCenterSimple(-100, -200).setVisible(true);
                new JFrameCenterSimple().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JTextField jTextField1;
    // End of variables declaration                   
}

 

Espero que te sea útilCódigo Xules

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *