Aew galera to com uma duvida com eu crio parametros para o meu TableModel:
[code]package TableModels;
import javax.swing.table.AbstractTableModel;
public class ModeloHorarioEditavel extends AbstractTableModel {
private String[] ColunasTabela = {"Nome", "Ent.1", "Sai.1", "Ent.2", "Sai.2", "Ent.3", "Sai.3", "Ent.4", "Sai.4"};
private Object[][] dados = {};
public int getColumnCount() {
return ColunasTabela.length;
}
public int getRowCount() {
return dados.length;
}
public String getColumnName(int col) {
return ColunasTabela[col];
}
public Object getValueAt(int row, int col) {
return dados[row][col];
}
public Class getColumnClass(int c) {
return getValueAt(0, c).getClass();
}
public boolean isCellEditable(int row, int col) {
//Note that the dados/cell address is constant,
//no matter where the cell appears onscreen.
if (col < 10) {
return false;
} else {
return true;
}
}
}[/code]
onde eu vou usar quero fazer igual ao DefaultTableModel quando eu uso o setModel(); me da as diferentes opçoes de parametros
no meu caso precisaria que meu modelo recebece o vetor pra popular a tabela pois ela eh dinamica muda toda hora como faço isso tentei criar um construtor mas da erro
Primeira coisa, eu aconselho você a usar um ArrayList ao invés de um Vector para carregar uma coleção no modelo.
Segunda coisa, você pode criar um método para adicionar/setar essa coleção no modelo.
Vou dar um exemplo:
// no inicio da classe
ArrayList<Pessoa> lista;
public void setLista(ArrayList<Pessoa> lista){
this.lita = lista;
}
Agora na classe onde está a tabela com o modelo:
// Colocar o modelo na sua tabela
ModeloHorarioEditavel modelo = new ModeloHorarioEditavel();
suaTabela.setModel(model);
...
// Agora setando a nova colecao
ArrayList<Pessoa> lista = ALGUMA_COISA_QUE_TRAGA_A_LISTA;
((ModeloHorarioEditavel)suaTabela.getModel()).setLista(lista);
O seu TableModel é uma classe como outra qualquer. Você pode criar o método set que quiser.
javer, faltou disparar o evento dizendo que os dados da tabela mudaram no seu set:
[code]
// no inicio da classe
List<Pessoa> lista = new ArrayList<Pessoa>();
public void setLista(List<Pessoa> lista){
this.lista = new ArrayList<Pessoa>(lista);
//Precisamos avisar a tabela que os dados mudaram e que ela precisa ser redesenhada
fireTableDataChanged();
}[/code]
Também prefira criar as variáveis de coleção com o tipo da interface, não da classe concreta (List, no caso, ao invés de ArrayList direto). Isso permite substituir facilmente o tipo de lista.
Note também que estou fazendo uma cópia do ArrayList dentro do TableModel. Caso contrário, seria uma violação grave do encapsulamento da classe do TableModel e permitira, por exemplo, que seu usuário inserisse dados na lista de maneira arbitrária, sem que o model e o JTable tomassem conhecimento. O ideal, no caso de um model, seria criar também um método:
public void add(Pessoa pessoa) {
lista.add(pessoa);
fireTableRowsAdded(lista.size(), lista.size());
}