Botones de java - Urgente!

Hola.
Como lo dice el titulo, tengo un problema. Necesito agregarle al siguiente programa otros botones que guarden/salven, borren, muestren catalogo y cancele el trabajo. Por lo pronto sólo he agregado uno que no tiene ninguna acción, como se puede ver sólo contiene la leyenda "enviar". Soy bastante inexperto en este lenguaje, y de verdad necesito ayuda. Se los agradecería mucho

public class Alumnos extends javax.swing.JFrame{
 javax.swing.JLabel etiqueta;
 javax.swing.JLabel etiqueta2;
 javax.swing.JLabel etiqueta3;
 javax.swing.JLabel etiqueta4;
 javax.swing.JLabel etiqueta5;
 javax.swing.JLabel etiqueta6;
 javax.swing.JLabel etiqueta7;
 javax.swing.JTextField cajaTexto;
 javax.swing.JTextField cajaTexto2;
 javax.swing.JTextField cajaTexto3;
 javax.swing.JTextField cajaTexto4;
 javax.swing.JTextField cajaTexto5;
 javax.swing.JTextField cajaTexto6;
 javax.swing.JTextField cajaTexto7;
 javax.swing.JButton boton;
 
 public Alumnos(){
  setSize(1024,5709);
  setTitle("Control de alumnos");
  iniciaComponentes();
 }
void iniciaComponentes(){
 etiqueta=new javax.swing.JLabel();
 etiqueta2=new javax.swing.JLabel();
 etiqueta3=new javax.swing.JLabel();
 etiqueta4=new javax.swing.JLabel();
 etiqueta5=new javax.swing.JLabel();
 etiqueta6=new javax.swing.JLabel();
 etiqueta7=new javax.swing.JLabel();
 cajaTexto=new javax.swing.JTextField();
 cajaTexto2=new javax.swing.JTextField();
 cajaTexto3=new javax.swing.JTextField();
 cajaTexto4=new javax.swing.JTextField();
 cajaTexto5=new javax.swing.JTextField();
 cajaTexto6=new javax.swing.JTextField();
 cajaTexto7=new javax.swing.JTextField();
 boton=new javax.swing.JButton();
 
 getContentPane().setLayout(null);
 
 etiqueta.setText("Matricula");
 getContentPane().add(etiqueta);
 etiqueta.setBounds(20, 20, 100, 25);
 
 etiqueta2.setText("Clave Materia");
 getContentPane().add(etiqueta2);
 etiqueta2.setBounds(20, 70, 100, 25);
 
 etiqueta3.setText("Calificación 1");
 getContentPane().add(etiqueta3);
 etiqueta3.setBounds(20, 120, 100, 25);
 
 etiqueta4.setText("Calificación 2");
 getContentPane().add(etiqueta4);
 etiqueta4.setBounds(20, 170, 100, 25);
 
 etiqueta5.setText("Calificación 3");
 getContentPane().add(etiqueta5);
 etiqueta5.setBounds(20, 220, 100, 25);
 
 etiqueta6.setText("Calificación Extra");
 getContentPane().add(etiqueta6);
 etiqueta6.setBounds(20, 270, 100, 25);
 
 etiqueta7.setText("Status");
 getContentPane().add(etiqueta7);
 etiqueta7.setBounds(20, 320, 100, 25);
 
 cajaTexto.setText("");
 getContentPane().add(cajaTexto);
 cajaTexto.setBounds(200, 20, 200, 25);
 
 cajaTexto2.setText("");
 getContentPane().add(cajaTexto2);
 cajaTexto2.setBounds(200, 70, 200, 25);
 
 cajaTexto3.setText("");
 getContentPane().add(cajaTexto3);
 cajaTexto3.setBounds(200, 120, 200, 25);
 
 cajaTexto4.setText("");
 getContentPane().add(cajaTexto4);
 cajaTexto4.setBounds(200, 170, 200, 25);
 
 cajaTexto5.setText("");
 getContentPane().add(cajaTexto5);
 cajaTexto5.setBounds(200, 220, 200, 25);
 
 cajaTexto6.setText("");
 getContentPane().add(cajaTexto6);
 cajaTexto6.setBounds(200, 270, 200, 25);
 
 cajaTexto7.setText("");
 getContentPane().add(cajaTexto7);
 cajaTexto7.setBounds(200, 320, 200, 25);
 
 boton.setText("Enviar");
 getContentPane().add(boton);
 boton.setBounds(75, 400, 105, 35);
 
 addWindowListener(new java.awt.event.WindowAdapter(){
  public void WindowClosing(java.awt.event.WindowEvent evt){
   System.exit(0);
}});
}
        public static void main(String[] arg){
         new Alumnos().setVisible(true);
   }
}

