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

}