Bloquear edição de um JTable

Galera gostaria de bloquear a edição das linhas do meu JTable pois eu o uso apenas para consulta.

Tenho o seguinte código:

private void atualizaBusca(int tipo){ CidadeDB cidadedb = new CidadeDB(); ArrayList <Cidade> lista = new ArrayList(); if(tipo == 1){ lista = cidadedb.getConsultar(cbCampo.getSelectedIndex(), cbTipo.getSelectedIndex(), edtBusca.getText()); }else{ lista = cidadedb.getCidades(); } DefaultTableModel modelo = new DefaultTableModel(); modelo.addColumn("Código"); modelo.addColumn("Cidade"); modelo.addColumn("Estado"); for(Cidade auxCidade : lista){ modelo.addRow(new Object[] {auxCidade.getCid_Codigo(), auxCidade.getNome(),auxCidade.getEst_Sigla()}); } tbGride.setModel(modelo); }
me ajudem por favor…

crie um modelo para sua tabela

http://www.guj.com.br/java/231928-morte-definitiva-ao-default-table-model

sobreponha o metodo:

        public boolean isCellEditable(int linha, int coluna) {
            return false;
        }

como faço já tentei mas deu erro, tem como postar bem certinho com é?
por favor to altos tempo tentando já e não da certo…

o link acima já lhe explica tudo

aqui vai uma forma de com NÃO fazer:

            DefaultTableModel modelo = new DefaultTableModel(){
                public boolean isCellEditable(int linha, int coluna) {  
                    return false;
                }  
            };

cara não deu certo vou postar meu código completo para vc analisar.

[code]/*

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

import controle.CidadeDB;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;
import modelo.Cidade;

/**
*

  • @author luizotavio
    /
    public class FrmConsultaCidade extends javax.swing.JInternalFrame {
    public JTextField edtCodigo = new JTextField();
    public JTextField edtCidade = new JTextField();
    public JTextField edtEstado = new JTextField();
    /
    *

    • Creates new form FrmConsultaCidade
      */
      public FrmConsultaCidade() {
      initComponents();
      atualizaBusca(0);
      }

    private void atualizaBusca(int tipo){
    CidadeDB cidadedb = new CidadeDB();
    ArrayList lista = new ArrayList();
    if(tipo == 1){
    //consulta avançada
    lista = cidadedb.getConsultar(cbCampo.getSelectedIndex(), cbTipo.getSelectedIndex(), edtBusca.getText());
    }else{
    //consulta geral
    lista = cidadedb.getCidades();
    }
    DefaultTableModel modelo = new DefaultTableModel();
    modelo.addColumn(“Código”);
    modelo.addColumn(“Cidade”);
    modelo.addColumn(“Estado”);
    for(Cidade auxCidade : lista){
    modelo.addRow(new Object[] {auxCidade.getCid_Codigo(), auxCidade.getNome(),auxCidade.getEst_Sigla()});
    }
    tbGride.setModel(modelo);
    }

    /**

    • This method is called from within the constructor to initialize the form.

    • WARNING: Do NOT modify this code. The content of this method is always

    • regenerated by the Form Editor.
      */
      @SuppressWarnings(“unchecked”)
      //
      private void initComponents() {

      jScrollPane1 = new javax.swing.JScrollPane();
      tbGride = new javax.swing.JTable();
      jPanel1 = new javax.swing.JPanel();
      jLabel1 = new javax.swing.JLabel();
      cbCampo = new javax.swing.JComboBox();
      jLabel2 = new javax.swing.JLabel();
      cbTipo = new javax.swing.JComboBox();
      lblBusca = new javax.swing.JLabel();
      edtBusca = new javax.swing.JTextField();
      jLabel3 = new javax.swing.JLabel();
      btnTodos = new javax.swing.JButton();

      setClosable(true);
      setDefaultCloseOperation(javax.swing.WindowConstants.HIDE_ON_CLOSE);
      setIconifiable(true);
      setMaximizable(true);
      setResizable(true);
      setTitle(“Consultar Cidade”);

      tbGride.setModel(new javax.swing.table.DefaultTableModel(
      new Object [][] {
      {null, null, null, null},
      {null, null, null, null},
      {null, null, null, null},
      {null, null, null, null}
      },
      new String [] {
      “Title 1”, “Title 2”, “Title 3”, “Title 4”
      }
      ));
      tbGride.addMouseListener(new java.awt.event.MouseAdapter() {
      public void mouseClicked(java.awt.event.MouseEvent evt) {
      tbGrideMouseClicked(evt);
      }
      });
      jScrollPane1.setViewportView(tbGride);

      jLabel1.setText(“Campo”);

      cbCampo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { “Nome”, “Código”, “Sigla Estado” }));

      jLabel2.setText(“Tipo”);

      cbTipo.setModel(new javax.swing.DefaultComboBoxModel(new String[] { “Igual”, “Inicia Com”, “Termina Com”, “Contém” }));
      cbTipo.setSelectedIndex(1);

      edtBusca.addKeyListener(new java.awt.event.KeyAdapter() {
      public void keyPressed(java.awt.event.KeyEvent evt) {
      edtBuscaKeyPressed(evt);
      }
      });

      jLabel3.setText(“Descrição”);

      btnTodos.setText(“Todos”);
      btnTodos.addActionListener(new java.awt.event.ActionListener() {
      public void actionPerformed(java.awt.event.ActionEvent evt) {
      btnTodosActionPerformed(evt);
      }
      });

      javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1);
      jPanel1.setLayout(jPanel1Layout);
      jPanel1Layout.setHorizontalGroup(
      jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
      .addGroup(jPanel1Layout.createSequentialGroup()
      .addContainerGap()
      .addComponent(jLabel1)
      .addGap(18, 18, 18)
      .addComponent(cbCampo, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE)
      .addGap(18, 18, 18)
      .addComponent(jLabel2)
      .addGap(18, 18, 18)
      .addComponent(cbTipo, javax.swing.GroupLayout.PREFERRED_SIZE, 101, javax.swing.GroupLayout.PREFERRED_SIZE)
      .addGap(18, 18, 18)
      .addComponent(btnTodos)
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
      .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
      .addGroup(jPanel1Layout.createSequentialGroup()
      .addComponent(lblBusca)
      .addGap(0, 0, Short.MAX_VALUE))
      .addGroup(jPanel1Layout.createSequentialGroup()
      .addGap(10, 10, 10)
      .addComponent(jLabel3)
      .addGap(18, 18, 18)
      .addComponent(edtBusca)))
      .addContainerGap())
      );
      jPanel1Layout.setVerticalGroup(
      jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
      .addGroup(jPanel1Layout.createSequentialGroup()
      .addContainerGap()
      .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
      .addComponent(jLabel1)
      .addComponent(cbCampo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
      .addComponent(jLabel2)
      .addComponent(cbTipo, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
      .addComponent(edtBusca, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
      .addComponent(lblBusca)
      .addComponent(jLabel3)
      .addComponent(btnTodos))
      .addContainerGap(21, Short.MAX_VALUE))
      );

      javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
      getContentPane().setLayout(layout);
      layout.setHorizontalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
      .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
      .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 1354, Short.MAX_VALUE)
      );
      layout.setVerticalGroup(
      layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
      .addGroup(layout.createSequentialGroup()
      .addComponent(jPanel1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
      .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
      .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 611, Short.MAX_VALUE))
      );

      pack();
      }//

    private void tbGrideMouseClicked(java.awt.event.MouseEvent evt) {
    // TODO add your handling code here:
    int linha = tbGride.getSelectedRow();
    if (linha >= 0){
    edtCodigo.setText(tbGride.getValueAt(linha, 0).toString());
    edtCidade.setText(tbGride.getValueAt(linha, 1).toString());
    edtEstado.setText(tbGride.getValueAt(linha, 2).toString());
    }
    }

    private void edtBuscaKeyPressed(java.awt.event.KeyEvent evt) {
    // TODO add your handling code here:
    if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
    atualizaBusca(1);
    }
    }

    private void btnTodosActionPerformed(java.awt.event.ActionEvent evt) {
    // TODO add your handling code here:
    atualizaBusca(0);
    }

    // Variables declaration - do not modify
    private javax.swing.JButton btnTodos;
    private javax.swing.JComboBox cbCampo;
    private javax.swing.JComboBox cbTipo;
    private javax.swing.JTextField edtBusca;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel jLabel3;
    private javax.swing.JPanel jPanel1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JLabel lblBusca;
    private javax.swing.JTable tbGride;
    // End of variables declaration
    }
    [/code]

