Allora... questo è il codice che avevo prodotto usando le AWT:

codice:
import java.awt.*;
import java.awt.event.*;
import java.lang.*;

public class Determinante extends Frame implements ActionListener {
   private class Intestazione extends Panel {
      private class OkButton extends Button {
         public OkButton() {
            super("Ok");
         }
      } //OkButton

      private Label lblOrdine;
      public TextField txtOrdine;
      public OkButton ok;

      public Intestazione() {
         lblOrdine = new Label();
         lblOrdine.setText("Ordine: ");
         lblOrdine.setAlignment(Label.RIGHT);
         txtOrdine = new TextField();
         ok = new OkButton();
         setLayout(new GridLayout(1,3));
         add(lblOrdine);
         add(txtOrdine);
         add(ok);
      }
   } //Intestazione

  private class Matrice extends Panel {
     private int ordine;
     private TextField[] cella;
     private int[][] datimatrice;

     public Matrice(int ordine) {
        this.ordine = ordine;
        datimatrice = new int[ordine][ordine];
        cella = new TextField[ordine*ordine];
        for (int i=0; i<(ordine*ordine); i++) {
           cella[i] = new TextField();
        }
        setLayout(new GridLayout(ordine,ordine));
        for (int i=0; i<(ordine*ordine); i++) {
           add(cella[i]);
        }
    }

    public int getOrdine() {
       return ordine;
    }

    public void azzeraMatrice() {
       for (int i=0; i<(ordine*ordine); i++) {
          cella[i].setText("0");
       }
    }

    public long getDeterminante() {
       int pos=0;
       try {
          for (int i=0; i<ordine; i++) {
             for (int j=0; j<ordine; j++) {
                datimatrice[i][j] = Integer.parseInt(cella[pos].getText());
                pos++;
             }
          }
       } catch (NumberFormatException nfe) {}
       return det(datimatrice, ordine);
    }

    private long det (int [][] matricedata, int ordinedato) {
       long risultato = 0;
       int [][] nuova;
       int posiz;

       if (ordinedato == 1) {
          risultato = matricedata[0][0];
       } else {
          if (ordinedato == 2) {
             risultato = matricedata[0][0] * matricedata[1][1] - matricedata[0][1] * matricedata[1][0];
          } else {
             nuova = new int[ordinedato-1][ordinedato-1];
             for (int k=0; k<ordinedato;k++) {
                for (int i=1; i<ordinedato; i++) {
                   posiz = 0;
                   for (int j=0; j<ordinedato; j++) {
                      if (j != k) {
                         nuova[i-1][posiz] = matricedata[i][j];
                         posiz++;
                      }
                   }
                }
                if ((k % 2) == 0) {
                   risultato = risultato + matricedata[0][k] * det(nuova, (ordinedato-1));
                } else {
                   risultato = risultato - matricedata[0][k] * det(nuova, (ordinedato-1));
                }
             }
          }
       }
       return risultato;
    }
  }   // Matrice

  private class Inferiore extends Panel {
     private class CalcolaButton extends Button {
        public CalcolaButton() {
           super("Calcola");
        }
     } //CalcolaButton

     private class AzzeraButton extends Button {
        public AzzeraButton() {
           super("Azzera");
        }
     }

     public CalcolaButton calcola;
     public AzzeraButton azzera;
     private Label risultato;

     public Inferiore() {
        calcola = new CalcolaButton();
        risultato = new Label("Risultato:");
        azzera = new AzzeraButton();
        setLayout(new GridLayout(1,3));
        add(calcola);
        add(risultato);
        add(azzera);
     }

     public void setRisultato(String strRisultato) {
        risultato.setText("Risultato: " + strRisultato);
     }
  } // Inferiore

  private class QuitListener implements WindowListener {
     public void windowClosing(WindowEvent e) {
        System.exit(0);
     }
     public void windowOpened(WindowEvent e) {}
     public void windowClosed(WindowEvent e) {}
     public void windowActivated(WindowEvent e) {}
     public void windowDeactivated(WindowEvent e) {}
     public void windowIconified(WindowEvent e) {}
     public void windowDeiconified(WindowEvent e) {}
  } // QuitListener

  private Intestazione intestazione;
  private Matrice matrice;
  private Inferiore inferiore;
  private Label msg;
  private final int WIDTH = 500;
  private final int HEIGHT = 500;
  private boolean creataMatrice = false;

  public Determinante() {
     intestazione = new Intestazione();
     intestazione.ok.addActionListener(this);
     setLayout(new BorderLayout());
     add(BorderLayout.NORTH, intestazione);
     inferiore = new Inferiore();
     inferiore.calcola.addActionListener(this);
     inferiore.azzera.addActionListener(this);
     add(BorderLayout.SOUTH, inferiore);
     addWindowListener( new QuitListener() );
     msg = new Label();
     add(BorderLayout.WEST, msg);
     matrice = new Matrice(5);
     setTitle("Determinante");
     setSize(WIDTH, HEIGHT);
     setVisible(true);
  }

  public void actionPerformed(ActionEvent e) {
     if (e.getSource() == intestazione.ok) {
        if (creataMatrice) {
           remove(matrice);
           this.setVisible(true);
        }
        int matOrdine;
        try {
           matOrdine = Integer.parseInt(intestazione.txtOrdine.getText());
           matrice = new Matrice(matOrdine);
           add(BorderLayout.CENTER, matrice);
           this.setVisible(true);
           creataMatrice = true;
        } catch (Exception n) {msg.setText(n.toString());}
    } else {
       if (e.getSource() == inferiore.calcola) {
          inferiore.setRisultato(String.valueOf(matrice.getDeterminante()));
       } else {
          matrice.azzeraMatrice();
       }
    }
  }
}
Per le modifiche è abbastanza semplice: quando estendi le componenti (Panel sarà JPanel, Button sarà JButton, ecc...) devi solamente modificare i punti in cui aggiungi le componenti (add() diventa getContentPane().add(), remove() diventa getContentPane().remove(), ecc). Poi se sono necessarie altre modifiche lo vedi tu, io non ho provato a portare il codice in Swing. Se hai pazienza, magari fino a domani, posso mettermi al lavoro e postartelo.

Ciò che è importante è che il metodo actionPerformed() del pulsante controlla e rimuove un'eventuale matrice già visualizzata e ne crea un'altra e la visualizza (E' importante il setVisible(true) alla fine!!!).

Ciao.