(RESOLVIDO) Dúvida com modelo de tabela e método isCellEditable

4 respostas Resolvido
marcos480

Pessoal, boa noite.

O meu problema é o seguinte: Eu tenho uma tabela e estou utilizando meu próprio modelo. Lá no modelo, eu escrevi meu método isCellEditable(row, column), onde os index 1 e 2 são false e o restante é true. Até aqui tudo bem.
Porém quando eu rodo o sistema, eu preciso em um determinado momento deixar o index 1 da tabela false também. Ou seja, tem que ser feito quando o sistema está executando.
No método isCellEditable só existe os parâmetros de linha e coluna. Se no construtor do modelo eu coloquei que uma determinada coluna não pode ser editável, na execução do sistema, eu não consigo mudar isso chamando o método, já que ele não me dá opção de fazer isso nos parâmetros.

Alguém sabe de algum método que eu possa usar para fazer uma coluna ficar ou não editável com o sistema em execução?

4 Respostas

jacoboliveira

Fala @marcos480 tudo bem, segue um exemplo:

// Presumindo que Você esteja herdando do AbstractTableModel

 //1 passo criar um  List de Array de boolean
private List<Boolean[]> editableCells; 

//2 passo Ao popular a tabela definir as colunas editaveis
 public TestTableModel(List<Pessoa> list) {
        this.list = list;
        editable_cells = new LinkedList<>();
        for (Pessoa pessoa : list) {
            editableCells.add(new Boolean[]{true,false});
        }
        fireTableDataChanged();
  }

 //3 passo criar metodos para que a coluna se torne editavel  dinamicamente/ Runtime
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
     return editableCells.get(rowIndex)[columnIndex]; 
}

public void setCellEditable(int row, int col, boolean b) {
   editableCells.get(row)[col] = b;
   fireTableCellUpdated(row, col);
}

Para habilitar a edição em Runtime :

((TestTableModel)jTable1.getModel()).setCellEditable(jTable1.getSelectedRow(), 1, true);
marcos480

Aow @jacoboliveira !!! To bem, e vc?
Desculpa a demora pra responder, surgiu uns imprevistos aqui e eu não pude entrar!

Bom, eu entendi a lógica dos métodos pra tornar a coluna editável dinamicamente, mas eu to com umas dúvidas… se puder responder eu agradeço muito!

No passo 2 você cria um for para pegar as células editáveis, a minha dúvida é nesta parte.
Eu não entendi direito porque instanciar a classe Pessoa (no meu caso seria outra classe). Quando eu instancio, o netBeans diz que a instancia não está sendo utilizada ( e está certo pois estamos instanciando na criação do for). Esta classe não deveria vir do meu list ?

Não sei se consegui explicar direito rsrs
Mas mesmo assim obrigado, já me clareou muita coisa!!

jacoboliveira
Solucao aceita

o list seria os dados vindo do banco populados na List, a ideia do for é atribuir para cada linha a edição do mesmo,
essa linha aqui editableCells.add(new Boolean[]{true,false}); significa as colunas por exemplo se tiver 3 ficaria assim editableCells.add(new Boolean[]{true,false,false});

No caso não é preciso instanciar a sua classe vinda do banco nesse for, o que é instanciado é o boolean para editar ou não as colunas

marcos480

Agora entendi! Ficou show!
Mais uma vez obrigado por disponibilizar teu tempo pra me ajudar!
Um abraço!

Criado 5 de julho de 2016
Ultima resposta 6 de jul. de 2016
Respostas 4
Participantes 2