Salve a tutti..sto realizzando, a scopo didattico, un applet che faccia vedere come funziona un algoritmo di cifratura a matrice. In pratica l'utente inserisce un testo e una chiave e clicca sul bottone cifra. A questo punto viene visualizzata una matrice con la chiave nella prima riga e il testo disposto su n righe in base alla lunghezza della chiave.
es.:
- testo: ciao mamma
- chiave: casa
- risultato:
casa
ciao
mamm
a

Il testo "cifrato" si avrà prendendo le colonne della matrice in ordine alfabatico rispetto alla chiave:
(a)om (a)ia (c)cma (s)am -> omiacmaam

Fino qui nessun problema..ora dovrei fare in modo che l'utente cliccando "cifra ancora" possa inserire nuovamente una chiave e cifrare il testo già cifrato. Quindi risulterà:
- testo: omiacmaam
- chiave: pippo
- risultato:
pippo
omiac
maam

Il codice che ho scritto è il seguente:

codice:
import java.awt.*;
import javax.swing.*;
import java.util.*;

public class Matrice extends javax.swing.JApplet implements Runnable 
{
    public JTextField TestoOriginale;
    public JTextField Chiave;
    private JLabel T1;
    private JLabel T2;
    private JLabel T3;
    private JLabel T4;
    
    private JButton CreaMatrice;
    private JButton CifraAncora;
	
    private JPanel pannelloText;
    private JPanel tabella;
    private JPanel tabella1;
   
    private JTextField[][] matrice1;
    private JTextField[] matrice2;

public void disegnapannelli() 
    {
        tabella = new JPanel();
        tabella1 = new JPanel();
        pannelloText = new JPanel();
        
        getContentPane().setLayout(new GridLayout(3,0));
        
        pannelloText.setLayout(new GridLayout(7,0));
        pannelloText.add(T1);
        pannelloText.add(TestoOriginale);
        pannelloText.add(T2);
        pannelloText.add(Chiave);
        pannelloText.add(CreaMatrice);
        pannelloText.add(CifraAncora);
        
        getContentPane().add(pannelloText);
    }
    
public void init() 
    {
        TestoOriginale = new JTextField();
        Chiave = new JTextField();

        T1 = new javax.swing.JLabel();
        T1.setText(" Inserire il testo da cifrare:");
        T2 = new javax.swing.JLabel();
        T2.setText(" Inserisci la chiave:");
        T3 = new javax.swing.JLabel();
        T3.setText(" Testo cifrato:");
        T4 = new javax.swing.JLabel();
        T4.setText(" Matrice associata: ");

        CreaMatrice = new JButton();
        CreaMatrice.setText("Cifra");
        CreaMatrice.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                creaMatr(evt);
            }
        });
		
        CifraAncora = new JButton();
        CifraAncora.setText("Cifra ancora");
        CifraAncora.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cifnew(evt);
            }
        });
        
    disegnapannelli();
    }

    public void run()
    {
        String Testo = TestoOriginale.getText();
        String TestoOriginale1 = Testo.replace(" ", "");
        
        int x = Chiave.getText().length();         
        int y = TestoOriginale1.length();
        int y1 = Testo.length();
        
        int Nchar = 0;
        int ind =0;
        
        String totale = Chiave.getText() + TestoOriginale1;
        int k = x + y;
        int h = x + y1;
        
        int righe = 0;
        
        for (int NumeroRighe = 0 ; NumeroRighe < y ; NumeroRighe++)
        {
            int controllo = NumeroRighe * x;
            if (controllo >= y)
            {
                righe = NumeroRighe+1;
                break;
            }
        }
        
        matrice1 = new JTextField[righe][x];
        matrice2 = new JTextField[righe*x];
        tabella1.add(T3);

for (int i = 0; i < righe; i++)
        {
            for (int j = 0; j < x; j++)
            {
                if (Nchar < k)
                {
                matrice1[i][j] = new JTextField();
                matrice1[i][j].setText (Character.toString(totale.charAt(Nchar)));
                matrice1[i][j].setEditable(false);
                matrice1[i][j].setHorizontalAlignment(javax.swing.JTextField.CENTER);
                
                Nchar++;
                
                if(i == 0)
                    matrice1[i][j].setBackground(Color.GREEN);
                }
                else 
                {
                matrice1[i][j] = new JTextField();
                matrice1[i][j].setText ("");
                matrice1[i][j].setEditable(false);
                matrice1[i][j].setHorizontalAlignment(javax.swing.JTextField.CENTER);
                
                Nchar++;
                
                if(i == 0)
                    matrice1[i][j].setBackground(Color.GREEN);
                }
                
                tabella.setLayout(new GridLayout(righe,x));
                tabella.add(matrice1[i][j]);
            }
        }

        String s = Chiave.getText();
        char[] text = new char[s.length()];
        text = s.toCharArray();
        Arrays.sort(text);

        pannelloText.add(T4);

for (int i = 0; i < x; i++)
        {
            String c1 = Character.toString(text[i]); 
            
            for (int n = 0; n < x; n ++) 
            {
                String c2 = matrice1[0][n].getText();
                    if(c1.equals(c2))
                    {
                        for (int p = 1; p < righe; p++)
                        {
                        	if (!(matrice1[p][n].getText().equals("")))
                        	{
                            matrice2[ind] = new JTextField();
                            matrice2[ind].setText(matrice1[p][n].getText());
                            matrice2[ind].setEditable(false);
                            tabella1.add(matrice2[ind]);
							}
                            ind ++;
                        }
                    }
            }
        }
        	getContentPane().add(tabella);
        	getContentPane().add(tabella1);
             setSize(500,501);
    }

    public void creaMatr(java.awt.event.ActionEvent evt)
    {
        Thread t = new Thread(this);
        t.start();
    }
    
    public void cifnew(java.awt.event.ActionEvent evt)
    {

    }
}
In pratica non riesco a "cifrare" il testo già "cifrato"..qualcuno sa come aiutarmi???
Grazie mille