Sei sulla pagina 1di 32

Crear una tabla simple

Prueba esto:
1. Haga clic en el botn Iniciar para
ejecutar SimpleTableDemo usando Java Web Start ( descargar el
JDK 7 o posterior ). O, para compilar y ejecutar el ejemplo usted
mismo, consulte el ndice de ejemplo .

2. Haga clic en la celda que contiene "Snowboarding".
Se selecciona la primera fila entera, lo que indica que se ha
seleccionado datos de Kathy Smith. Una caracterstica especial indica
que la celda "Snowboarding" es editable. En general, se empieza a
editar una celda de texto haciendo doble clic en l.
3. Coloque el cursor sobre "Nombre". Ahora presione el botn del ratn
y arrastre hacia la derecha.
Como puede ver, los usuarios pueden reorganizar las columnas en las
tablas.
4. Coloque el cursor justo a la derecha de un encabezado de
columna. Ahora pulse el botn del ratn y arrastre hacia la derecha o
hacia la izquierda.
La columna cambia de tamao, y las otras columnas ajustar para llenar
el espacio restante.
5. Cambiar el tamao de la ventana que contiene la tabla de manera que
es ms grande de lo necesario para mostrar toda la tabla.
Todas las celdas de la tabla se hacen ms anchas, expandindose para
llenar el espacio horizontal extra.

La tabla de la SimpleTableDemo.java declara los nombres de las columnas en una
matriz de String:
String [] = {columnnames "Nombre",
"Last Name",
"Sport",
"# De aos",
"Vegetariano"};
Se inicializa Su datos y se almacena en una matriz de objetos de dos
dimensiones:
Object [] [] data = {
{"Kathy", "Smith",
"Snowboard", new Integer (5), new Boolean (false)},
{"Juan", "Prez",
"Remo", new Integer (3), new Boolean (true)},
{"Sue", "Negro",
"Knitting", new Integer (2), new Boolean (false)},
{"Jane", "blanco",
"Velocidad de lectura", new Integer (20), new Boolean (true)},
{"Joe", "Brown",
"Pool", new Integer (10), new Boolean (false)}
};
A continuacin, la tabla se construye utilizando estos datos y columnNames:
Tabla JTable = JTable nuevas (datos, columnNames);
Hay dos JTable constructores que aceptan datos directamente
( SimpleTableDemo utiliza la primera):
JTable (Object [] [] RowData, Object [] columnNames)
JTable (Vector RowData, Vector columnNames)
La ventaja de estos constructores es que son fciles de usar. Sin embargo, estos
constructores tambin tienen desventajas:
Ellos hacen automticamente cada clula editable.
Ellos tratan a todos los tipos de datos de la misma (como cadenas). Por
ejemplo, si una columna de la tabla tiene booleanas de datos, la tabla
puede mostrar los datos en una casilla de verificacin. Sin embargo, si se
utiliza cualquiera de los dos JTable constructores enumerados
anteriormente, el booleano de datos se muestra como una cadena. Usted
puede ver la diferencia en el Vegetariana columna de la figura anterior.
Requieren que se pone todos los datos de la tabla en una matriz o vector,
que puede no ser apropiado para algunos datos. Por ejemplo, si va a crear
instancias de un conjunto de objetos de una base de datos, es posible que
desee consultar los objetos directamente por sus valores, en lugar de copiar
todos sus valores en una matriz o vector.
Si usted desea conseguir alrededor de estas restricciones, debe implementar su
propio modelo de tabla, como se describe en Creacin de una tabla de modelo .
Agregar una tabla a un contenedor
Aqu est el cdigo tpico para la creacin de un panel de desplazamiento que
sirve como un contenedor para una tabla:
JScrollPane scrollPane = new JScrollPane (tabla);
table.setFillsViewportHeight (true);
Las dos lneas en este fragmento de hacer lo siguiente:
El JScrollPane constructor se invoca con un argumento que se refiere al
objeto de tabla. Esto crea un panel de desplazamiento como un contenedor
para la mesa; la mesa se aade automticamente al contenedor.
JTable.setFillsViewportHeight se invoca para establecer
el fillsViewportHeight propiedad. Cuando esta propiedad es verdadera la
tabla utiliza toda la altura del contenedor, aunque la tabla no tiene
suficientes filas para utilizar todo el espacio vertical. Esto hace que sea
ms fcil utilizar la mesa como un destino de arrastrar y soltar.
El panel de desplazamiento coloca automticamente el encabezado de la tabla en
la parte superior de la ventana grfica. Los nombres de columna permanecen
visibles en la parte superior del rea de visualizacin cuando se recorre la tabla
de datos.
Si est utilizando una tabla sin un panel de desplazamiento, entonces usted debe
obtener el componente de cabecera de la tabla y coloque usted mismo. Por
ejemplo:
container.setLayout (nueva BorderLayout ());
contenedor.add (table.getTableHeader (), BorderLayout.PAGE_START);
contenedor.add (mesa, BorderLayout.CENTER);
Configurando y Cambiando los anchos de columna
Por defecto, todas las columnas de una tabla empiezan con la misma anchura, y
las columnas se llenan automticamente todo el ancho de la tabla. Cuando la
tabla se hace ms ancho o ms estrecho (lo que podra suceder cuando el usuario
cambia el tamao de la ventana que contiene la tabla), todos los anchos de
columna cambian adecuadamente.
Cuando el usuario cambia el tamao de una columna arrastrando el borde
derecho, y luego o bien otras columnas deben cambiar el tamao, o el tamao de
la tabla deben cambiar. Por defecto, el tamao de la tabla sigue siendo el mismo,
y todas las columnas a la derecha del punto de arrastre redimensionar para
acomodar el espacio de creacin o la supresin de la columna a la izquierda del
punto de arrastre.
Para personalizar los anchos de columna iniciales, puede
invocar setPreferredWidth en cada una de las columnas de sus tablas. Esto
establece tanto las anchuras preferidas de las columnas y sus anchuras relativas
aproximadas. Por ejemplo, aadir el siguiente cdigo para SimpleTableDemo hace
su tercera columna ms grande que las otras columnas:
Columna TableColumn = null;
for (int i = 0; i <5; i + +) {
columna = table.getColumnModel () GetColumn (i).;
if (i == 2) {
column.setPreferredWidth (100); / / Tercera columna es ms grande
} Else {
column.setPreferredWidth (50);
}
}
Como muestra el cdigo anterior, cada columna de una tabla se representa
mediante un TableColumn objeto. TableColumn suministra getter y setter mtodos
para el mnimo, preferido, y anchuras mximas de una columna, as como un
mtodo para conseguir la anchura actual. Para un ejemplo de configuracin de
ancho de las celdas en base a una aproximacin del espacio necesario para
extraer el contenido de las clulas, ver el initColumnSizes mtodo
en TableRenderDemo.java .
Cuando el usuario cambia el tamao de las columnas explcitamente, de las
columnas preferidas anchos se establecen de tal manera que los tamaos
especificados por el usuario se convierten en las columnas
"nuevas corrientes anchos. Sin embargo, cuando la propia tabla se cambia el
tamao - tpicamente porque la ventana ha cambiado el tamao de -; anchuras
preferidas de las columnas no cambian. En lugar de ello, las anchuras preferidas
existentes se utilizan para calcular nuevos anchos de columna para llenar el
espacio disponible.
Usted puede cambiar el comportamiento de cambio de tamao de una tabla
mediante la invocacin setAutoResizeMode .
Seleccin del usuario
En su configuracin predeterminada, una mesa soporta una seleccin que
consiste en una o ms filas. El usuario puede seleccionar un rango contiguo de
filas o un conjunto arbitrario de filas. La ltima celda que el usuario indique
obtiene una indicacin especial; en el metal vea y se sienta, la clula se
expone. Esta clula es conocida como laseleccin de derivacin ; a veces se le
llama "la celda con el enfoque" o "la celda actual".
El usuario utiliza el ratn y / o el teclado para hacer selecciones, tal como se
describe en la tabla siguiente:
Operacin
Action
Mouse
Accin Teclado
Seleccione una
sola fila.
Haga clic en. Flecha arriba o Flecha abajo.
Ampliar la
seleccin contigua.
Mays-clic o
arrastre
sobre las
filas.
Mays + Flecha arriba o Mays + Flecha
abajo.
Aadir fila para la
seleccin de filas
seleccin /
activacin.
Control-
Click
Mueve la seleccin de plomo con Control +
Flecha arriba o Control + Flecha abajo, a
continuacin, utilizar la barra de espacio para
agregar a la seleccin o Control-Barra
espaciadora para alternar la seleccin de filas.
Para ver cmo funcionan las selecciones, haga clic en el botn Iniciar para
ejecutar TableSelectionDemo usando Java Web Start ( descargar el JDK 7 o
posterior ). O, para compilar y ejecutar el ejemplo usted mismo, consulte
el ndice de ejemplo .


