rubensa.eu.org algo en qué pensar...

El contenido de este sitio es de libre distribución, siempre que se cite la fuente original. No está permitido su uso comercial sin previo aviso y si lo modifica o distribuye debe mantener esta licencia.

Inicio de sesión de usuario

8. Tables (tablas)

Echo2 proporciona un componente Table (tabla) basado en modelos y que se utiliza para mostrar información tabular.  La información mostrada en un Table se controla externamente por un TableModel (modelo de tabla).

TableModels (modelos de tabla)

Un TableModel es un interfaz que representa los datos mostrados en un Table.  El interfaz del modelo proporciona métodos para consultar el número de fila y columnas de un conjunto de datos, y para determinar el valor de cada coordenada columna/fila.  Además, la interfaz TableModel proporciona un mecanismo para registrar TableModelListeners, a los que el TableModel notificará cuando se modifican sus datos.

AbstractTableModel:  En el API de Echo2 se incluye una implementación base AbstractTableMode de la clase TableModel que proporciona características como la gestión de TableModelListener.  Los implementadores del modelo que se deriven de AbstractTableModel solamente tendrán que implementar tres métodos adicionales, getValueAt() usado para obtener los valores de celdas individuales, y getColumnCount() y getRowCount() que, respectivamente, especifican el número de columnas y filas en el Table.

DefaultTableModel:  Echo2 también proporciona la clase DefaultTableModel que almacena datos de tabla como un array bi-dimensional.  El DefaultTableModel proporcina métodos adicionales para insertar y borrar filas, y lanzará automáticamente TableModelEvents cuando se manipulan los datos.

Ejemplo:  La siguiente implementación de AbstractTableModel generará una tabla de multiplicar de 12x12:

class MultiplicationTableModel extends AbstractTableModel {
public int getColumnCount() {
return 12;
}
public int getRowCount() {
return 12;
}
public Object getValueAt(int column, int row) {
return new Integer((column + 1) * (row + 1));
}
}

TableCellRenderers (pintadores de celda)

Un TableModel solamente representa los datos contenido en un Table.  Estos datos se pueden representar en términos de cadenas de texto, enteros, valores booleanos, u objetos Java arbitrarios.  El componente Table en algún momento tendrá que mostrar estos valores en forma de Components.  Esta capacidad es llevada a cabo usando un TableCellRenderer.

Un TableCellRenderer se usa para traducir un objeto Java arbitrario a un Component.  Se incluye una implementación por defecto mediante la clase DefaultTableCellRenderer, que simplemente pinta cualquier valor de una celda de una tabla como un componente Label de Echo2 que contendrá el valor de toString() del objeto Java contenido en el TableModel.

Puedes crear un TableCellRenderer para representar valores del modelo como cualquier Component deseado.  Podrías crear un pintador pesonalizado para representar ciertas casillas como Labels que contuviesen ImageRefecences.  Si se usase un Table para editar información, un TableCellRenderer podría pintar TextFields para los valores String y CheckBoxes para los valores Boolean.

Cualquier Component generado por un TableCellRenderer se añadirá como un hijo del componente Table.  Se eliminarán y remplazarán automáticamente cuando se modifique el TableModel.  El componente Table es el responsable de gestionar a sus hijos; los hijos de un Table nunca se deberían añadir o eliminar manualmente.

LayoutData:  La implementación de la estructura TableLayoutData sirve para proporcionar un modo de personalizar la apariencia de las celdas de la tabla ocupadas por los Components pintados.  El TableLayoutData pemite fijar la alineación, color e imagen de fondo, y los márgenes interiores de cada una de las celdas de la tabla.

Ejemplo:  El siguiente código muestra un TableCellRenderer que se podría usar con el TableModel del ejemplo anterior.
class ValueColorRenderer implements TableCellRenderer {
public Component getTableCellRendererComponent(Table table, Object value, int column, int row) {
Label label = new Label(value.toString());
TableLayoutData layoutData = new TableLayoutData();
int colorValue = 255 - ((Integer) value).intValue();
layoutData.setBackground( new Color(colorValue, colorValue, 255));
label.setLayoutData(layoutData);
return label;
}
}

Selección

Un Table puede configurarse para que soporte la selección de filas.  Como el componente ListBox, los Table se pueden configurar para selección de una sola fila o de múltiples filas a la vez.  De nuevo como ListBox, un Table usa un ListSelectionModel para describir su estado actual de selección.

Para poder usar la selección, un Table debe fijar su propiedad selectionEnabled a true invocando el método Table.setSelectionEnabled().  Además se incluyen varios métodos para configurar el estilo del elemento seleccionado, tales como Table.setSelectionBackground().

Efectos Rollover (pasar por encima):  Las tablas proporcionan la capacidad de fijar efectos rollover tales como remarcar filas de un Table cuando el cursos pasa sobre ellas.

Un Ejemplo

El siguiente código de ejemplo crea un Table usando como su modelo el TableModel del código de ejemplo anterior.  Además se configura el TableCellRenderer mencionado posteriormente para pintar las celdas del Table:

 

TableModel model = new MultiplicationTableModel();
Table table = new Table(model);
table.setDefaultRenderer(Object.class, new ValueColorRenderer());


Tabla de Multiplicar

Powered by Drupal - Design by rubensa based on abac theme by Artinet