Foros del Web » Programación para mayores de 30 ;) » Java »

problemas jtable setcelleditor

Estas en el tema de problemas jtable setcelleditor en el foro de Java en Foros del Web. Buenas!! Tengo un problema con la edicion de celdas del JTable. Los datos los recojo de un resultset que hago a una base de datos ...
  #1 (permalink)  
Antiguo 16/10/2008, 04:54
 
Fecha de Ingreso: febrero-2006
Mensajes: 174
Antigüedad: 18 años, 2 meses
Puntos: 0
problemas jtable setcelleditor

Buenas!!

Tengo un problema con la edicion de celdas del JTable. Los datos los recojo de un resultset que hago a una base de datos mysql. Todos los datos son varchar excepto la ultima columna. He puesto la funcion setCellEditor() pero no me funciona. Alguna idea???

Gracias


Código:
try {
           
            modeloTabla = new ModeloTablaResultado(consulta);
            
        	tablaResultados = new JTable(modeloTabla);
        	tablaResultados.setCellSelectionEnabled(true);
        	JTextField jtf=new JTextField();
        	tablaResultados.setCellEditor(new DefaultCellEditor(jtf));            
            this.setLayout(new BorderLayout());//los he puesto yo
            this.add( new JScrollPane(tablaResultados) , BorderLayout.CENTER );
            
            
            // establecer tamaño de ventana y mostrarla en pantalla
            setSize( 500, 250 );
            setVisible( true );
            
            
        }  catch ( ClassNotFoundException claseNoEncontrada ) {
            JOptionPane.showMessageDialog( null,
                    "No se encontro el controlador de la base de datos", "No se encontro el controlador",
                    JOptionPane.ERROR_MESSAGE );
            System.exit( 1 );
        } 
        catch ( SQLException excepcionSQL ) {
            JOptionPane.showMessageDialog( null, excepcionSQL.getMessage(),
                    "Error en la base de datos", JOptionPane.ERROR_MESSAGE );
            modeloTabla.desconectarDeLaBaseDeDatos();
            System.exit( 1 );
        }
  #2 (permalink)  
Antiguo 17/10/2008, 02:51
 
Fecha de Ingreso: febrero-2006
Mensajes: 174
Antigüedad: 18 años, 2 meses
Puntos: 0
Respuesta: problemas jtable setcelleditor

Haber voy a poner las dos clases que utilizo. Una es la que crea el modelo y la otra crea el jtable y coge el modelo. Es muy genérico. Coge datos de una bd y crea tantas filas y columnas como tenga el resultado de la consulta a la base de datos.

Tengo puesto que las celdas sean editables, pero no me deja editarlas. Por favor, haber si alguien me puede ayudar!

Código:
import java.awt.BorderLayout;

import javax.swing.DefaultCellEditor;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
public class MostrarResultadosConsulta extends JPanel {
   
    private ModeloTablaResultado modeloTabla;
    private JTable tablaResultados = null;

    public MostrarResultadosConsulta(int consulta) {
    	
        // crear objeto ModeloTablaResultados y mostrar tabla de la base de datos
        try {
           
             modeloTabla = new ModeloTablaResultado(consulta);
        	tablaResultados = new JTable(modeloTabla);
        	
        	tablaResultados.setCellSelectionEnabled(true);
        	tablaResultados.setCellEditor(new DefaultCellEditor(new JTextField()));
        	
            
            this.setLayout(new BorderLayout());//los he puesto yo
            this.add( new JScrollPane(tablaResultados) , BorderLayout.CENTER );
            
            
            setSize( 500, 250 );
            setVisible( true );
      
        }  catch ( Exception e){
        	System.out.println(e.getMessage());
        	modeloTabla.desconectarDeLaBaseDeDatos();
        }

    }  

 
}
Y la clase del modelo:
Código:
import java.awt.event.ActionEvent;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;

import javax.swing.ListSelectionModel;
import javax.swing.table.AbstractTableModel;

import SAD.accesodatos.gestorBD;

public class ModeloTablaResultado extends AbstractTableModel {
  
    private Statement instruccion;
    private ResultSet conjuntoResultados;
    private ResultSetMetaData metaDatos;
    private int numeroDeFilas;
    private boolean conectadoALaBaseDeDatos = false;
    private gestorBD gbd;