Este programa de ejemplo presenta la mesa familiar, y permite al usuario
manipular ciertas opciones JTable. Tambin hay un panel de texto que registra
los eventos de seleccin.
En la pantalla de abajo, un usuario ha ejecutado el programa, hacer clic en la
primera fila, a continuacin, hacer clic en el control-en la tercera fila. Observe el
contorno alrededor de la ltima celda hecho clic; es as como el aspecto y la
sensacin del metal destaca la seleccin de derivacin.

En "Modo Seleccin" hay un conjunto de botones de radio. Haga clic en la
etiqueta "Seleccin Individual". Ahora slo se puede seleccionar una fila a la
vez. Si hace clic en el botn de opcin "Single intervalo de seleccin", se puede
seleccionar un conjunto de filas que deben ser contiguos.
Todos los botones de radio en "Modo Seleccin"
invocan JTable.setSelectionMode . Este mtodo toma un nico argumento, que
debe ser una de las siguientes constantes definidas
en javax.swing.ListSelectionModel : MULTIPLE_INTERVAL_SELECTION , SINGLE_INT
ERVAL_SELECTION y SINGLE_SELECTION .
Volviendo a TableSelectionDemo , observe las tres casillas de opcin bajo
"Opciones de seleccin." Cada uno de casilla controla el estado de
un booleano variable ligada definido por JTable :
"Seleccin Fila" controla rowSelectionAllowed que tiene mtodo
setter setRowSelectionAllowed y mtodo
getter getRowSelectionAllowed . Cuando esta propiedad enlazada
es cierto (y el columnSelectionAllowed propiedad es falsa ), el usuario
puede seleccionar en la fila.
"Seleccin de columnas" controla columnSelectionAllowed que tiene
mtodo setter setColumnSelectionAllowed y mtodo
gettergetColumnSelectionAllowed . Cuando esta propiedad enlazada
es cierto (y el rowSelectionAllowed propiedad enlazada es falsa ), el
usuario puede seleccionar en la columna.
"Seleccin de la clula" controla cellSelectionEnabled , que tiene mtodo
setter setCellSelectionEnabled y mtodo
getter getCellSelectionEnabled .Cuando esta propiedad enlazada
es cierto , el usuario puede seleccionar una sola celda o un bloque
rectangular de celdas.

NOTA: JTable utiliza un concepto muy simple de seleccin, gestiona como una
interseccin de filas y columnas. No fue diseado para manejar selecciones de
celdas totalmente independientes.

Si desactiva las tres casillas de verificacin (ajuste las tres propiedades unidas
a falsa ), no hay ninguna seleccin; slo se muestra la seleccin de derivacin.
Usted puede notar que la opcin "Seleccin de la clula" se desactiva en el modo
de seleccin de intervalo mltiple. Esto se debe a la seleccin de celda no se
admite en este modo en la demo. Puede especificar la seleccin de celda en el
modo de seleccin de intervalo mltiple, pero el resultado es una mesa que no
produce selecciones tiles.
Tambin se puede notar que el cambio de cualquiera de las tres opciones de
seleccin puede afectar a los dems. Esto se debe a que permite tanto la seleccin
de la fila y la columna de seleccin es exactamente el mismo que permite la
seleccin de clulas. JTable actualiza automticamente las tres variables ligadas
como sea necesario para mantenerlos constantes.

NOTA: Ajuste cellSelectionEnabled a un valor tiene el mismo efecto que
establecer tanto rowSelectionEnabled y columnSelectionEnabled a ese
valor. Ajuste de los dos rowSelectionEnabled y columnSelectionEnabled a un
valor tiene el mismo efecto que el establecimiento cellSelectionEnabled a ese
valor. Ajuste rowSelectionEnabled y columnSelectionEnabled a diferentes valores
tiene el mismo efecto que el establecimiento cellSelectionEnableda falso .

Para recuperar la seleccin actual, utilice JTable.getSelectedRows que devuelve
un array de ndices de fila y JTable.getSelectedColumns que devuelve un array
de ndices de columna. Para recuperar las coordenadas de la seleccin de
derivacin, consulte los modelos de seleccin para la tabla en s y para el modelo
de columna de la tabla. El siguiente cdigo da formato a una cadena que contiene
la fila y columna de la seleccin de derivacin:
String.format ("Seleccin de derivaciones:.% D,% d",
table.getSelectionModel (). getLeadSelectionIndex (),
. table.getColumnModel () getSelectionModel () getLeadSelectionIndex
()).;
Selecciones del usuario generan una serie de eventos. Para obtener informacin
sobre estos, consulte Cmo escribir un Oyente de List Selection en el Oyentes
Escritura Eventoleccin.

NOTA: Datos para seleccin en realidad describe las clulas seleccionadas en la
"vista" (datos de la tabla tal y como aparece despus de cualquier ordenacin o
filtrado), ms que en el modelo de tabla. Esta distincin no tiene importancia a
menos que los datos consultados se ha reorganizado por ordenar, filtrar o
manipulacin del usuario de las columnas. En ese caso, debe convertir la
seleccin coordenadas utilizando los mtodos de conversin descritos en Ordenar
y filtrar .

