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?
Toda vez que eu clico na coluna onde supostamente ele teria o combo, eh disparado este stack
Thread[AWT-EventQueue-0] (Suspended (exception ArrayIndexOutOfBoundsException))EventDispatchThread.run() line: not available [local variables unavailable]
Talvez o erro esteja aí, não sei…
vc nao deveria retornar o List?
brlima
“danieldestro”:
Talvez o erro esteja aí, não sei…
vc nao deveria retornar o List?
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.
danieldestro
Então o erro deve estar no SET deve valor, no model dela… procede?
Diana
Nao deu…vou te passar o modelo…
publicclassTMTelefoneextendsAbstractTableModel{privateArrayListlinhas=null;privateString[]colunas;privateboolean[]colsEdicao;/** * Contrutor para a classe, recebendo os dados a serem exibidos * e as colunas que devem ser criadas. * @param dados * @param colunas */publicTMTelefone(ArrayListdados,String[]colunas,boolean[]edicao){setLinhas(dados);setColunas(colunas);colsEdicao=edicao;}/** * Retorna o numero de colunas no modelo * @see javax.swing.table.TableModel#getColumnCount() */publicintgetColumnCount(){returngetColunas().length;}/** * Retorna o numero de linhas existentes no modelo * @see javax.swing.table.TableModel#getRowCount() */publicintgetRowCount(){returngetLinhas().size();}/** * Obtem o valor na linha e coluna * @see javax.swing.table.TableModel#getValueAt(int, int) */publicObjectgetValueAt(introwIndex,intcolumnIndex){// Obtem a linha, que é uma String []String[]linha=(String[])getLinhas().get(rowIndex);// Retorna o objeto que esta na colunareturnlinha[columnIndex];}publicString[]getColunas(){returncolunas;}publicArrayListgetLinhas(){returnlinhas;}publicvoidsetColunas(String[]strings){colunas=strings;}publicvoidsetLinhas(ArrayListlist){linhas=list;}/** * Seta o valor na linha e coluna * @see javax.swing.table.TableModel#setValueAt(java.lang.Object, int, int) */publicvoidsetValueAt(Objectvalue,introw,intcol){// Obtem a linha, que é uma String []String[]linha=(String[])getLinhas().get(row);// Altera o conteudo no indice da coluna passadolinha[col]=(String)value;// dispara o evento de celula alteradafireTableCellUpdated(row,col);}/** * Retorna se a celula pode ser editada * @see javax.swing.table.TableModel#isCellEditable(int, int) */publicbooleanisCellEditable(introw,intcol){returncolsEdicao[col];}/** * Adiciona o array na linha */publicvoidaddRow(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.intlinha=getLinhas().size()-1;fireTableRowsInserted(linha,linha);return;}/** * Remove a linha pelo indice informado * @param row */publicvoidremoveRow(introw){getLinhas().remove(row);// informa a jtable que houve dados deletados passando a // linha removidafireTableRowsDeleted(row,row);}/** * Remove a linha pelo valor da coluna informada * @param val * @param col * @return */publicbooleanremoveRow(Stringval,intcol){// obtem o iteratorIteratori=getLinhas().iterator();intlinha=0;// Faz um looping em cima das linhaswhile(i.hasNext()){// Obtem as colunas da linha atualString[]linhaCorrente=(String[])i.next();linha++;// compara o conteudo String da linha atual na coluna desejada// com o valor informadoif(linhaCorrente[col].equals(val)){getLinhas().remove(linha);// informa a jtable que houve dados deletados passando a // linha removidafireTableRowsDeleted(linha,linha);returntrue;}}// Nao encontrou nadareturnfalse;}/** * Retorna o nome da coluna. * @see javax.swing.table.TableModel#getColumnName(int) */publicStringgetColumnName(intcol){returngetColunas()[col];}}
brlima
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 :?
danieldestro
Diana, faz o teste e fala pra gente.
brlima
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]
Diana
Os argumentos que eu passei para criar o modelo foram estes…
ArrayList dados = new ArrayList();
String[] colunas = new String[] {"DDI","DDD","Fone","Tipo"};
boolean [] edicao = {true,false};
TMTelefone modelo=new TMTelefone(dados,colunas,edicao);
Como vc setou e quais argumentos vc passou para criar o modelo?
danieldestro
O erro está aqui:
boolean [] edicao = {true,false};
o número de booleans deve ser o mesmo do número de colunas
brlima
“danieldestro”:
O erro está aqui:
boolean [] edicao = {true,false};
o número de booleans deve ser o mesmo do número de colunas
Correto!!!
Diana
poooooxa…sabe quando tu acha que o erro jamais pode ser o ponto-e-virgula faltando…pq tu sabe que ele deveria estar lah, e sendo assim tu tem certeza que colocou, mas olhando com atencao ele nao estah lah…
Que F###…
Obrigada por toda ajuda Galera!!!
Fico devendo!
danieldestro
Diana, vc parece a Luci Liu?
brlima
“Diana”:
poooooxa…sabe quando tu acha que o erro jamais pode ser o ponto-e-virgula faltando…pq tu sabe que ele deveria estar lah, e sendo assim tu tem certeza que colocou, mas olhando com atencao ele nao estah lah…
Que F###…
Obrigada por toda ajuda Galera!!!
Fico devendo!
é… se fosse uma tartaruga, te mordia…rssssss… :lol: Mas acontece… hehehehe
Diana
, naum…mas achei a foto show…vc viu Kill Bill???
Essa sou eu: