Código Java – Desabilitar Edición de Celdas de JTable

Este es el Ejemplo #04 del Topic: Programación Gráfica en Java.

Aquí les detallo en forma de código el procedimiento para Habilitar/Deshabilitar la edición de celdas de un JTable.

...
        tblEjemplo=new JTable(dtmEjemplo){
        public boolean isCellEditable(int rowIndex, int vColIndex) {
            return false;
        }}; //return false: Desabilitar edición de celdas.
...

Código de Ejemplo:

package beastieux.gui;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author beastieux
 */
public class Ejm04_BloquearEdicionJTable extends JFrame{
    public Ejm04_BloquearEdicionJTable()
    {

        JTable tblEjemplo = new JTable();
        JScrollPane scpEjemplo= new JScrollPane();

        //Llenamos el modelo
        DefaultTableModel dtmEjemplo = new DefaultTableModel(getFilas(),
                                                             getColumnas());

        tblEjemplo=new JTable(dtmEjemplo){
        public boolean isCellEditable(int rowIndex, int vColIndex) {
            return false;
        }}; //return false: Desabilitar edición de celdas.

        tblEjemplo.setModel(dtmEjemplo);
        scpEjemplo.add(tblEjemplo);
        this.add(scpEjemplo);
        this.setSize(500, 200);
        scpEjemplo.setViewportView(tblEjemplo);

    }

    //Datos de las filas
    private Object[][] getFilas()
    {
         Object fila[][]=new Object[][] {
                            {"a1", "b1", "c1", "d1"},
                            {"a2", "b2", "c2", "d2"},
                            {"a3", "b3", "c3", "d3"}};
         return fila;
    }

    //Encabezados de la tabla
    private String[] getColumnas()
    {
          String columna[]=new String[]{"A","B","C", "D"};
          return columna;
    }

    public static void main(String args[]) {
        Ejm04_BloquearEdicionJTable obj = new Ejm04_BloquearEdicionJTable();
        obj.setVisible(true);
    }
}

Pueder ir al artículo principal:

Códigos Sencillos hechos en Java

8 thoughts on “Código Java – Desabilitar Edición de Celdas de JTable

  1. Hola, tengo una interrogante, estoy tratando de habilitar y deshabilitar la edicion de una columna completamente apartir de un JToggleButton….
    pero no se como implementar este codigo….
    espero puedan ayudarme…..

    al momento de presionar el Boton se habilite toda una columna para su edicion, y al momento de volverlo a presionar se desactive su edicion…

    1. No, no es lo mismo. porque así como tu dices se bloquea totalmente el componente y así y que tal que si con un evento quisieras que al seleccionar una fila se carguen algunos campos.

      Si no necesitas este comportamiento es muy buena tu respuesta

  2. Hola: solo para saber si me puedes ayuydar con una apli q ando desarrollando, tengo una tabla que es llenada desde un resultset de uan base de datos veo q tu obtienes los datos estaticamente osea siemopre son los miusmos, como podria hcer para que cuando los datos sean dinamicos unicamente la ultima de las columnas sea editable y las demas sean no editables con el metodo isCellEditable() ya que noi veo bien como podria implementarse, el metodo lo puse despues del constructor lo llame pero no funciona mi codigo es el siguiente:

    ejecutarAccion.crearConexion();
    String mostarDatos = “SELECT idoperacion, empresa, total, deducible, pendiente, estatus, agregar from operacion where ”
    + “fechaactual >= ‘” + fechaActual + ” 00:00:00′”
    + ” && fechaactual <= '" + fechaActual + " 23:59:59'" + ";";

    DefaultTableModel modelo = new DefaultTableModel();
    JTable tabla = new JTable(modelo);

    int contadorFilas = 0;
    int sumaDeducibles = 0;
    int sumaPendientes = 0;

    modelo.addColumn(“Operación Número”);
    modelo.addColumn(“Empresa”);
    modelo.addColumn(“Total”);
    modelo.addColumn(“Deducible”);
    modelo.addColumn(“Pendiente”);
    modelo.addColumn(“Estatus”);
    modelo.addColumn(“Recibir Deducible”);

    try {
    while (resultadoDatosParaTabla.next()) {
    contadorFilas = contadorFilas + 1;
    sumaDeducibles = sumaDeducibles + resultadoDatosParaTabla.getInt(4);
    sumaPendientes = sumaPendientes + resultadoDatosParaTabla.getInt(5);
    Object[] datos = new Object[6];
    for (int row = 0; row < 6; row++) {
    datos[row] = resultadoDatosParaTabla.getObject(row + 1);
    }
    modelo.addRow(datos);
    }
    jTable1.setModel(modelo);
    } catch (SQLException ex) {
    Logger.getLogger(CorteCaja.class.getName()).log(Level.SEVERE, null, ex);
    }

    por tu ayuda gracias

    1. Como stas antonio… Si te refieres a que solo la última columna deba ser editable has elegido bien en jugar con el metodo isCellEditable(), veo que tienes 7 columnas y como se empieza a contar desde el 0 la ultima columna es el 6, así que deberías implementar en la parte en que instancias el JTable el código como este:

      ...
           JTable tabla =new JTable(modelo){
              public boolean isCellEditable(int rowIndex, int colIndex) {
                  if(colIndex==6)
                      return true;
                  else
                      return false;
              }};
      ...
      

      Espero haber resuelto tu duda con las columnas, saludos!!

Deja un comentario