Boa noite pessoal,
Estou criando um AbstractTableModel para preencher uma JTable, e preciso pegar alterações na tabela através do método dataChanged, mas não estou conseguindo, simplesmente não da certo. Segue o código abaixo:
package teste.table.model.listener;
public class Funcionario {
private int id;
private String nome;
private int idade;
private double salario;
public Funcionario(int id, String nome, int idade, double salario) {
this.id = id;
this.nome = nome;
this.idade = idade;
this.salario = salario;
}
public Funcionario() {
this.nome = null;
this.idade = 0;
this.salario = 0.0;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getIdade() {
return idade;
}
public void setIdade(int idade) {
this.idade = idade;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public double getSalario() {
return salario;
}
public void setSalario(double salario) {
this.salario = salario;
}
}
package teste.table.model.listener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.event.TableModelListener;
import javax.swing.table.AbstractTableModel;
public class FuncionarioTableModel extends AbstractTableModel {
//constantes referentes as colunas da tabela
private final int COL_ID = 0;
private final int COL_NOME = 1;
private final int COL_IDADE = 2;
private final int COL_SALARIO = 3;
private List<Funcionario> funcionarios = new ArrayList<Funcionario>();
Funcionario f1 = new Funcionario(1, "Teste", 22, 3855);
public FuncionarioTableModel() {
funcionarios.add(f1);
}
@Override
public int getColumnCount() {
return 4;
}
@Override
public String getColumnName(int col) {
switch (col) {
case 0:
return "ID";
case 1:
return "Nome";
case 2:
return "Idade";
case 3:
return "Salario";
default:
return null;
}
}
@Override
public int getRowCount() {
return funcionarios != null
? funcionarios.size()
: 0;
}
@Override
public Object getValueAt(int lin, int col) {
if (funcionarios != null && lin >= 0 && lin < funcionarios.size()) {
Funcionario f = funcionarios.get(lin);
switch (col) {
case 0:
return f.getId();
case 1:
return f.getNome();
case 2:
return f.getIdade();
case 3:
return f.getSalario();
}
}
return null;
}
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
if (columnIndex == COL_NOME) {
funcionarios.get(rowIndex).setNome((String) aValue);
} else if (columnIndex == COL_IDADE) {
funcionarios.get(rowIndex).setIdade(Integer.parseInt(String.valueOf(aValue)));
}
if (columnIndex == COL_SALARIO) {
funcionarios.get(rowIndex).setSalario(Double.parseDouble(String.valueOf(aValue)));
}
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
if (columnIndex != 0) {
return true;
} else {
return false;
}
}
}
package teste.table.model.listener;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
public class Teste implements TableModelListener{
FuncionarioTableModel modelo = new FuncionarioTableModel();
JFrame janela = new JFrame();
JPanel painel = new JPanel();
JTable tabela = new JTable();
public void initComponents(){
tabela.setModel(modelo);
painel.add(tabela);
janela.add(painel);
tabela.getModel().addTableModelListener(this);
janela.setSize(300, 100);
janela.setVisible(true);
}
public Teste() {
this.initComponents();
}
public static void main(String[] args) {
Teste t = new Teste();
}
@Override
public void tableChanged(TableModelEvent e) {
System.out.println("funcionando");
}
}
Queria pegar algumas informações sobre as alterações feitas nos dados da tabela (preciso disso sem o setValueat da classe modelo).
Quem puder dar uma luz, fico grato.
Abração.