Creacin de una tabla de modelo
Cada objeto de tabla utiliza un objeto de modelo de tabla para gestionar los datos
de las tablas reales. Un objeto modelo de tabla debe implementar
la TableModel interfaz.Si el programador no proporciona un objeto de modelo de
tabla, JTable crea automticamente una instancia de DefaultTableModel . Esta
relacin se ilustra a continuacin.

El JTable constructor utilizado por SimpleTableDemo crea su modelo de tabla con
cdigo como este:
nueva AbstractTableModel () {
public String getColumnName (int col) {
. volver columnNames [col] toString ();
}
int getRowCount pblica () {return rowData.length; }
int getColumnCount pblica () {return columnNames.length; }
public Object getValueAt (int fila, int col) {
volver RowData [fila] [columna];
}
isCellEditable public boolean (int fila, int col)
{Return true; }
public void setValueAt (Object value, int fila, int col) {
RowData [fila] [columna] = valor;
fireTableCellUpdated (fila, col);
}
}
A medida que el cdigo anterior muestra, la implementacin de un modelo de
mesa puede ser simple. En general, se implementa el modelo de su mesa en una
subclase de laAbstractTableModel clase.
Su modelo podra mantener sus datos en una matriz, vector o mapa hash, o puede
obtener los datos de una fuente externa, como una base de datos. Incluso podra
generar los datos en tiempo de ejecucin.
Esta tabla es diferente de la SimpleTableDemo tabla de las siguientes maneras:
TableDemo "modelo de tabla personalizado s, a pesar de que es sencillo, se
puede determinar fcilmente el tipo de los datos, ayudando
al JTable mostrar los datos en el mejor formato. SimpleTableDemo "modelo
de tabla creada automticamente s, por su parte, no sabe que el # de aos
a la columna contiene los nmeros (que por lo general debe estar alineado
a la derecha y tener un formato en particular). Asimismo, no se sabe que
el Vegetariana columna contiene valores lgicos, que pueden estar
representados por casillas de verificacin.
El modelo de tabla personalizado implementado en TableDemo no le
permite editar las columnas de nombre; lo hace, sin embargo, le permite
editar las otras columnas.En SimpleTableDemo , todas las clulas se pueden
modificar.
Vase a continuacin el cdigo tomado de TableDemo.java que es diferente de
la SimpleTableDemo.java . La fuente en negrita indica el cdigo que hace que el
modelo de esta tabla diferente del modelo de tabla definida
automticamente SimpleTableDemo .
TableDemo pblica () {
...
Tabla JTable = new JTable (nueva MyTableModel ());
...
}

clase MyTableModel extiende AbstractTableModel {
private String [] columnNames = ... / / igual que antes ...
private Object [] [] data = ... / / igual que antes ...

public int getColumnCount () {
volver columnNames.length;
}

public int getRowCount () {
volver data.length;
}

public String getColumnName (int col) {
volver columnNames [col];
}

public Object getValueAt (int fila, int col) {
la informacin sobre rendimiento [fila] [columna];
}

Clase pblica getColumnClass (int c) {
volver getValueAt (0, c) getClass ().;
}

/ *
* No es necesario aplicar este mtodo a menos de su mesa
* Editable.
* /
public boolean isCellEditable (int fila, int col) {
/ / Tenga en cuenta que la direccin de datos / clula es
constante,
/ / No importa donde aparece en la pantalla del celular.
if (col <2) {
return false;
} Else {
return true;
}
}

/ *
* No es necesario aplicar este mtodo a menos de su mesa
* Los datos pueden cambiar.
* /
public void setValueAt (Object value, int fila, int col) {
datos [fila] [columna] = valor;
fireTableCellUpdated (fila, col);
}
...
}
Escuchar los Cambios de datos
Un modelo de tabla puede tener un conjunto de oyentes que se notifica siempre
que los cambios en los datos de la tabla. Los oyentes son instancias
de TableModelListener. En el siguiente cdigo de ejemplo, SimpleTableDemo se
ampla para incluir un oyente. Nuevo cdigo est en negrita.
javax.swing.event import *.;
javax.swing.table.TableModel importacin;