Hasta aquí, el programa funciona de maravilla. Muestra la ventana con el único botón bien alineado, según yo. Pero de verdad urgen los demás. Gracias de antemano

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.

Necesitas agregar un

Necesitas agregar un actionlistener al boton ( similar al que tienes con el windowListener

Por ejemplo el siguiente programa reacciona cuando oprimes el botón:

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

class Ejemplo {
    public static void main( String ... args ) {
         
         ActionListener queVaaHacer = new UnActionListener();
         JButton button = new JButton("Da click!");
         button.addActionListener(  queVaaHacer );
         JFrame frame = new JFrame();
         frame.add( button );
         frame.pack();
         frame.setLocationRelativeTo( null );
         frame.setVisible( true );
    }

}
class UnActionListener implements ActionListener {
    public void actionPerformed( ActionEvent e ) {
          System.out.println( " 2 + 2 son " +  ( 2 + 2 )  );
    }
}

Lo que haga el programa dentro del actionPerformed depende de la logica de tu programa.

Este es el resultado del ejemplo que puse:

Imagen de neko069

Otra alternativa...

Puedes implementar en tu clase la interface ActionListener y en los botones agregarles la acción, así con una referencia a this te preocupas de las acciones de cada botón hasta que implementas el método actionPerformed( ActionEvent ae){}

public class LaClase implements ActionListener{

    private JButton laAccion = new JButton("La Accion");
... //mas codigo
    laAccion.addActionListener( this);
}

y la acción dentro del actionPerformed( ActionEvent ae){} la desglosas con ciclos if

@Override
actionPerformed( ActionEvent ae){
    if( ae.getSource() == laAccion){
        //aquí puedes redigir a otro metodo o hacer lo que quieras
    }
    else if( ae.getSource() == otroBoton ){
      ....//más codigo
}
Imagen de ezamudio

actionCommand

Y otra opción es usar la propiedad actionCommand, que es una simple cadena, pero con eso puedes saber qué hacer, sin importar la clase del objeto que envía el evento, o aunque no tengas referencia a él (cosa que es común):

//En una clase
private JButton boton = new JButton("Aprietame");
boton.setActionCommand("salvar");

...
//En otra clase
private JButton boton = new JButton("Otro distinto");
boton.setActionCommand("eliminar");

private JTextField tf = new JTextField(20);
tf.setActionCommand("buscar");

Suponte que a esos dos botones les pones el mismo ActionListener. En tu ActionListener haces algo tipo

actionPerformed(ActionEvent ev) {
  if ("salvar".equals(ev.getActionCommand()) {
    //salvar algo, sin importar quién haya enviado la acción
  } else if ("eliminar".equals(ev.getActionCommand()) {
    //eliminar algo, habrá que buscar el contexto de alguna forma
  } else if ("buscar".equals(ev.getActionCommand()) {
    //Buscar el texto del objeto que envió el evento
  }
}

De este modo, el ActionListener puede no saber de la existencia de los botones y textfields que le van a enviar esas acciones. En todo caso puedes hacer cast por ejemplo en la condición de buscar, a que el origen del evento sea un JTextField, pero no importa cuál haya sido. Esto hace que tu ActionListener sea más reutilizable.