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.