Olá!
Estou fazendo um projeto para a faculdade que inclui uma tabela simples, só para ficar organizado visualmente. A ideia é a seguinte: ao clicar no botão, passar os conteúdos dos jTextFields de um pequeno formulário, para uma jTable, tudo na mesma tela. Até aí, ele funciona normalmente. O problema é quando preciso adicionar outra linha na tabela, com novos dados dos jTextFields, ele não adiciona uma nova linha na tabela, em vez disso, ele atualiza a linha que já está lá.
Meu código está assim:
Um método que cria a tabela
public final DefaultTableModel criatabela(){
jtbProcessos.setModel(new javax.swing.table.DefaultTableModel(
new Object[][]{},
new String[]{"PID", "Chegada", "Duracao", "I/O", "Operação I/O"}) {
});
javax.swing.table.DefaultTableModel dtm = (javax.swing.table.DefaultTableModel)
jtbProcessos.getModel();
return dtm;
}
Antes de adicionar uma nova linha, você deve verificar se na sua jTable já existe alguma linha inserida, caso tenha alguma linha inserida, você deve pegar o total de linhas existentes naquele momento na jTable e incrementar o valor em +1.
Logo se você tem a linha 1 já inclusa, somando +1 ele adicionará a segunda linha, e assim sucessivamente!
int totalLinhas = dtm.getRowCount();
dtm.setNumRows(totalLinhas + 1);
dtm.setValueAt(txtPid.getText(), totalLinhas, 0);//ordem dos valores, (valor da coluna, n° da linha atual, coluna da tabela)
dtm.setValueAt(txtChegada.getText(), totalLinhas, 1);
dtm.setValueAt(txtDuracao.getText(), totalLinhas, 3);
O problema é que você esta chamando o metodo criatabela ao inserir um novo registro, que por consequência cria um novo defaultTableModel sempre que é chamado com o código abaixo:
jtbProcessos.setModel(new javax.swing.table.DefaultTableModel(
new Object[][]{},
new String[]{"PID", "Chegada", "Duracao", "I/O", "Operação I/O"}) {
});
Para resolver esse problema, você pode deixar esse somente para criação da table, dessa forma:
public final void criatabela(){
jtbProcessos.setModel(new javax.swing.table.DefaultTableModel(
new Object[][]{},
new String[]{"PID", "Chegada", "Duracao", "I/O", "Operação I/O"}) {
});
}
E criar outro somente para atualização com o novo registro: