Download JTable y bases de datos Se puede utilizar a la clase JTable para

Document related concepts
no text concepts found
Transcript
Java
IES Ilíberis
JTable y bases de datos
Se puede utilizar a la clase JTable para mostrar datos provenientes de una consulta a
una base de datos. Para ello se necesita implementar una clase modelo de tabla,
TableModel.
La interfaz TableModel define los siguientes métodos:
public int getRowCount()
Debe devolver el número de filas.
public int getColumnCount()
Debe devolver el número de columnas.
public String getColumnName(int columnIndex)
Debe devolver el nombre de la columna con el índice especificado.
public Class getColumnClass(int columnIndex)
Debe devolver la clase de la columna con el índice especificado.
public boolean isCellEditable(int rowIndex,int columnIndex)
Debe indicar si las celda con los índices especificados es editable.
public Object getValueAt(int rowIndex,int columnIndex)
Debe devolver el valor de la posición especificada.
public void setValueAt(Object aValue,int rowIndex,int columnIndex)
Debe establecer el valor de la posición especificada.
public void addTableModelListener(TableModelListener l)
Debe añadir una clase de escucha que se dispare cada vez que se modifica un valor de la
tabla.
public void removeTableModelListener(TableModelListener l)
Debe suprimir una clase de escucha que se dispare cada vez que se modifica un valor de
la tabla.
Para implementar esta clase se puede optar por implementarla de forma genérica, es
decir, que sirva para cualquier consulta. Para ello será necesario acudir a los metadatos
de los conjuntos de registros. Los metadatos no son más que información acerca de los
campos devueltos por una consulta.
Pasemos a la implementación de la clase ModeloTabla:
import javax.swing.table.*;
import javax.swing.event.*;
import java.sql.*;
public class ModeloTabla implements TableModel
{
ResultSet r;
ResultSetMetaData md;
int columnas,filas;
//constructor
//se le pasa el ResultSet para obtener el modelo de tabla
Administración de sistemas informáticos
Página 1
Java
IES Ilíberis
public ModeloTabla(ResultSet r) throws SQLException
{
this.r = r;
this.md = r.getMetaData();
columnas = md.getColumnCount();
r.last();
filas = r.getRow();
}
//devuelve el número de filas
public int getRowCount()
{
return filas;
}
//devuelve el número de columnas
public int getColumnCount()
{
return columnas;
}
//devuelve el nombre de la columna
//la información de la columna 0 en los metadatos está en la 1
//y así sucesivamente
public String getColumnName(int columnIndex)
{
try
{
return md.getColumnLabel(columnIndex+1);
}
catch (SQLException e)
{
return e.toString();
}
}
//el tipo de todas las columnas es String
public Class getColumnClass(int columnIndex)
{
return String.class;
}
//no es editable
public boolean isCellEditable(int rowIndex,int columnIndex)
{
return false;
}
//obtener celda (i,j)->(i+1,j+1)
public Object getValueAt(int rowIndex,int columnIndex)
{
try
{
r.absolute(rowIndex+1);
Object o = r.getObject(columnIndex+1);
if (o == null)
return "null";
else
return o.toString();
}
catch (SQLException e)
Administración de sistemas informáticos
Página 2
Java
IES Ilíberis
{
}
}
return e.toString();
//no se implemanta ningún método más ya que no es modificable
public void setValueAt(Object aValue,int rowIndex,int columnIndex)
{
}
public void addTableModelListener(TableModelListener l)
{
}
}
public void removeTableModelListener(TableModelListener l)
{
}
Una vez implementada esta clase la carga de datos de una consulta en una JTable se
realiza con un sólo método:
public class UsaModeloTabla extends JFrame
{
ModeloTabla modelo;
JTable tabla;
ResultSet r;
Administración de sistemas informáticos
Página 3
Java
IES Ilíberis
public UsaModeloTabla ()
{
super("Consultas");
//cargar driver, establecer conexión, crear ResultSet r
...
try
{
...
ResultSet r = s.executeQuery("select * from datos;");
modelo=new ModeloTabla(r);
}
catch (Exception e){...}
tabla = new JTable();
try
{
tabla.setModel(modelo);
}
}
...
}
catch (Exception ex){...}
Container c = jf.getContentPane();
c.add(new JScrollPane(tabla));
setVisible(true);
Administración de sistemas informáticos
Página 4
Related documents