Não utilize DefaultTableModel!
Implemente seu próprio TableModel estendendo AbstractTableModel, aí basta implementar a lógica de habilitar/desabilitar sobrescrevendo o método isCellEditable.
L
leandro177568
Boa noite!
você tem algum exemplo?
staroski
importjava.awt.BorderLayout;importjava.awt.Container;importjavax.swing.JFrame;importjavax.swing.JScrollPane;importjavax.swing.JTable;importjavax.swing.UIManager;importjavax.swing.table.AbstractTableModel;@SuppressWarnings("serial")publicclassExemploTableModelextendsJFrame{/** * Modelo hipotético para fornecer dados para a JTable */privateclassMeuTableModelextendsAbstractTableModel{/** * A JTable chama esse método para saber quantas colunas ela possui */@OverridepublicintgetColumnCount(){// minha JTable terá 3 colunas// poderia ter tantas quanto eu quisessereturn3;}/** * A JTable chama esse método para saber qual é o nome da coluna informada */@OverridepublicStringgetColumnName(intcol){// o nome das colunas será "coluna 0", "coluna 1" e "coluna 2"// mas poderia ser algo mais óbvio como "Nome", "Idade" e "Gênero" por exemploreturn"Coluna "+col;}/** * A JTable chama esse método para saber quantos itens ela possui */@OverridepublicintgetRowCount(){// minha JTable terá 10 mil linhas// mas poderia por exemplo retornar o tamanho da lista de objetos que quero// renderizarreturn10000;}/** * A JTable chama esse método para saber qual o valor que ela deve apresentar na * célula informada */@OverridepublicObjectgetValueAt(intlin,intcol){// cada célula da minha JTable vai renderizar sua linha e sua coluna// mas poderia fazer o seguinte:// pegar o objeto na posição "lin" da lista// um switch da coluna e com isso// devolver o valor dos atributos "nome", "idade" e "genero"return"célula ("+lin+", "+col+")";}/** * A JTable chama esse método para saber se a célula informada é editável ou não */@OverridepublicbooleanisCellEditable(intlin,intcol){/* * Aqui você verifica a condição para habilitar ou desabilitar a edição da célula * * return true se pode editar * * return false se não pode editar */}}/** * Ponto de entrada do exemplo */publicstaticvoidmain(String[]args){try{UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());JFramejanela=newExemploTableModel();janela.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);janela.setSize(640,480);janela.setLocationRelativeTo(null);janela.setVisible(true);}catch(Throwablet){t.printStackTrace();}}// a JTableprivateJTableminhaJTable;// modelo da minha JTableprivateMeuTableModelmeuTableModel;privateExemploTableModel(){super("Exemplo");meuTableModel=newMeuTableModel();minhaJTable=newJTable(meuTableModel);JScrollPanescroll=newJScrollPane(minhaJTable);Containerpanel=getContentPane();panel.add(BorderLayout.CENTER,scroll);}}