esta é uma aplicação em Java Swing.

Luiz Otávio Dorigon já fiz um negócio desse vou colocar o código e depois explicar.


private JTable tabela;
private JScrollPane painel;

painel = new JScrollPane();
		painel.setBounds(130, 90, 500, 300);
			
			tabela = new JTable();
			tabela.setModel(new DefaultTableModel(

//Aqui vc passa um vetor bidicerional do tipo String a fim de alimentar a tabela
					listar(contato),

//Aqui são os rótulos da tabela
					new String[] { "Local", "Número" }));
			
			painel.setViewportView(tabela);
			tabela.setEnabled(false);

Primeira vc precisa criar um JScrollPane e depois a tabela, depois set o modelo na tabela alimentado a tabela e por fim adicione a tabela ao JScrollPane e aplique o .setEnable para impedir alteração na tabela. Daí é só utilizar o JScrollPane e adicioná-lo onde quiser exibir a tabela.

deu certo consegui ele está bloqueado. Mas me deparei agora com outra situação quando eu clicava em alguma linha pegava os valores delas mas agora ela bloqueou inteira e não aceita mais o MouseClicked.

Se possível coloca o erro e o código aqui.

utiliza esse código para pegar


tabela.getModel().getValueAt(tabela.getSelectedRow(), tabela.getSelectedColumn()

correção

tabela.getModel().getValueAt(tabela.getSelectedRow(), tabela.getSelectedColumn());

não da erro. O negocio é o seguinte quando eu clicava em alguma linha do meu grid ele pegava os valores das linhas e guardava em uma variável ou jogava o valor dentro de de uma campo de texto. Ai o que acontecia o usuário clicava na linha do grid e percebia que podia ser editado e alterava o valor. O que eu queria na verdade não era bloquear o grid inteiro, queria bloquear a edição das linhas e colunas mas permitir que a linha possa ser selecionada.

Você entendeu??

Vou dar uma analisada no teu código e te respondo o quanto antes.

ok no aguardo…