Cómo crear ventanas sencillas en Java

La manera más simple de implementar una ventana independiente en Java es partiendo de un objeto JFrame, que es una ventana que puede tener borde y barra de título con botones de maximizar / minimizar / cerrar.

Se proponen 3 formas distintas de implementar una ventana:

ventana_sencilla1: clase que hereda de JFrame, en ella se crea una instancia de JFrame que se configura y se muestra; todo el código va incluido dentro del método main() (único método de la clase).

ventana_sencilla2: clase que hereda de JFrame, con un método constructor de la propia clase que es el que crea y muestra la ventana, el método main() simplemente instancia un ejemplar de la clase

ventana_sencilla3: como el ejemplo anterior pero añadiendo una etiqueta y un botón que cierra el programa cuando es pulsado (imagen al principio del artículo).

ventana_sencilla1

// VENTANA SENCILLA A PARTIR DE JFRAME

import java.awt.*;
import javax.swing.*;

// CLASE PRINCIPAL DEL PROGRAMA (hereda de JFrame)
public class Ventana_sencilla extends JFrame {

  // MÉTODO DE ENTRADA AL PROGRAMA
  public static void main(String args[]) {

      // crear y configurar la ventana
      JFrame frame = new JFrame("Ventana desde JFrame");
   
     // acción por defecto al cerrar la ventana: salir del programa
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

     JPanel panel1 = new JPanel();

     /* para añadir un panel a un JFrame es preferible
     * ventana.getContentPane().add(panel1);
     * en lugar de
     * ventana.add(panel1); */
     frame.getContentPane().add(panel1);

      // mostrar la ventana
     frame.setSize(340,240); // dimensiones
     frame.setLocation(200,200); // posición
     frame.setResizable(false); // no cambia el tamaño
     frame.setVisible(true); // mostrarla
   }  

}


ventana_sencilla2

// VENTANA SENCILLA A PARTIR DE UN JFRAME

import java.awt.*;
import javax.swing.*;

// CLASE PRINCIPAL DEL PROGRAMA (hereda de JFrame)
public class Ventana_sencilla extends JFrame {

  // variables a nivel de clase
  private JPanel panel1;

  // MÉTODO DE ENTRADA AL PROGRAMA
  public static void main(String args[]) {
   // instancia de la clase principal
   new Ventana_sencilla();
   }  

// MÉTODO CONSTRUCTOR QUE CREA Y MUESTRA LA INTERFAZ
// Ventana_sencilla hereda las características de JFrame
 public Ventana_sencilla() {

   /* la variable especial this se usa en métodos de instancia
   * para hacer referencia al objeto que contiene al método,
   * aquí equivale a JFrame */

   // acción por defecto al cerrar la ventana: salir del programa
   this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

   // la ventana
   this.setTitle("Ventana desde JFrame");
   this.setSize(340, 240);
   this.setLocation(200,200);
   this.setResizable(false);
   this.setVisible(true);

   }

}


ventana_sencilla3

// VENTANA SENCILLA A PARTIR DE UN JFRAME

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

// CLASE PRINCIPAL DEL PROGRAMA (hereda de JFrame)
public class Ventana_sencilla extends JFrame {

  // variables a nivel de clase
  private JPanel panel1;
  private JButton bt;
  private JLabel label;

  // MÉTODO DE ENTRADA AL PROGRAMA
  public static void main(String args[]) {
   // instancia de la clase principal
   new Ventana_sencilla();
   }  

// MÉTODO CONSTRUCTOR QUE CREA Y MUESTRA LA INTERFAZ
// Ventana_sencilla hereda las características de JFrame
 public Ventana_sencilla() {

   /* la variable especial this se usa en métodos de instancia
   * para hacer referencia al objeto que contiene al método,
   * aquí equivale a JFrame */

   // acción por defecto al cerrar la ventana: salir del programa
   this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

   /* panel contenido en la ventana, BorderLayout es uno de los tipos de disposición de los paneles
   * tiene 5 zonas: NORTH, WEST, CENTER, EAST, SOUTH */
   panel1 = new JPanel(new BorderLayout());
   // etiqueta y botón contenidos en el pane
   // etiqueta con texto alineado al centro en horizontal
   label = new JLabel("Ventana con etiqueta y botón", SwingConstants.CENTER);

   Font letra1 = new Font("Verdana", Font.PLAIN, 18);
   label.setFont(letra1);
   label.setForeground(Color.blue);

   bt = new JButton("Salir");
   Font letra2 = new Font("Verdana", Font.BOLD, 12);
   bt.setFont(letra2);
   
   /* asociar el botón con una instancia de la clase Cerrar
   * para configurar la acción al pulsar en el botón */
     bt.addActionListener (new Cerrar());

   /* colocar los componentes en los paneles;
   * para añadir un componente a un JFrame es preferible
   * ventana.getContentPane().add(panel1);
   * en lugar de
   * ventana.add(panel1); */
   this.getContentPane().add(panel1);
   panel1.add(label, BorderLayout.CENTER);
   panel1.add(bt, BorderLayout.SOUTH);

   // la ventana
   this.setTitle("Ventana desde JFrame");
   this.setSize(340,240);
   this.setLocation(200,200);
   this.setResizable(false);
   this.setVisible(true);

   }

   //CERRAR EL PROGRAMA AL PULSAR EL BOTÓN bt
   //el botón bt se asocia con una instancia de la clase Cerrar
   //en la clase Cerrar están definidos el evento y la acción que se va a realizar
  class Cerrar implements ActionListener {
   public void actionPerformed(ActionEvent evt) {
   System.exit(0); }
  }

}