Bloquear edição de linhas em jTable

9 respostas
D

olá.

eu tenho que bloquear a edição de todas as linhas da tabela.

DefaultTableModel tmLivro = new DefaultTableModel(null, new String[]{"TITULO","ISBN","QTD","PRECO"});
    List<Livro> livro;
    ListSelectionModel lsmLivro;

 boolean[] canEdit = new boolean []{    
            false, false, false, false  
        };    
     
        @Override    
        public boolean isCellEditable(int rowIndex, int columnIndex) {    
            return canEdit [columnIndex];    
        }

Eu adicionei o canEdit, só que não está funcionando.

9 Respostas

C

Cara se voce tem que bloquear a edicao de todas as linha entaum faça o metodo isCellEditable retornar sempre falso pq voce tem que bloquear a edicao de todas as linha, nao ha a necessidade de se usar um array que guarda dentro dele em todas as poiscoes falso, faça sempre retornar falso que ira funcionar

D
eu fiz assim:
DefaultTableModel tmLivro = new DefaultTableModel(null, new String[]{"TITULO","ISBN","QTD","PRECO"});  
   List<Livro> livro;  
   ListSelectionModel lsmLivro; 
   
  
    tmLivro.isCellEditable();
   
      public boolean isCellEditable() {      
           return false;  
       }

mas só que o erro persiste

F

Sobrescreva o metodo isCellEditable()

deixe assim:

public boolean isCellEditable(int row, int column) {																
			return false;
}

Boa sorte.

D

Fexx:
Sobrescreva o metodo isCellEditable()

deixe assim:

public boolean isCellEditable(int row, int column) {																
			return false;
}

Boa sorte.

eu tenho que bloquear todas as linhas. Como é que eu faço para nao ter que passar por paramentro uma por uma, linha e coluna?

C

apenas faca isso e ira funcionar

public boolean isCellEditable(int row, int column) {                                                                  
            return false;  
}
D
CristianPalmaSola10:
apenas faca isso e ira funcionar
public boolean isCellEditable(int row, int column) {                                                                  
            return false;  
}
fiz isso e nao funcionou. Segue abaixo o meu codigo
DefaultTableModel tmLivro = new DefaultTableModel(null, new String[]{"TITULO","ISBN","QTD","PRECO"});  
   List&lt;Livro&gt; livro;  
   ListSelectionModel lsmLivro;

      public boolean isCellEditable(int row, int column) {
           return false;
       }
C

CAra voce não deve usar DefaultTableModel é por isso que não funciona, voce deve criar uma classe que implemente a AbstractTableModel nesta classe voce deve colocar aquele trecho de codigo e tambem implemtar os metodos necessarios para o funcionamento da sua tablemodel personalizada segue um exemplo de TableModel para voce se baseiar

**
 *
 * @author cristian.urbainski
 */
public class ModelTable extends AbstractTableModel {

    public ArrayList lista;
    public String[] colunas = {"Titulo", "Código"};


    public ModelTable(ArrayList l)
    {
        this.lista = l;
    }

    @Override
    public boolean isCellEditable(int row, int column)
    {
        return true;
    }

    @Override
    public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
        Bean b = (Bean) lista.get(rowIndex);

        switch(columnIndex)
        {
            case 0:
                b.desc = (String) aValue;
                break;
            case 1:
                b.cd = Integer.parseInt((String)aValue);
                break;
        }

        fireTableRowsUpdated(rowIndex, rowIndex);
    }

    @Override
    public String getColumnName(int columnIndex)
    {
        switch(columnIndex)
        {
            case 0:
                return "Titulo";
            case 1:
                return "Cód.";
            default:
                return"";
        }
    }

    public int getRowCount()
    {
        return lista.size();
    }

    public int getColumnCount()
    {
        return colunas.length;
    }

    public Object getValueAt(int rowIndex, int columnIndex)
    {
        Bean obj = (Bean) lista.get(rowIndex);

        switch(columnIndex)
        {
            case 0:
                return obj.desc;
            case 1:
                return obj.cd;
            default:
                return null;
        }
    }

    public void addLinha(Bean b)
    {
        lista.add(b);
        fireTableRowsInserted(lista.size(), lista.size());
    }
F

Lembrando que tanto um DefaultTableModel, como um AbstractTableModel, possui um metodo isCellEditable(), ou seja não é porque vc está usando DefaultTableModel que não vai funcionar o metodo.
Já utilizei defaultTableModel, quando bloqueei as linhas utilizava assim:

jtTabela.setModel(new DefaultTableModel(new Object[][] {}, new String[] { "Placa", "Cor", "Descrição", }) {


				public boolean isCellEditable(int row, int column) { 
					return false;
				}

Outra coisa, tente criar seu próprio model, com DefaultTableModel, só vai ter problemas.

Boa sorte.

C

Fexx compare o jeito que voce e o jeito que ele fez, do jeito que ele fez nunca ira funcionar ele colocou o metodo isCellEditable fora da declaracao da defaulTableModel, esta crianda na classe errada

Criado 29 de fevereiro de 2012
Ultima resposta 29 de fev. de 2012
Respostas 9
Participantes 3