Problemas com ArrayList é Jtable

4 respostas
java
H

eu queria preencher a tabela com minha lista e logo em seguida quando clicar em ok jogar tudo que estiver na Jtable no banco de dados

minha lista está declarada como global

List<String> list = new ArrayList<>();
botão add

        nome = JTNome.getText();
        idade = Integer.parseInt(JTIdade.getText());
        list.add(nome);
        list.add(String.valueOf(idade));
        Collections.sort(list);
        table();

metódo para preencher a tabela

public void table(){
        DefaultTableModel modelo = new DefaultTableModel();
        modelo.addColumn("nome");
        modelo.addColumn("idade");
        if(list.isEmpty()){
            JOptionPane.showMessageDialog(rootPane, "Erro :(");
            modelo.addRow(new String[] {"sem infos", "sem infos"});
        }else{
            for (int i = 0; i < list.size(); i++) {
                modelo.addRow(new String[] {String.valueOf(i), list.get(i)});
            }
        }
        jtbl.setModel(modelo);
    }

se alguem poder me ajudar agradeço!

4 Respostas

D

Insira um repaint após o setModel

jtbl.setModel(modelo);
jtbl.repaint();
H

Infelizmente não resolveu olha como fica listando de 2 em 2 na tabela
ali em

modelo.addRow(new String[] {String.valueOf(i), list.get(i)});

troquei por

modelo.addRow(new String[] {(nome), String.valueOf(idade)});

veja só

Toda vez que adciono algo ele adciona 2 de uma vez com os mesmos valores e depois disso como eu salvaria o que está listado na jtable dentro do banco de dados?

D

Na lista vc está misturando nome e idade, por isso está duplicando

Então na lista, primeiro é o nome e o segundo é a idade, então no loop:

for (int i = 0; i < list.size(); /* nada */) {
    String[] linha = new String[2];
    // primeiro obtem o nome
    linha[0] = list.get(i);
    i += 1;
    // depois a idade
    linha[1] = list.get(i);
    i += 1;
    modelo.addRow(linha);
}

Para pegar os valores é parecido, não precisa pegar na JTable se os dados estão na lista

for (int i = 0; i < list.size(); /* nada */) {
    // primeiro obtem o nome
    String nome = list.get(i);
    i += 1;
    // depois a idade
    int idade = Integer.parseInt(list.get(i));
    i += 1;
    salvarNoBanco(nome, idade);
}

entretanto se os valores da tabela mudam então

modelo = (DefaultTableModel) jtbl.getModel();
for (int i = 0; i < modelo.getRowCount(); i++) {
    // primeiro obtem o nome
    String nome = modelo.getValueAt(i,0).toString();
    // depois a idade
    int idade = Integer.parseInt(modelo.getValueAt(i,1).toString());
    salvarNoBanco(nome, idade);
}
H

Muito Obrigado mesmo amigo isso me ajudou muito

Criado 6 de novembro de 2016
Ultima resposta 11 de nov. de 2016
Respostas 4
Participantes 2