Linhas ecolunas nao editaveis

1 resposta
rafa120

Pessoal, dei uma pesquisada e achei algumas coisas, mas nao entendi muito bem

Eu utilizo defaultTableModel e gostaria de deixar desativado o modo de editar das linhas e colunas

como eu faço isso?

obrigado

1 Resposta

DeGuedes

Cara, largue de mão o defaultTableModel… Utilize o abastract Table Model, nele vc meche com toda a estrutura da tabela, inclusive quais colunas vc deseja deixar editáveis, ou não, sem mistério nenhum! :wink:

Crie uma classe Table Model

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package tablemodel;

import java.util.ArrayList;
import java.util.List;
import javax.swing.table.AbstractTableModel;
import modelo.Pessoa;

public class TMPessoa extends AbstractTableModel {

    private static final long serialVersionUID = 1L;
    /**
     * Essa lista armazenará os objetos do tipo {@link Cliente}
     */
    private List<Pessoa> pessoa;

    public TMPessoa() {
        pessoa = new ArrayList<Pessoa>();
    }

    /**
     * Criamos um construtor de conveniência para já popular a lista.
     */
    public TMPessoa(List<Pessoa> lista) {
        this();
        pessoa.addAll(lista);
    }

    @Override
    public Class<?> getColumnClass(int coluna) {
        // todas as colunas representam uma String
        return String.class;
    }

    @Override
    public int getColumnCount() {
        // esse método deve retornar o número de colunas.
        //nesse caso 2 colunas
        return 2;
    }

    @Override
    public String getColumnName(int coluna) {
        // vamos retornar o nome de cada coluna
        switch (coluna) {
            case 0:
                return "Nome"; // o nome da primeira coluna
            case 1:
                return "Telefone"; // o nome da segunda
            default:
                return ""; // isso nunca deve ocorrer, pois temos s� 2 colunas
        }
    }

    @Override
    public int getRowCount() {
        // retorna o número de linhas
        return pessoa.size();
    }

    @Override
    public Object getValueAt(int linha, int coluna) {
        //Retorna o valor da celula selecionada onde

        //Ex:
        //int l = tabela.getSelectedRow();
        //int c = tabela.getSelectedColumn();
        //JOptionPane.showMessageDialog(null, tabela.getValueAt(l, c))

        // primeiro vamos pegar o Cliente da linha
        Pessoa c = pessoa.get(linha);

        switch (coluna) {
            case 0:
                return c.getNome_razao();
            case 1:
                return c.getTel_comercial();
            default:
                return null; // isso nunca deve ocorrer, pois temos só2 colunas
        }
    }

    @Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        switch (columnIndex) {
            case 0:
                return false;
            case 1:
                return false;
            default:
                return false;
        }
    }

    @Override
    public void setValueAt(Object valor, int linha, int coluna) {
        // aqui devemos atualizar o valor de nossos Clientes
        // vemos em qual linha ele está
        Pessoa c = pessoa.get(linha);
        // e vemos o que será atualizado
        switch (coluna) {
            case 0:
                c.setNome_razao(valor.toString())
                break;
            case 1:
                c.setTel_comercial(valor.toString());
                break;
          
        }
        // É importante notificar os listeners a cada alteração
        fireTableDataChanged();
    }

    public Long getCodigo(int linha) {
        //Retorna o valor da celula selecionada onde

        //Ex:
        //int l = tabela.getSelectedRow();
        //int  codigo = modelo.getCodigo(l);

        Pessoa c = pessoa.get(linha);
        return c.getCodigo_pessoa();
    }

    /**
     * Adiciona um novo Cliente e notifica os listeners que um novo
     * registro foi adicionado.
     */
    public void adiciona(Pessoa c) {
        pessoa.add(c);
        // informamos os listeners que a linha (size - 1) foi adicionada
        //fireTableDataChanged();
        fireTableRowsInserted(pessoa.size() - 1, pessoa.size() - 1);
    }

    /**
     * Similar ao #adiciona(Cliente), porém para remover. Recebe o
     * índice do cliente a ser removido. Se não souber o índice, use o método
     * #getIndice(Cliente)} antes.
     */
    public void remove(int indice) {
        pessoa.remove(indice);
        fireTableRowsDeleted(indice, indice);
    }

    /**
     * Retorna o índice de determinado cliente.
     */
    public int getIndice(Pessoa c) {
        return pessoa.indexOf(c);
    }

    /**
     * Adiciona todos os clientes na lista
     */
    public void adicionaLista(List<Pessoa> lista) {
        int i = pessoa.size();
        pessoa.addAll(lista);
        fireTableRowsInserted(i, i + lista.size());
    }

    /**
     * Esvazia a lista.
     */
    public void limpaLista() {
        if (!pessoa.isEmpty()) {
            int i = pessoa.size();
            pessoa.clear();
            fireTableRowsDeleted(0, i - 1);
        }
    }

    public List<Pessoa> GetLista() {
        return pessoa;
    }
}

Essa parte eh responsavel pela parte de deixar desativado a edição das linhas e colunas:

@Override
    public boolean isCellEditable(int rowIndex, int columnIndex) {
        switch (columnIndex) {
            case 0:
                return false;
            case 1:
                return false;
            default:
                return false;
        }
    }

E no seu programa basta vc chamar assim:

TableProdutos.setModel(tmpedprod);
//TableProdutos = sua tabela
//tmpedprod = sua Classe Abastract Table Model
Criado 4 de novembro de 2010
Ultima resposta 4 de nov. de 2010
Respostas 1
Participantes 2