public class SimpleTableDemo ... implementa TableModelListener {
...
SimpleTableDemo pblica () {
...
. table.getModel () addTableModelListener (este);
...
}

public void tableChanged (TableModelEvent e) {
int fila = e.getFirstRow ();
columna int = e.getColumn ();
Modelo TableModel = (TableModel) e.getSource ();
Cadena columnName = model.getColumnName (columna);
Datos de objeto = model.getValueAt (fila, columna);

... / / Hacer algo con los datos ...
}
...
}
Disparando cambio de datos Eventos
Con el fin de despedir a los eventos de cambio de datos del modelo de mesa tiene
que saber cmo construir un TableModelEvent objeto. Esto puede ser un
procedimiento complejo, pero ya est implementado
en DefaultTableModel . Usted puede permitir JTable utilizar su instancia
predeterminada de DefaultTableModel , o crear su propia subclase personalizada
de DefaultTableModel .
Si DefaultTableModel no es una clase base adecuada para la clase del modelo de
tabla personalizado, considere la subclasificacin AbstractTableModel . Esta clase
implementa un marco sencillo para construir TableModelEvent objetos. Su clase
personalizada simplemente necesita invocar una de las
siguientes AbstractTableModelmtodos cada dato horario se cambia por una
fuente externa.
Mtodo Cambio
fireTableCellUpdated
Actualizacin de celda especificada.
fireTableRowsUpdated
Actualizacin de las filas especificadas
fireTableDataChanged
Actualizacin de toda la tabla (slo datos).
fireTableRowsInserted
Las nuevas filas insertadas.
fireTableRowsDeleted
Filas existentes eliminados
fireTableStructureChanged Invalida toda la tabla, los datos y la estructura.
Conceptos: Editores y Renderizadores
Antes de pasar a las prximas tareas, es necesario entender cmo las tablas se
basan sus celdas. Se podra esperar que cada celda de una tabla sea un
componente. Sin embargo, por razones de rendimiento, mesas de Swing se
implementan de forma diferente.
En lugar de ello, un solo procesador de celdas se utiliza generalmente para
extraer todas las clulas que contienen el mismo tipo de datos. Usted puede
pensar en el procesador como un sello de tinta configurable que la tabla utiliza
para estampar los datos con el formato correcto en cada clula. Cuando el usuario
empieza a editar los datos de una celda, un editor de celdas se hace cargo de la
clula, el control de comportamiento de edicin de la celda.
Por ejemplo, cada clula en el # de aos a la columna
en TableDemo contiene Nmero de datos - especficamente, un Entero objeto. Por
defecto, el procesador de celdas para un nmero de columna que contienen utiliza
un solo JLabel instancia para dibujar los nmeros apropiados, alineado a la
derecha-, en celdas de la columna. Si el usuario inicia la edicin de una de las
celdas, el editor de celda predeterminado utiliza un derecho
alineado JTextField para controlar la edicin de la celda.
Para elegir el procesador que muestra las celdas de una columna, una tabla
primero determina si se ha especificado un procesador para esa columna en
particular. Si no lo hizo, entonces la tabla invoca el modelo de
tabla getColumnClass mtodo, que obtiene el tipo de datos de celdas de la
columna. A continuacin, la tabla se compara el tipo de datos de la columna con
una lista de tipos de datos para los que se registran los procesadores de
celdas. Esta lista se inicializa la tabla, pero se puede agregar a l o
cambiarlo.Actualmente, las tablas ponen los siguientes tipos de datos en la lista:
Boolean - dictada con una casilla de verificacin.
Nmero - dictada por una etiqueta alineado a la derecha.
Doble , Float - igual nmero , pero la traduccin a objetos a texto es
realizada por un NumberFormat instancia (utilizando el formato de nmero
predeterminado para la localizacin actual).
Fecha - dictada por una etiqueta, con la traduccin a objetos a texto
realizado por un DateFormat instancia (utilizando un estilo corto de la
fecha y la hora).
ImageIcon , Icon - dictada por una etiqueta centrada.
Objeto - dictada por una etiqueta que muestra el valor de cadena del
objeto.
Editores de celdas se eligen utilizando un algoritmo similar.
Recuerde que si usted deja una mesa a crear su propio modelo, que
utiliza objetos como el tipo de cada columna. Para especificar los tipos de
columna ms precisos, el modelo de tabla debe definir el getColumnClass mtodo
apropiadamente, como lo demuestra TableDemo.java .
Tenga en cuenta que aunque los recicladores determinan cmo cada encabezado
de celda o la columna se ve y se puede especificar el texto punta de la
herramienta, un procesador no maneja eventos. Si usted necesita para recoger a
los eventos que tienen lugar dentro de una tabla, la tcnica se utiliza vara segn
el tipo de evento que usted est interesado en:
Situacin Cmo conseguir Eventos
Para detectar
eventos de una
celda que se est
editando ...
Utilice el editor de celda (o registrar un detector en el editor
de celdas).
Para detectar fila /
columna
selecciones /
celulares y
deselecciones ...
Use un agente de escucha de seleccin como se describe
en Detectar Selecciones de usuario .
Para detectar
eventos de ratn en
el encabezado de la
columna ...
Registre el tipo apropiado de oyente de mouse en la
tabla JTableHeader objeto. (Ver TableSorter.javapara un
ejemplo.)
Para detectar otros
eventos ...
Registrar el detector apropiado en el JTable objeto.
Las siguientes secciones explican cmo personalizar la visualizacin y la edicin
mediante la especificacin de extraccin de grasas y editores. Puede especificar
procesadores de celdas y editores, ya sea por la columna o tipo de datos.
Usando Renderizadores personalizados
Esta seccin le indica cmo crear y especificar un procesador de celdas. Puede
establecer un procesador de celdas de tipo concreto utilizando
la JTable mtodosetDefaultRenderer . Para especificar que las celdas de una
columna en particular deberan utilizar un procesador, utiliza
el TableColumn mtodo setCellRenderer .Incluso puede especificar un procesador
especfico de las clulas mediante la creacin de un JTable subclase.
Es fcil personalizar el texto o la imagen emitida por el procesador
predeterminado, DefaultTableCellRenderer . Usted acaba de crear una subclase e
implementar elsetValue mtodo para que invoca setText o setIcon con la cadena
o imagen correspondiente. Por ejemplo, aqu es cmo se implementa la fecha
predeterminada de render:
DateRenderer clase esttica se extiende DefaultTableCellRenderer {
DateFormat formateador;
DateRenderer pblica () {super (); }

public void setValue (Object value) {
if (formateador == null) {
formateador = DateFormat.getDateInstance ();
}
setText ((valor == null) "":? formatter.format (valor));
}
}
Si se extiende DefaultTableCellRenderer es insuficiente, se puede construir un
procesador utilizando otro superclase. La forma ms fcil es crear una subclase
de un elemento existente, haciendo que su subclase implementa
la TableCellRenderer interfaz. TableCellRenderer requiere slo un
mtodo:getTableCellRendererComponent . Su puesta en prctica de este mtodo
debe configurar el componente de representacin para reflejar el estado pasado-
en, y luego devolver el componente.
En la instantnea de TableDialogEditDemo , el procesador que se utiliza
para color favorito clulas es una subclase
de JLabel llamado ColorRenderer . Estos son extractos
de ColorRenderer.java que muestran cmo se aplica.
public class ColorRenderer extiende JLabel
implementa TableCellRenderer {
...
ColorRenderer pblico (isBordered boolean) {
this.isBordered = isBordered;
setOpaque (true); / / Debe hacer esto para el fondo en aparecer.
}

pblica Componente getTableCellRendererComponent (
Tabla JTable, el color del objeto,
boolean isSelected, hasFocus boolean,
int fila, columna int) {
Color nuevocolor = (Color) Color;
setBackground (nuevocolor);
si (isBordered) {
si (isSelected) {
...
/ / SelectedBorder es una frontera slida en el color
/ / Table.getSelectionBackground ().
setBorder (selectedBorder);
} Else {
...
/ / UnselectedBorder es una frontera slida en el color
/ / Table.getBackground ().
setBorder (unselectedBorder);
}
}

setToolTipText (...); / / Examen en la siguiente seccin
devuelva este;
}
}
Aqu est el cdigo de TableDialogEditDemo.java que registra
un ColorRenderer instancia que el procesador predeterminado para todos Color
de datos:
table.setDefaultRenderer (Color.class, nuevo ColorRenderer (true));
Para especificar un procesador especfico de la clula, es necesario definir
un JTable subclase que anula el getCellRenderer mtodo. Por ejemplo, el
siguiente cdigo hace que la primera celda de la primera columna de la tabla
utiliza un intrprete personalizado:
TableCellRenderer weirdRenderer = new WeirdRenderer ();
tabla = new JTable (...) {
pblica TableCellRenderer getCellRenderer (int fila, int columna) {
if ((fila == 0) && (columna == 0)) {
volver weirdRenderer;
}
/ / Else ...
volver super.getCellRenderer (fila, columna);
}
};
Especificacin de la informacin de herramientas para clulas
Por defecto, el texto de informacin sobre herramientas que se muestra para una
celda de la tabla se determina por procesador de la clula. Sin embargo, a veces
puede ser ms simple de especificar el texto sobre herramientas
reemplazando JTable aplicacin 's del getToolTipText
(MouseEvent) mtodo. Esta seccin le muestra cmo utilizar ambas tcnicas.
Para agregar una punta de la herramienta a un celular utilizando el procesador,
primero tiene que obtener o crear el procesador de celdas. Entonces, despus de
asegurarse el componente de representacin es un JComponent , invoque
el setToolTipText mtodo en l.
Un ejemplo de configuracin de la informacin de herramientas para que las
clulas se encuentra en TableRenderDemo . Haga clic en el botn Iniciar para
ejecutarlo utilizandoJava Web Start ( descargar el JDK 7 o posterior ). O, para
compilar y ejecutar el ejemplo usted mismo, consulte el ndice de ejemplo .


