Como desabilitar uma coluna do Jtable

Como faço para desabilitar uma coluna especifica do Jtable ?

Vc pode reescrever o seu tableModel fazendo ele retornar false no método isCellEditable(int row, int column). Como eu nunca Edito as minhas JTable, sempre retorno false para todos, mas há situações em que preciso esconder alguma coluna … ai vejo o pessoal alterando o tamanho da coluna para Zero (0), mas isso causa alguns problemas pq na verdade a coluna continua la, só que “invisível” … eu geralmente removo ela:

this.getColumnModel().removeColumn( this.getColumnModel().getColumn(index));

1 curtida

Vonquelbe_Cruz, muito obrigado pela resposta vai me ajudar muito, mas tenho outra pergunta, tem como desabilitar só uma unica celula do Jtable ?

Opa … tem sim … seguinte, vou colocar um método que criei para criar as minhas JTable´s. Como eu te disse antes, eu nunca altero os dados da minha JTbale pq elas me servem unicamente para exibir os dados que quero … veja uma tela do meu sistema:

Eu alterei o meu método para que os dados da coluna “Descrição” possam ser alterados. Segue meu Método

package gerador;
    
import javax.swing.SwingConstants;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;

public class GeraTabela extends javax.swing.JTable {

    public GeraTabela(String [] titulo, int [][] tamanho, int[][] posicao, int[][] tipo ){

            DefaultTableCellRenderer centro = new DefaultTableCellRenderer();
            centro.setHorizontalAlignment(SwingConstants.CENTER);
            DefaultTableCellRenderer direita = new DefaultTableCellRenderer();
            direita.setHorizontalAlignment(SwingConstants.RIGHT);

            this.setModel(new DefaultTableModel(new Object[][]{}, titulo) {

                public Class getColumnClass(int columnIndex) {
                    for(int i=0;i<tipo.length;i++){
                        if (columnIndex==tipo[i][0] && tipo[i][1]==1){
                            return java.lang.Boolean.class;
                        } else
                        if (columnIndex==tipo[i][0] && tipo[i][1]==2){
                            return java.util.Date.class;
                        } else
                        if (columnIndex==tipo[i][0] && tipo[i][1]==3){
                            return java.lang.String.class;
                        }
                    }
                    try {
                        return this.getValueAt(0, columnIndex).getClass();
                    } catch (Exception e) {
                        return java.lang.Object.class;
                    }
                }
                    
                public boolean isCellEditable(int r, int c){ // Nunca edito o meu GRID
                    if (c==1){
                        return true;
                    }
                    return false;
                }
            }
        );
            
        for(int i=0;i<posicao.length;i++){
            if (posicao[i][1]==0) {
                this.getColumnModel().getColumn(posicao[i][0]).setCellRenderer(centro);
            } else {
                this.getColumnModel().getColumn(posicao[i][0]).setCellRenderer(direita);
            }
        }

        for(int i=0;i<tamanho.length;i++){
            this.getColumnModel().getColumn(tamanho[i][0]).setMinWidth(tamanho[i][1]);
            this.getColumnModel().getColumn(tamanho[i][0]).setMaxWidth(tamanho[i][2]);
        }
        
        for(int i=tamanho.length-1;i>=0;i--){
            if (tamanho[i][1]==0 && tamanho[i][2]==0){
                this.getColumnModel().removeColumn( this.getColumnModel().getColumn(tamanho[i][0]));                      
            }
        }
    }
}

Repare no que fiz no método isCellEditable

O Método recebe como parâmetro tanto linha como coluna, e ai vc trata da melhor forma. Entendeu ?

1 curtida

nossa, valeu amigo, resolveu meu problema era isso mesmo que queria , muito obrigado !