[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