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 muy sencillas de implementar una ventana:

Ventana1: 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).

Ventana2: 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

Ventana3: 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).

Ventana1

// VENTANA SENCILLA A PARTIR DE JFRAME

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

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

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

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

		JPanel panel1 = new JPanel();

		/* para agregar 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); // posicion
		frame.setResizable(false); // no cambia dimensiones
        frame.setVisible(true); // mostrarla
	}  

}


Ventana2

// VENTANA SENCILLA A PARTIR DE UN JFRAME

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

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

  // variables a nivel de clase
  private JPanel panel1;

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

// METODO CONSTRUCTOR QUE CREA Y MUESTRA LA INTERFAZ
// Ventana2 hereda las caracteristicas de JFrame
 public Ventana2() {

	/* la variable especial this se usa en metodos de instancia
	* para hacer referencia al objeto que contiene al metodo,
	* aqui equivale a JFrame */

	// accion 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);

	}

}


Ventana3

// 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 Ventana3 extends JFrame {

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

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

// METODO CONSTRUCTOR QUE CREA Y MUESTRA LA INTERFAZ
// Ventana3 hereda las caracteristicas de JFrame
 public Ventana3() {

	/* la variable especial this se usa en metodos de instancia
	* para hacer referencia al objeto que contiene al metodo,
	* aqui equivale a JFrame */

	// accion 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 disposicion 
		* de los paneles, tiene 5 zonas: NORTH, WEST, CENTER, EAST, SOUTH */
	panel1 = new JPanel(new BorderLayout());
	// etiqueta y boton contenidos en el panel
	// etiqueta con texto alineado al centro en horizontal
	label = new JLabel("Ventana con etiqueta y bot\u00f3n", 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 boton con una instancia de la clase Cerrar
	* para configurar la accion al pulsar en el boton */
   	bt.addActionListener (new Cerrar());

	/* colocar los componentes en los paneles;
	* para agregar 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 BOTON bt
    //el boton bt se asocia con una instancia de la clase Cerrar
    //en la clase Cerrar estan definidos el evento y la accion que se va a realizar
  class Cerrar implements ActionListener {
    public void actionPerformed(ActionEvent evt) {
      System.exit(0); }
  }

}