El cdigo fuente est en TableRenderDemo.java . Aade la informacin de
herramientas a las clulas del Deporte columna con el siguiente cdigo:
/ / Establecer la informacin de herramientas para que las clulas del
deporte.
DefaultTableCellRenderer renderizador =
nueva DefaultTableCellRenderer ();
renderer.setToolTipText ("Haga clic para el cuadro combinado");
sportColumn.setCellRenderer (render);
Aunque el texto punta de la herramienta en el ejemplo anterior es esttico,
tambin se puede poner en prctica la informacin sobre herramientas cuyo texto
cambia dependiendo del estado de la clula o programa. Aqu hay un par de
maneras de hacerlo:
Aadir un poco de cdigo para la implementacin del procesador
del getTableCellRendererComponent mtodo.
Reemplace el JTable mtodo getToolTipText (MouseEvent) .
Un ejemplo de cmo agregar cdigo a un procesador de celdas est
en TableDialogEditDemo . Haga clic en el botn Iniciar para ejecutarlo
utilizando Java Web Start (descargar el JDK 7 o posterior ). O, para compilar
y ejecutar el ejemplo usted mismo, consulte el ndice de ejemplo .


TableDialogEditDemo utiliza un procesador de colores, implementado
en ColorRenderer.java , que establece el texto punta de la herramienta utilizando
el cdigo en negrita en el siguiente fragmento:
public class ColorRenderer extiende JLabel
implementa TableCellRenderer {
...
pblica Componente getTableCellRendererComponent (
Tabla JTable, el color del objeto,
boolean isSelected, hasFocus boolean,
int fila, columna int) {
Color nuevocolor = (Color) Color;
...
setToolTipText ("valor RGB:" + newColor.getRed () + ","
+ NewColor.getGreen () + ","
+ NewColor.getBlue ());
devuelva este;
}
}
He aqu un ejemplo de lo que la punta de la herramienta se ve as:

Usted puede especificar el texto sobre herramientas
reemplazando JTable 's getToolTipText (MouseEvent) mtodo. El
programa TableToolTipsDemo muestra cmo.Haga clic en el botn Iniciar para
ejecutarlo utilizando Java Web Start ( descargar el JDK 7 o posterior ). O,
para compilar y ejecutar el ejemplo usted mismo, consulte elndice de ejemplo .


Las clulas con informacin sobre herramientas se encuentran en
las deportivas y vegetarianos columnas. Aqu est una foto de la punta de la
herramienta:

