Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ejemplos;
import java.awt.Color;
import java.awt.Component;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
/**
* Ejemplo de uso del TableModelListener.
* Una tabla de 3 filas y 3 columnas con numeros, de forma que la
ultima columna es la suma
* de las dos columnas anteriores y la ultima fila es la suma de las
dos filas anteriores.
* Solo son editables las celdas que no son de la ultima fila ni de
la ultima columna.
* Se usa TableModelListener para actualizar las sumas cuando el
usuario modifica el valor de
* alguna de las celdas.
*
* @author Chuidiang
*/
public class EjemploTableModelListener {
public EjemploTableModelListener() {
JTable tabla = creaVentanaConTabla();
anadeListenerAlModelo(tabla);
}
/**
* Se añade el listener al modelo y se llama a actualizaSumas(),
que es el método
* encargado de actualizar las sumas de las celdas no editables.
*/
private void anadeListenerAlModelo(JTable tabla) {
tabla.getModel().addTableModelListener(new
TableModelListener() {
@Override
public void tableChanged(TableModelEvent evento) {
actualizaSumas(evento);
}
});
}
/**
* Cuando cambie el valor de alguna celda, el JTable avisará a
los listener y
* nuestro listener llamará a este método.
*/
protected void actualizaSumas(TableModelEvent evento) {
// Solo se trata el evento UPDATE, correspondiente al cambio
de valor
// de una celda.
if (evento.getType() == TableModelEvent.UPDATE) {
try {
// Se actualiza la suma en la ultima columna de la
fila que ha
// cambiado.
double valorPrimeraColumna = ((Number)
modelo.getValueAt(fila,
0)).doubleValue();
double valorSegundaColumna = ((Number)
modelo.getValueAt(fila,
1)).doubleValue();
modelo.setValueAt(valorPrimeraColumna +
valorSegundaColumna,
fila, 2);
} catch (NullPointerException e) {
// La celda que ha cambiado esta vacia.
}
}
/**
* Nuestro modelo de datos.
* @author Chuidiang
*/
class MiModelo extends DefaultTableModel {
/**
* Se carga con tres filas y tres columnas con numeros.
*/
public MiModelo() {
super(new Object[][] { { 1, 1, 2 }, { 1, 1, 2 }, { 2, 2,
4 } },
new String[] { "A", "B", "C" });
}
/**
* El contenido de las celdas sera Double.
*/
@Override
public Class<?> getColumnClass(int arg0) {
return Double.class;
}
/**
* Se hacen no editables la ultima fila y columna.
* Es decir, es editable si no es la fila 2 ni la columna 2.
*/
@Override
public boolean isCellEditable(int fila, int columna) {
return fila < 2 && columna < 2;
}
}
/**
* Un Render para mostrar de un color distinto las celdas no
editables.
*
* @author Chuidiang
*/
class MiRender extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus,
int row,
int column) {
import java.awt.Color;
import java.awt.Component;
import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.event.TableModelEvent;
import javax.swing.event.TableModelListener;
import javax.swing.table.DefaultTableCellRenderer;
import javax.swing.table.DefaultTableModel;
import javax.swing.table.TableModel;
/**
* Ejemplo de uso del TableModelListener.
* Una tabla de 3 filas y 3 columnas con numeros, de forma que la
ultima columna es la suma
* de las dos columnas anteriores y la ultima fila es la suma de las
dos filas anteriores.
* Solo son editables las celdas que no son de la ultima fila ni de
la ultima columna.
* Se usa TableModelListener para actualizar las sumas cuando el
usuario modifica el valor de
* alguna de las celdas.
*
* @author Chuidiang
*/
public class EjemploTableModelListener {
public EjemploTableModelListener() {
JTable tabla = creaVentanaConTabla();
anadeListenerAlModelo(tabla);
}
/**
* Se añade el listener al modelo y se llama a actualizaSumas(),
que es el método
* encargado de actualizar las sumas de las celdas no editables.
*/
private void anadeListenerAlModelo(JTable tabla) {
tabla.getModel().addTableModelListener(new
TableModelListener() {
@Override
public void tableChanged(TableModelEvent evento) {
actualizaSumas(evento);
}
});
}
/**
* Cuando cambie el valor de alguna celda, el JTable avisará a
los listener y
* nuestro listener llamará a este método.
*/
protected void actualizaSumas(TableModelEvent evento) {
// Solo se trata el evento UPDATE, correspondiente al cambio
de valor
// de una celda.
if (evento.getType() == TableModelEvent.UPDATE) {
try {
// Se actualiza la suma en la ultima columna de la
fila que ha
// cambiado.
double valorPrimeraColumna = ((Number)
modelo.getValueAt(fila,
0)).doubleValue();
double valorSegundaColumna = ((Number)
modelo.getValueAt(fila,
1)).doubleValue();
modelo.setValueAt(valorPrimeraColumna +
valorSegundaColumna,
fila, 2);
/**
* Nuestro modelo de datos.
* @author Chuidiang
*/
class MiModelo extends DefaultTableModel {
/**
* Se carga con tres filas y tres columnas con numeros.
*/
public MiModelo() {
super(new Object[][] { { 1, 1, 2 }, { 1, 1, 2 }, { 2, 2,
4 } },
new String[] { "A", "B", "C" });
}
/**
* El contenido de las celdas sera Double.
*/
@Override
public Class<?> getColumnClass(int arg0) {
return Double.class;
}
/**
* Se hacen no editables la ultima fila y columna.
* Es decir, es editable si no es la fila 2 ni la columna 2.
*/
@Override
public boolean isCellEditable(int fila, int columna) {
return fila < 2 && columna < 2;
}
}
/**
* Un Render para mostrar de un color distinto las celdas no
editables.
*
* @author Chuidiang
*/
class MiRender extends DefaultTableCellRenderer {
@Override
public Component getTableCellRendererComponent(JTable table,
Object value, boolean isSelected, boolean hasFocus,
int row,
int column) {