O codigo abaixo eh para fazer com que a edicao da coluna 3 em uma jtable seja atraves de um combobox…mas toda vez que tento editar a celula dah erro…
Alguem pode me ajudar?
[quote=“danieldestro”]Talvez o erro esteja aí, não sei…
vc nao deveria retornar o List?[/quote]
Nao, porque ele trabalha com o valor selecionado. A combo serve nesse caso pra deixar o cara amarrado a escolher somente um valor da lista pra colocar na celula.
public class TMTelefone extends AbstractTableModel{
private ArrayList linhas = null;
private String [] colunas;
private boolean [] colsEdicao;
/**
* Contrutor para a classe, recebendo os dados a serem exibidos
* e as colunas que devem ser criadas.
* @param dados
* @param colunas
*/
public TMTelefone(ArrayList dados, String[] colunas, boolean [] edicao){
setLinhas(dados);
setColunas(colunas);
colsEdicao = edicao;
}
/**
* Retorna o numero de colunas no modelo
* @see javax.swing.table.TableModel#getColumnCount()
*/
public int getColumnCount() {return getColunas().length;}
/**
* Retorna o numero de linhas existentes no modelo
* @see javax.swing.table.TableModel#getRowCount()
*/
public int getRowCount() {return getLinhas().size();}
/**
* Obtem o valor na linha e coluna
* @see javax.swing.table.TableModel#getValueAt(int, int)
*/
public Object getValueAt(int rowIndex, int columnIndex) {
// Obtem a linha, que é uma String []
String [] linha = (String [])getLinhas().get(rowIndex);
// Retorna o objeto que esta na coluna
return linha[columnIndex];
}
public String[] getColunas() {return colunas;}
public ArrayList getLinhas() {return linhas;}
public void setColunas(String[] strings) {colunas = strings;}
public void setLinhas(ArrayList list) {linhas = list;}
/**
* Seta o valor na linha e coluna
* @see javax.swing.table.TableModel#setValueAt(java.lang.Object, int, int)
*/
public void setValueAt(Object value, int row, int col){
// Obtem a linha, que é uma String []
String [] linha = (String [])getLinhas().get(row);
// Altera o conteudo no indice da coluna passado
linha[col] = (String)value;
// dispara o evento de celula alterada
fireTableCellUpdated(row,col);
}
/**
* Retorna se a celula pode ser editada
* @see javax.swing.table.TableModel#isCellEditable(int, int)
*/
public boolean isCellEditable(int row, int col){
return colsEdicao[col];
}
/**
* Adiciona o array na linha
*/
public void addRow( String [] dadosLinha){
getLinhas().add(dadosLinha);
// Informa a jtable de que houve linhas incluidas no modelo
// COmo adicionamos no final, pegamos o tamanho total do modelo
// menos 1 para obter a linha incluida.
int linha = getLinhas().size()-1;
fireTableRowsInserted(linha,linha);
return;
}
/**
* Remove a linha pelo indice informado
* @param row
*/
public void removeRow(int row){
getLinhas().remove(row);
// informa a jtable que houve dados deletados passando a
// linha removida
fireTableRowsDeleted(row,row);
}
/**
* Remove a linha pelo valor da coluna informada
* @param val
* @param col
* @return
*/
public boolean removeRow(String val, int col){
// obtem o iterator
Iterator i = getLinhas().iterator();
int linha = 0;
// Faz um looping em cima das linhas
while(i.hasNext()){
// Obtem as colunas da linha atual
String[] linhaCorrente = (String[])i.next();
linha++;
// compara o conteudo String da linha atual na coluna desejada
// com o valor informado
if( linhaCorrente[col].equals(val) ){
getLinhas().remove(linha);
// informa a jtable que houve dados deletados passando a
// linha removida
fireTableRowsDeleted(linha,linha);
return true;
}
}
// Nao encontrou nada
return false;
}
/**
* Retorna o nome da coluna.
* @see javax.swing.table.TableModel#getColumnName(int)
*/
public String getColumnName(int col){
return getColunas()[col];
}
}
90% das chances… por isso pedi pra deixar o editor como textfield… se nao funcionar, entoa o erro ta no modelo mesmo, mas se funcionar, tem algo de bizzarro. Ai o erro ta na combo dela… ou entao a coluna num tá criada :?
Diana, o modelo ta certinho, fiz o teste e tah legal( parece que ta ).
Testei tudo aqui e ta redondo. Ser que não é na contruçao do seu modelo, tipo, os parametros que vc ta passando ? O unico teste aqui q pode acontecer isso é:
Vc passar mais colunas declaredas do que realmente existe no array ( nem controi a tela )
Vc passar o numero de colunas menor que o de dados. Ai a coluna nao vai parar na Jtable. [editado](nesse caso, nem abre o programa, mas no outr sim, só nao aparece a jtable)[/editado]