Atualizar um JFrame em execução

2 respostas
CristianPalmaSola10
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(":"));
        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();
                    }
                }
            }
        });
    }
}

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

2 Respostas

ViniGodoy

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

CristianPalmaSola10

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

Criado 10 de setembro de 2011
Ultima resposta 11 de set. de 2011
Respostas 2
Participantes 2