Ver Mensaje Individual
  #2 (permalink)  
Antiguo 17/10/2008, 02:51
xayide
 
Fecha de Ingreso: febrero-2006
Mensajes: 174
Antigüedad: 18 años, 10 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!