Atualizar um JFrame em execução

[code]
public class CadeiaMarkov implements ActionListener {

private JFrame frame;
private ArrayList<JTextField> matrizTransicao;
private ArrayList<ArrayList><JTextField>> matrizResultado;
private ArrayList<JTextField> vetEstado;
private int colunas;
private int linhas;
private int resultado = 5;
private JTextField colunasTxf;
private JTextField linhasTxf;
private JTextField resultadoTxf;
private JButton atualizarBtn;
private JButton calcularBtn;
private JPanel panelCentro;

public CadeiaMarkov() {
    frame = new JFrame("Cristian 6915 Marcelo 7011");
    JFrame.setDefaultLookAndFeelDecorated(true);
    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frame.setSize(400, 500);
    frame.setVisible(true);
    frame.setLocationRelativeTo(frame);
    addNorte();
    addCentro();
    addSul();
    addLeste();
    addEventos();
}

public static void main(String[] args) {
    new CadeiaMarkov();
}

private void addNorte() {
    JPanel panelNorte = new JPanel(new FlowLayout());
    panelNorte.add(new JLabel("Matriz Transicao.:"));
    colunasTxf = new JTextField("3", 2);
    linhasTxf = new JTextField("3", 2);
    atualizarBtn = new JButton("Atualizar");
    panelNorte.add(linhasTxf);
    panelNorte.add(new JLabel("X"));
    panelNorte.add(colunasTxf);
    panelNorte.add(atualizarBtn);
    colunas = Integer.parseInt(colunasTxf.getText());
    linhas = Integer.parseInt(linhasTxf.getText());
    frame.getContentPane().add(BorderLayout.NORTH, panelNorte);
}

private void addCentro() {
    matrizTransicao = new ArrayList<JTextField>();
    panelCentro = new JPanel(new GridLayout(linhas, colunas, 5, 5));
    for (int i = 0; i < linhas; i++) {
        for (int j = 0; j < colunas; j++) {
            JTextField text = new JTextField(2);
            matrizTransicao.add(text);
            panelCentro.add(text);
        }
    }
    frame.getContentPane().add(BorderLayout.CENTER, panelCentro);
}

private void addSul() {
    matrizResultado = new ArrayList<ArrayList><JTextField>>();
    linhas = Integer.parseInt(linhasTxf.getText());
    colunas = Integer.parseInt(colunasTxf.getText());
    JPanel panelSul = new JPanel(new GridLayout(linhas + 1, colunas + 1, 5, 5));
    for (int i = 0; i <= linhas; i++) {
        if (i != 0) {
            matrizResultado.add(new ArrayList<JTextField>());
        }
        for (int j = 0; j <= resultado; j++) {
            if (i == 0) {
                if (j == 0) {
                    panelSul.add(new JLabel(""));
                } else {
                    panelSul.add(new JLabel("          " + j));
                }
            } else {
                if (j == 0) {
                    panelSul.add(new JLabel("             X" + i));
                } else {
                    JTextField text = new JTextField(2);
                    text.setEnabled(false);
                    matrizResultado.get(i - 1).add(text);
                    panelSul.add(text);
                }
            }
        }
    }
    frame.getContentPane().add(BorderLayout.SOUTH, panelSul);
}

private void addLeste() {
    vetEstado = new ArrayList<JTextField>();
    JPanel panelLeste = new JPanel();
    panelLeste.setLayout(new BoxLayout(panelLeste, BoxLayout.Y_AXIS));
    JPanel subPainel2 = new JPanel();
    subPainel2.setLayout(new BoxLayout(subPainel2, BoxLayout.Y_AXIS));
    JPanel subPainel3 = new JPanel();
    subPainel3.setLayout(new BoxLayout(subPainel3, BoxLayout.Y_AXIS));
    subPainel3.add(new JLabel("Vetor Estado:"));
    panelLeste.add(subPainel3);
    panelLeste.add(subPainel2);
    subPainel3.add(new JLabel("    " + linhas + "  X  1"));
    for (int i = 0; i < linhas; i++) {
        JTextField text = new JTextField(2);
        vetEstado.add(text);
        subPainel2.add(text);
    }
    JPanel subPainel = new JPanel();
    panelLeste.add(subPainel);
    subPainel.add(new JLabel("Nº:"));
    resultadoTxf = new JTextField(resultado + "", 2);
    subPainel.add(resultadoTxf);
    calcularBtn = new JButton("=");
    subPainel.add(calcularBtn);
    frame.getContentPane().add(BorderLayout.EAST, panelLeste);
}

@Override
public void actionPerformed(ActionEvent e) {
    throw new UnsupportedOperationException("Not supported yet.");
}

private boolean validaVetorEstado() {
    boolean certo = true;
    for (int i = 0; i < vetEstado.size(); i++) {
        if (!(vetEstado.get(i).getText().equalsIgnoreCase("0") || vetEstado.get(i).getText().equalsIgnoreCase("1"))) {
            JOptionPane.showMessageDialog(frame, "Vetor Estado informado incorretamente!");
            certo = false;
            break;
        }
    }
    return certo;
}

private boolean validacao() {
    boolean certo = true;
    for (int i = 0; i < (matrizTransicao.size() / colunas); i++) {
        BigDecimal soma = new BigDecimal("0");
        int aux = i;
        int rep = 0;
        do {
            soma = soma.add(new BigDecimal(matrizTransicao.get(aux).getText()));
            aux += colunas;
            rep++;
        } while (rep < (matrizTransicao.size() / linhas));
        if (!soma.equals(new BigDecimal("1.0"))) {
            certo = false;
            JOptionPane.showMessageDialog(frame, "Usuario por favor informe os numeros com o padrão 0.x\n"
                    + "Lembre a soma dos elementos de mesma linha informados deve ser 1!");
            break;
        }
    }
    return certo;
}

private void alterarCentro() {
    panelCentro.removeAll();
    matrizTransicao = new ArrayList<JTextField>();
    colunas = Integer.parseInt(colunasTxf.getText());
    linhas = Integer.parseInt(linhasTxf.getText());
    panelCentro = new JPanel(new GridLayout(linhas, colunas, 5, 5));
    for (int i = 0; i < linhas; i++) {
        for (int j = 0; j < colunas; j++) {
            JTextField text = new JTextField(2);
            matrizTransicao.add(text);
            panelCentro.add(text);
        }
    }
    frame.getContentPane().add(BorderLayout.CENTER, panelCentro);
    panelCentro.repaint();
}

private void calculaMatrizResultado() {
    NumberFormat nf = NumberFormat.getNumberInstance();
    nf.setMaximumFractionDigits(3);
    nf.setMinimumFractionDigits(1);
    ArrayList<BigDecimal> litsa = new ArrayList<BigDecimal>();
    for (int i = 0; i < vetEstado.size(); i++) {
        litsa.add(new BigDecimal(vetEstado.get(i).getText()));
        matrizResultado.get(i).get(0).setText(litsa.get(i) + "");
    }
    int l = 1;
    resultado--;
    for (int i = 0; i < resultado; i++) {
        ArrayList<BigDecimal> vetAux = new ArrayList<BigDecimal>();
        int auxG = 0;
        int aux = 0;
        int rep = 0;
        do {
            BigDecimal soma = new BigDecimal("0");
            rep = 0;
            do {
                soma = soma.add(new BigDecimal(matrizTransicao.get(auxG).getText()).multiply(litsa.get(rep)));
                rep++;
                auxG++;
            } while (rep < vetEstado.size());
            vetAux.add(soma);
            aux++;
        } while (aux < (matrizTransicao.size() / linhas));
        aux = 0;
        litsa.clear();
        do {
            matrizResultado.get(aux).get(l).setText(nf.format(vetAux.get(aux)) + "");
            litsa.add(vetAux.get(aux));
            aux++;
        } while (aux < matrizResultado.size());
        l++;
    }
}

private void addEventos() {
    atualizarBtn.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {

// addCentro();
// alterarSul
alterarCentro();
}

        private void alterarSul() {
            if (Integer.parseInt(resultadoTxf.getText()) != resultado) {
                resultado = Integer.parseInt(resultadoTxf.getText());

            }
        }
    });

    calcularBtn.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            if (validacao()) {
                if (validaVetorEstado()) {
                    calculaMatrizResultado();
                }
            }
        }
    });
}

}[/code]

esse é um programa para calculo de matriz
o usuario pode escolher o numero de colunas e linhas da matriz que é apresentada na tela
e quando isso é feito eu tenho q atualizar a tela entaum criei o metodo altararCentro()
mas naum esta funcionando se alguem poder me dar uma luz fico muito agradecido Obrigado

Por que não usa um JTable?
http://www.guj.com.br/java/57203-jtable#300612

No cmoeço eu quiz usar jTable mas naum tinha conseguido descobrir como fazer para a jTable guardar o valor digitado na celula, agora estou encima do prazo de entrega e naum possuo tempo para reprogramar a tela, ate pq nem sei como pegaria os valores q estao na celulas e teria q mudar toda a logica de calculo, e ja estou sem tempo e gostaria de ajuda para conseguir fazer a tela ser atualizada conforme o usuario muda os parametro de tamanho da minha tabela de JTextField
Obrigado pela ajuda