    public ModeloTablaResultado (int consulta) throws SQLException, ClassNotFoundException {
    	
    	gbd=new gestorBD();
    	conectadoALaBaseDeDatos=gbd.conectar("localhost", "sad","root", "");
    	if(consulta==1){
    		conjuntoResultados=gbd.buscarPersonas();
    	}else if(consulta==2){
    		conjuntoResultados=gbd.mostrarTasas();
    	}
        establecerConsulta();
 
    }
    // obtener la clase que representa al tipo de columna
    public Class getColumnClass( int columna ) throws IllegalStateException {
        // asegurar que la conexión a la base de datos esté disponible
        if ( !conectadoALaBaseDeDatos )
            throw new IllegalStateException( "No hay conexion a la base de datos" );
        // determinar la clase de Java de columna
        try {
            String nombreClase = metaDatos.getColumnClassName( columna + 1 );
            // devolver objeto Class que representa a nombreClase
            return Class.forName( nombreClase );
        }
        // atrapar excepciones SQLException y ClassNotFoundException
        catch ( Exception excepcion ) {
            excepcion.printStackTrace();
        }
        // si ocurren problemas arriba, suponer que es tipo Object
        return Object.class;
    }
    // obtener el número de columnas en el objeto ResultSet
    public int getColumnCount() throws IllegalStateException {
        // asegurar que la conexión a la base de datos esté disponible
        if ( !conectadoALaBaseDeDatos )
            throw new IllegalStateException( "No hay conexion a la base de datos" );
        // determinar el número de columnas
        try {
            return metaDatos.getColumnCount();
        }
        // atrapar excepciones SQLException e imprimir mensaje de error
        catch ( SQLException excepcionSQL ) {
            excepcionSQL.printStackTrace();
        }
        // si ocurren problemas arriba, devolver 0 para el número de columnas
        return 0;
    }
    // obtener el nombre de una columna específica en el objeto ResultSet
    public String getColumnName( int columna ) throws IllegalStateException {
        // asegurar que la conexión a la base de datos esté disponible
        if ( !conectadoALaBaseDeDatos )
            throw new IllegalStateException( "No hay conexion a la base de datos" );
        // determinar el nombre de la columna
        try {
            return metaDatos.getColumnName( columna + 1 );
        }
        // atrapar excepciones SQLException e imprimir mensaje de error
        catch ( SQLException excepcionSQL ) {
            excepcionSQL.printStackTrace();
        }
        // si hay problemas, devolver cadena vacía para el nombre de la columna
        return "";
    }
    // devolver el número de filas en el objeto ResultSet
    public int getRowCount() throws IllegalStateException {
        // asegurar que la conexión a la base de datos esté disponible
        if ( !conectadoALaBaseDeDatos )
            throw new IllegalStateException( "No hay conexion a la base de datos" );
        return numeroDeFilas;
    }
    // obtener el valor en una fila y columna específicas
    public Object getValueAt( int fila, int columna ) throws IllegalStateException {
        // asegurar que la conexión a la base de datos esté disponible
        if ( !conectadoALaBaseDeDatos )
            throw new IllegalStateException( "No hay conexion a la base de datos" );
        // obtener un valor en una fila y columna específicas del objeto ResultSet
        try {
            conjuntoResultados.absolute( fila + 1 );
            return conjuntoResultados.getObject( columna + 1 );
        }
        // atrapar excepciones SQLExceptions e imprimir mensaje de error
        catch ( SQLException excepcionSQL ) {
            excepcionSQL.printStackTrace();
        }
        // si hay problemas, devolver objeto cadena vacía
        return "";
    }
    // establecer nueva cadena de consulta para la base de datos
    public void establecerConsulta()throws SQLException, IllegalStateException {
        // asegurar que la conexión a la base de datos esté disponible
        if ( !conectadoALaBaseDeDatos )
            throw new IllegalStateException( "No hay conexion a la base de datos" );
     
        metaDatos = conjuntoResultados.getMetaData();
        conjuntoResultados.last();                   // mover a la última fila
        numeroDeFilas = conjuntoResultados.getRow();  // obtener número de fila
        fireTableStructureChanged();
    }
    // cerrar objetos Statement y Connection
    public void desconectarDeLaBaseDeDatos() {
        // cerrar objetos Statement y Connection
        try {
            instruccion.close();
          //  conexion.close();
            gbd.desconectar();
        }
        // atrapar excepciones SQLException e imprimir mensaje de error
        catch ( SQLException excepcionSQL ) {
            excepcionSQL.printStackTrace();
        }
        // actualizar estado de conexión a la base de datos
        finally {
            conectadoALaBaseDeDatos = false;
        }
    }
    
    
   public void setValueAt(int fila, int columna)throws IllegalStateException {
       // asegurar que la conexión a la base de datos esté disponible
       if ( !conectadoALaBaseDeDatos )
           throw new IllegalStateException( "No hay conexion a la base de datos" );
       // obtener un valor en una fila y columna específicas del objeto ResultSet
       try {
           conjuntoResultados.updateRow();
          
       }
       // atrapar excepciones SQLExceptions e imprimir mensaje de error
       catch ( SQLException excepcionSQL ) {
           excepcionSQL.printStackTrace();
       }
       // si hay problemas, devolver objeto cadena vacía   
	   
	   
   }

}
Muchas gracias!
  #3 (permalink)  
Antiguo 10/03/2014, 08:00
 
Fecha de Ingreso: marzo-2014
Mensajes: 1
Antigüedad: 10 años, 1 mes
Puntos: 0
Respuesta: problemas jtable setcelleditor

En tu TableModel, te falta decir que columnas pueden ser editadas.

Código:
    /*
     * Don't need to implement this method unless your table's
     * editable.
     */
    public boolean isCellEditable(int row, int col) {
        //Note that the data/cell address is constant,
        //no matter where the cell appears onscreen.
        if (col < 4) {
            return false;
        } else {
            return true;
        }
    }
Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:51.