Aqu est el cdigo de TableToolTipsDemo.java que implementa la informacin
sobre herramientas para las clulas en las deportivas y vegetarianos columnas:
Tabla JTable = new JTable (nueva MyTableModel ()) {
/ / Implementar mesa extremidades de herramienta mvil.
public String getToolTipText (MouseEvent e) {
Punta String = null;
java.awt.Point p = e.getPoint ();
rowIndex int = rowAtPoint (p);
int = colIndex columnAtPoint (p);
int realColumnIndex = convertColumnIndexToModel (colIndex);

if (realColumnIndex == 2) {columna / / Deportes
tip = "deporte favorito de esta persona a"
+ "Participar en decir:"
+ GetValueAt (rowIndex, colIndex);

} Else if (realColumnIndex == 4) {/ columna / Veggie
Modelo TableModel = getModel ();
Cadena firstName = (String) model.getValueAt (rowIndex, 0);
Cadena lastName = (String) model.getValueAt (rowIndex, 1);
Veggie Boolean = (Boolean) model.getValueAt (rowIndex, 4);
if (Boolean.TRUE.equals (vegetarianas)) {
Punta = Nombre + "" + lastName
+ "Es vegetariano";
} Else {
Punta = Nombre + "" + lastName
+ "No es un vegetariano";
}

} Else {/ / otra columna
/ / Se puede omitir esta parte si usted sabe que no lo hace
/ / Tiene ningn renders que suministran su propia
herramienta
/ / tips.
punta = super.getToolTipText (e);
}
volver punta;
}
...
}
El cdigo es bastante sencillo, excepto tal vez para el llamado
a convertColumnIndexToModel . Esa llamada es necesaria porque si el usuario se
mueve alrededor de las columnas, el ndice de la vista para la columna no
coincide con el ndice de la modelo para la columna. Por ejemplo, el usuario
puede arrastrar el Vegetariana columna (que el modelo considera que en el
ndice 4) por lo que se muestra como la primera columna -. en vista de ndice 0
Desde prepareRenderer proporciona el ndice de la vista, es necesario traducir el
ndice miras a un ndice de modelo as que usted puede estar seguro de la
columna destinada ha sido seleccionado.
Especificacin de la informacin de herramientas de encabezados de
columna
Usted puede agregar una punta de la herramienta a un encabezado de columna
mediante el establecimiento de la punta de la herramienta de texto de la
tabla JTableHeader .A menudo, los diferentes ttulos de las columnas de texto
requieren diferentes herramientas. Usted puede cambiar el texto por razones
imperiosas de la cabecera de la tablagetToolTipText mtodo. Alternativamente,
puede invocar TableColumn.setHeaderRenderer proporcionar un representador
personalizado para el encabezado.
Un ejemplo del uso de la misma punta de la herramienta de texto para todos los
encabezados de columna se encuentra en TableSorterDemo.java . As es como se
establece el texto punta de la herramienta:
table.getTableHeader (). setToolTipText (
"Haga clic para ordenar; Mays-clic para ordenar en orden
inverso");
TableToolTipsDemo.java tiene un ejemplo de la aplicacin de la informacin
sobre herramientas de encabezado de columna que vara segn la columna. Si
ejecutaTableToolTipsDemo (haga clic en el botn Iniciar) utilizando Java Web
Start ( descargar el JDK 7 o posterior ). O, para compilar y ejecutar el ejemplo
usted mismo, consulte el ndice de ejemplo .


Usted ver la informacin sobre herramientas al pasar el ratn sobre el
encabezado de cualquier columna, excepto para los dos primeros. No hay
informacin sobre herramientas se suppled para las columnas de nombre ya que
parecan fciles de entender. Aqu hay una foto de una de las extremidades de
herramienta de encabezado de columna:

El siguiente cdigo implementa la informacin sobre herramientas. Bsicamente,
se crea una subclase de JTableHeader que anula el getToolTipText
(MouseEvent)mtodo para que devuelva el texto de la columna actual. Para
asociar el encabezado de la tabla revisada con la tabla,
el JTable mtodo createDefaultTableHeader se anula para que devuelva una
instancia de la JTableHeader subclase.
Cadena protegida [] = {columnToolTips
null, / / "Nombre" asumi obvia
null, / / "Last Name" asumi obvia
"El deporte favorito de la persona para participar en"
"El nmero de aos que la persona ha jugado este deporte",
"Si se marca, la persona no come carne"};
...

Tabla JTable = new JTable (nueva MyTableModel ()) {
...

/ / Implementar mesa la informacin de herramientas encabezado.
protegida JTableHeader createDefaultTableHeader () {
return new JTableHeader (ColumnModel) {
public String getToolTipText (MouseEvent e) {
Punta String = null;
java.awt.Point p = e.getPoint ();
int index = columnModel.getColumnIndexAtX (px);
int realIndex =
. columnModel.getColumn (ndice) getModelIndex
();
volver columnToolTips [realIndex];
}
};
}
};
Ordenar y filtrar
Tabla de clasificacin y filtrado es administrado por un clasificador de objeto. La
forma ms fcil de proporcionar un objeto clasificador es
establecerautoCreateRowSorter propiedad enlazada a la verdad :
Tabla JTable = new JTable ();
table.setAutoCreateRowSorter (true);
Esta accin define un clasificador fila que es una instancia
de javax.swing.table.TableRowSorter . Esto proporciona una tabla que hace un
sencillo de la configuracin regional de ordenacin cuando el usuario hace clic
en un encabezado de columna. Esto se demuestra en TableSortDemo.java , como
se ve en esta captura de pantalla:

Para tener ms control sobre la clasificacin, se puede construir una instancia
de TableRowSorter y especificar que es el objeto clasificador para su mesa.
TableRowSorter <TableModel> clasificador
= New TableRowSorter <TableModel> (table.getModel ());
table.setRowSorter (clasificador);
TableRowSorter utiliza java.util.Comparator objetos para ordenar sus filas. Una
clase que implementa esta interfaz debe proporcionar un mtodo
llamado compararque define cmo se comparan dos objetos con el fin de
clasificar. Por ejemplo, el cdigo siguiente crea un comparador que ordena un
conjunto de cadenas por la ltima palabra en cada cadena:
Comparador <String> comparador = new Comparador <String> () {
public int comparar (cadena s1, s2 String) {
String [] = Strings1 s1.split ("\ \ s");
String [] = Strings2 s2.split ("\ \ s");
volver Strings1 [strings1.length - 1]
. CompareTo (Strings2 [strings2.length - 1]);
}
};
Este ejemplo es bastante simple; ms tpicamente, un comparador de
implementacin es una subclase de java.text.Collator . Puede definir su propia
subclase, utilice los mtodos de la fbrica en Alzadora para obtener
un comparador para una configuracin regional especfica, o
utilizar java.text.RuleBasedCollator .
Para determinar qu Comparador de usar para una
columna, TableRowSorter intenta aplicar cada una de las siguientes reglas, a su
vez. Las reglas se siguen en el orden que se indica a continuacin; la primera
regla que establece el clasificador con un comparador se utiliza, y las reglas
remainining ignorado.
1. Si un comparador se ha especificado al invocar setComparator , usar esa
comparacin.
2. Si el modelo de tabla informa de que los datos de columna se compone de
cadenas ( TableModel.getColumnClass vuelve String.class para esa
columna), usar un comparador que ordena las cadenas en funcin de la
localizacin actual.
3. Si la clase de columna devuelta
por TableModel.getColumnClass implementa Comparable , utilizar un
comparador que ordena las cadenas en funcin de los valores devueltos
por Comparable.compareTo .
4. Si se ha especificado un convertidor de cadena para la tabla
invocando setStringConverter , utilizar un comparador que ordena las
representaciones de cadena resultantes segn la localizacin en curso.
5. Si ninguna de las reglas anteriores se aplican, utilizar un comparador que
invoque toString en la columna de datos y ordena las cadenas resultantes
basados en la localizacin actual.
Por tipos ms sofisticados de clasificacin, subclase TableRowSorter o su clase
padre javax.swing.DefaultRowSorter .
Para especificar el orden de clasificacin y ordenar prioridad para las columnas,
invocar setSortKeys . Aqu hay un ejemplo que ordena la tabla utilizada en los
ejemplos de las dos primeras columnas. La precedencia de las columnas de la
especie se indica por el orden de los criterios de ordenacin de la lista de
ordenacin. En este caso, la segunda columna tiene la primera clave de
ordenacin, por lo que las filas se ordenan por nombre, luego el apellido.
Lista <RowSorter.SortKey> sortKeys
= New ArrayList <RowSorter.SortKey> ();
sortKeys.add (nueva RowSorter.SortKey (1, SortOrder.ASCENDING));
sortKeys.add (nueva RowSorter.SortKey (0, SortOrder.ASCENDING));
sorter.setSortKeys (sortKeys);
Adems de reordenar los resultados, un clasificador de mesa tambin puede
especificar que se mostrarn filas. Esto se conoce
como filtrado . TableRowSorter implementa un filtro
usando javax.swing.RowFilter objetos. RowFilter implementa varios mtodos de
fbrica que crean tipos comunes de filtros. Por ejemplo, regexFilterdevuelve
un RowFilter que filtra basado en una expresin regular .
En el siguiente cdigo de ejemplo, puede crear explcitamente un objeto
clasificador de modo que puede utilizar para especificar un filtro:
Modelo MyTableModel = new MyTableModel ();
clasificador = new TableRowSorter <MyTableModel> (modelo);
tabla = new JTable (modelo);
table.setRowSorter (clasificador);
Despus se filtra basado en el valor actual de un campo de texto:
void NewFilter privado () {
RowFilter <MyTableModel, Object> rf = null;
/ / Si la expresin actual no analiza, no actualice.
try {
Rf = RowFilter.regexFilter (filterText.getText (), 0);
} Catch (java.util.regex.PatternSyntaxException e) {
volver;
}
sorter.setRowFilter (rf);
}
En un ejemplo posterior, NewFilter () se invoca cada vez que los cambios en el
campo de texto. Cuando el usuario introduce complicado expresiones regulares,
el try ... catch evita la excepcin de sintaxis de interferir con la entrada.
Cuando una tabla utiliza un clasificador, los datos de los usuarios ve pueden ser
en un orden diferente a la especificada por el modelo de datos, y pueden no
incluir todas las filas especificadas por el modelo de datos. Los datos que el
usuario ve en realidad se conoce como la vista , y tiene su propio conjunto de
coordenadas. JTable proporciona mtodos que convierten a partir del modelo
para ver las coordenadas -
coordenadas convertColumnIndexToView y convertRowIndexToView - y que
convertir de vista coordina para modelar coordenadas -
convertColumnIndexToModel y convertRowIndexToModel .

NOTA: Cuando se utiliza un clasificador, recuerde siempre traducir las
coordenadas de celdas.

El siguiente ejemplo agrupa las ideas discutidas en esta
seccin. TableFilterDemo.java aade un pequeo nmero de cambios
a TableDemo . Estos incluyen los fragmentos de cdigo explicados en esta misma
seccin, que proporcionan un clasificador para la mesa principal, y utilizan un
campo de texto para proporcionar la expresin regular de filtrado. La siguiente
captura de pantalla muestra TableFilterDemo antes se ha hecho ninguna
ordenacin o filtrado. Observe que la fila 3 en el modelo sigue siendo el mismo
que la fila 3 en la vista:

Si el usuario hace clic dos veces en la segunda columna, la cuarta fila se
convierte en la primera fila - pero slo en la vista:

Como se seal anteriormente, el texto que el usuario introduce en el campo de
texto "Text Filter" define un filtro que determina qu filas se muestran. Al igual
que con la clasificacin, filtrado puede causar visin coordina a divergir de
modelo de coordenadas:

Aqu est el cdigo que actualiza el campo de estado para reflejar la seleccin
actual:
table.getSelectionModel (). addListSelectionListener (
nueva ListSelectionListener () {
public void valueChanged (evento ListSelectionEvent) {
int viewRow = table.getSelectedRow ();
si (viewRow <0) {
/ / Seleccin escap filtra.
statusText.setText ("");
} Else {
int modelRow =
table.convertRowIndexToModel (viewRow);
statusText.setText (
String.format ("fila seleccionada de vista:% d."
+
"Fila seleccionada de modelo:.% D",
viewRow, modelRow));
}
}
}
);
El uso de un cuadro combinado como Editor
La creacin de un cuadro combinado como editor es sencillo, como muestra el
siguiente ejemplo. La lnea en negrita del cdigo configura el cuadro combinado
como el editor de una columna especfica.
TableColumn sportColumn = table.getColumnModel () GetColumn (2).;
...
JComboBox ComboBox = new JComboBox ();
ComboBox.addItem ("Snowboarding");
ComboBox.addItem ("Remo");
ComboBox.addItem ("Persiguiendo a los nios pequeos");
ComboBox.addItem ("Velocidad de lectura");
ComboBox.addItem ("La enseanza de la escuela secundaria");
ComboBox.addItem ("Ninguno");
sportColumn.setCellEditor (nueva DefaultCellEditor (ComboBox));
Aqu est una foto del editor de cuadro combinado en uso:

El cdigo anterior es de TableRenderDemo.java . Puede
ejecutar TableRenderDemo (haga clic en el botn Iniciar) utilizando Java Web
Start ( descargar el JDK 7 o posterior ). O, para compilar y ejecutar el ejemplo
usted mismo, consulte el ndice de ejemplo .


Uso de otros editores
Si va a configurar el editor para una sola columna de celdas (utilizando
el TableColumn setCellEditor mtodo) o para un tipo especfico de datos
(utilizando el JTablesetDefaultEditor mtodo), se especifica el editor utilizando
un argumento que se adhiere a la TableCellEditor interfaz. Afortunadamente,
el DefaultCellEditor clase implementa esta interfaz y proporciona constructores
para permitir especificar un componente de edicin que es
un JTextField , JCheckBox o JComboBox . Por lo general, usted no tiene que
especificar explcitamente una casilla de verificacin como editor, ya que las
columnas con booleanas datos automticamente usan un procesador de casilla de
verificacin y editor.
Y si desea especificar un editor que no sea un campo de texto, casilla de
verificacin o un cuadro combinado? Como DefaultCellEditor no admite otros
tipos de componentes, debe hacer un poco ms de trabajo. Es necesario crear una
clase que implemente la TableCellEditor interfaz. El AbstractCellEditor clase
es una buena superclase de usar. Implementa TableCellEditor superinterfaz
's, CellEditor , que le ahorra la molestia de implementar el cdigo de disparo de
eventos necesaria para editores de celdas.
Su clase de editor clula necesita para definir al menos dos mtodos -
getCellEditorValue y getTableCellEditorComponent . El getCellEditorValue m
todo, requerido por CellEditor , devuelve el valor actual de la
celda. El getTableCellEditorComponent mtodo, requerido por TableCellEditor ,
debe configurar y devolver el componente que desea utilizar como editor.
Aqu hay una foto de una mesa con un cuadro de dilogo que sirve,
indirectamente, como un editor de celdas. Cuando el usuario empieza a editar una
celda en el color favorito de columna, un botn (el editor de casillas true)
aparece y se abre el dilogo, con el que el usuario puede elegir un color diferente.

Puede ejecutar TableDialogEditDemo (haga clic en el botn Iniciar)
utilizando Java Web Start ( descargar el JDK 7 o posterior ). O, para compilar
y ejecutar el ejemplo usted mismo, consulte el ndice de ejemplo .


Aqu est el cdigo, tomado de ColorEditor.java , que implementa el editor de
celda.
public class ColorEditor extiende AbstractCellEditor
implementa TablGeCellEditor,
ActionListener {
Color currentColor;
Botn JButton;
JColorChooser colorChooser;
Dilogo JDialog;
protegida EDITAR static final String = "editar";

ColorEditor pblica () {
botn = new JButton ();
button.setActionCommand (EDIT);
button.addActionListener (este);
button.setBorderPainted (false);

/ / Configurar el cuadro de dilogo que el botn aparece.
colorChooser = new JColorChooser ();
dilogo = JColorChooser.createDialog (botn,
"Elija un color",
verdadera, / / modal
colorChooser,
esto, controlador de botn / / OK
nula); / / No CANCELAR
controlador de botn
}

public void actionPerformed (ActionEvent e) {
if (EDIT.equals (e.getActionCommand ())) {
/ / El usuario ha hecho clic en la celda, por lo que
/ / Abrir el dilogo.
button.setBackground (currentColor);
colorChooser.setColor (currentColor);
dialog.setVisible (true);

fireEditingStopped (); / / Que vuelva a aparecer
renderizador.

Botn "Aceptar" del cuadro de dilogo} else {/ / El usuario
presiona.
currentColor = colorChooser.getColor ();
}
}

/ / Implementar el mtodo CellEditor que AbstractCellEditor no lo
hace.
public Object getCellEditorValue () {
volver currentColor;
}

/ / Implemente el mtodo definido por TableCellEditor.
pblica Componente getTableCellEditorComponent (tabla JTable,
Del valor del objeto,
boolean isSelected,
int fila,
int columna) {
currentColor = (Color) Valor;
botn de retorno;
}
}
Como puede ver, el cdigo es bastante simple. La nica parte que es un poco
complicado es el llamado a fireEditingStopped al final del gestor de accin del
botn editor.Sin esta llamada, el editor se mantendra activa, a pesar de que el
cuadro de dilogo modal ya no es visible. La llamada a fireEditingStopped deja
la mesa sabe que puede desactivar el editor, dejando que la clula ser manejado
por el procesador nuevo.
Uso de un editor para validar texto introducido por el usuario
Si editor por defecto de una clula permite la entrada de texto, usted consigue
una cierta comprobacin de errores de forma gratuita si se especifica el tipo de la
clula como algo distinto de cuerdas o de objetos . La comprobacin de errores
es un efecto secundario de convertir el texto introducido en un objeto del tipo
adecuado.
La comprobacin automtica de cadenas introducidas por el usuario se produce
cuando el editor por defecto intenta crear una nueva instancia de la clase asociada
con la columna de la celda. El editor por defecto crea esta instancia con un
constructor que toma una cuerda como un argumento. Por ejemplo, en una
columna cuyas clulas tienen tipo Entero , cuando el usuario escribe en el editor
por defecto "123" crea el correspondiente entero utilizando el cdigo equivalente
a new Integer ("123") . Si el constructor produce una excepcin, el contorno de
la clula se vuelve rojo y se niega a que el foco se mueve fuera de la clula. Si
implementa una clase que se utiliza como un tipo de datos de columna, puede
utilizar el editor por defecto si su clase proporciona un constructor que toma un
solo argumento de tipo Cadena .
Si te gusta tener un campo de texto como el editor de una celda, pero quiere
personalizarlo - tal vez para comprobar el texto introducido por el usuario de
manera ms estricta o para reaccionar de manera diferente cuando el texto no es
vlido - usted puede cambiar el editor de celda para utilizar un texto con formato
campo . El campo de texto con formato se puede comprobar el valor de forma
continua, mientras que el usuario est escribiendo o despus de que el usuario ha
indicado al final de escribir (por ejemplo, pulsando Enter).
En el siguiente cdigo, tomado de un demo llamado TableFTFEditDemo.java ,
crea un campo de texto con formato de un editor que limita todos los valores
enteros para estar entre 0 y 100. Puede ejecutar TableFTFEditDemo (haga clic en el
botn Iniciar) utilizando Java Web Start ( descargar JDK 7 o posterior ). O,
para compilar y ejecutar el ejemplo usted mismo, consulte el ndice de ejemplo .


El siguiente cdigo hace que el campo de texto formateado el editor para todas
las columnas que contienen datos de tipo entero .
table.setDefaultEditor (Integer.class,
nueva IntegerEditor (0, 100));
El IntegerEditor clase se implementa como una subclase
de DefaultCellEditor que utiliza un JFormattedTextField en lugar de
la JTextField queDefaultCellEditor apoya. Esto se logra estableciendo primero
un campo de texto con formato para utilizar un formato de nmero entero y tener
el valor mnimo y mximo especificado, utilizando el API se describe en Cmo
utilizar texto con formato campos . A continuacin, anula
el DefaultCellEditor aplicacin de
lagetTableCellEditorComponent , getCellEditorValue y stopCellEditing mtodo
s, agregando las operaciones que son necesarias para los campos de texto con
formato.
La anulacin de getTableCellEditorComponent fija del campo de texto con
formato de valor de propiedad (y no slo el texto de la propiedad se hereda
de JTextField) antes de que aparezca el editor. La anulacin
de getCellEditorValue mantiene el valor de la celda como un nmero entero , en
lugar de, digamos, el de Long valor que analizador del campo de texto con
formato tiende a volver. Por ltimo, anulando stopCellEditing le permite
comprobar si el texto es vlido, posiblemente, interrumpa el editor sea
despedida. Si el texto no es vlido, la implementacin de stopCellEditing pone
un cuadro de dilogo que le da al usuario la opcin de continuar a editar o volver
al ltimo valor vlido. El cdigo fuente es un poco demasiado larga para incluir
aqu, pero usted lo puede encontrar en IntegerEditor.java .
Impresin
JTable proporciona una API simple para tablas de impresin. La forma ms
sencilla de imprimir una tabla es invocar JTable.print sin argumentos:
try {
if (! table.print ()) {
System.err.println ("El usuario ha cancelado la impresin");
}
} Catch (java.awt.print.PrinterException e) {
System.err.format ("No se puede imprimir% s% n", e.getMessage ());
}
La invocacin de impresin en una aplicacin normal de giro abre un cuadro de
dilogo de impresin estndar. (En una aplicacin sin cabeza, la mesa es
simplemente imprime.) El valor devuelto indica si el usuario sigui adelante con
el trabajo de impresin o la cancel. JTable.print puede
lanzar java.awt.print.PrinterException , que es una excepcin comprobada ; es
por eso que el ejemplo anterior utiliza un try ... catch .
JTable proporciona varias sobrecargas de impresin con varias opciones. En el
siguiente cdigo de TablePrintDemo.java muestra cmo definir un encabezado de
pgina:
Encabezado MessageFormat = new MessageFormat ("Pgina {0, number,
integer}");
try {
table.print (JTable.PrintMode.FIT_WIDTH, header, null);
} Catch (java.awt.print.PrinterException e) {
System.err.format ("No se puede imprimir% s% n", e.getMessage ());
}
Para aplicaciones de impresin ms sofisticados,
utilice JTable.getPrintable para obtener un imprimible objeto para la tabla. Para
ms informacin sobre imprimir , consulte la Impresin leccin en el Grficos
2D sendero.
Ejemplos que usan las Tablas
Esta tabla lista ejemplos que usan JTable y en las que se describen a esos
ejemplos.
Ejemplo Dnde Descrito Notas
SimpleTableDe
mo
Crear una tabla
simple
Una tabla bsica con ningn modelo de la
costumbre. No incluye cdigo para especificar
los anchos de columna o detectar de usuario de
edicin .
SimpleTable-
SelectionDemo
Detectar
Selecciones de
usuario
Aade la seleccin y la seleccin de deteccin
nica de SimpleTableDemo . Mediante la
modificacin del
programa ALLOW_COLUMN_SELECTION y ALLOW_ROW_
SELECTION constantes, se puede experimentar
con alternativas a la tabla por defecto de
permitir que slo las filas para ser
seleccionados.
TableDemo
Creacin de una
tabla de modelo
Una tabla bsico con un modelo personalizado.
TableFTFEditD
emo
Uso de un
editor para
validar texto
introducido por
el usuario
Modifica TableDemo utilizar un editor
personalizado (una variante campo de texto con
formato) para todos los enteros de datos.
TableRenderDe
mo
El uso de un
cuadro
combinado
como Editor
Modifica TableDemo utilizar un editor
personalizado (un cuadro combinado) para todos
los datos en el Deporte de la columna. Tambin
recoge inteligente tamaos de las
columnas. Utiliza renders para mostrar
informacin sobre herramientas para las clulas
del deporte.
TableDialogEd
itDemo
Uso de otros
editores
Modifica TableDemo tener un procesador de
celdas y editor que muestre un color y le permite
elegir una nueva, utilizando un dilogo selector
de color.
TableToolTips
Demo
Especificacin
de la
informacin de
herramientas
para las
clulas , Especif
icacin de la
informacin de
herramientas de
encabezados de
columna ,
Muestra cmo usar varias tcnicas para
establecer el texto sobre herramientas para las
clulas y los encabezados de columna.
TableSortDemo
Ordenar y filtrar
Demuestra el clasificador por defecto, lo que
permite al usuario ordenar las columnas
haciendo clic en sus encabezados.
TableFilterDe
mo
Ordenar y filtrar
Demuestra clasificacin y filtrado, y cmo esto
puede causar que la vista coordina a divergir a
partir del modelo coordenadas.
TablePrintDem
o
Impresin Demuestra la impresin tabla.
ListSelection
Demo
Cmo escribir
un Oyente de
List Selection
Muestra cmo utilizar todos los modos de
seleccin de la lista, con una seleccin oyente
lista que es compartida entre una tabla y lista.
SharedModelDe
mo
En ninguna
parte
Se basa en ListSelectionDemo haciendo que el
modelo de datos ser compartida entre la mesa y
lista. Si edita un elemento en la primera
columna de la tabla, el nuevo valor se refleja en
la lista.

Potrebbero piacerti anche