Bloquear edição de um JTable

12 respostas
L

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…

12 Respostas

O

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;
        }
L

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

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;
                }  
            };
L
cara não deu certo vou postar meu código completo para vc analisar.
/*
 * 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 <Cidade> 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")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    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();
    }// </editor-fold>                        

    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                   
}

esta é uma aplicação em Java Swing.

U

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.

L

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.

U

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

U

utiliza esse código para pegar

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

correção

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

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??

U

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

L

ok no aguardo…

Criado 8 de março de 2013
Ultima resposta 8 de mar. de 2013
Respostas 12
Participantes 3