0% encontró este documento útil (0 votos)
56 vistas20 páginas

Tutorial Tabla

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
56 vistas20 páginas

Tutorial Tabla

Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF o lee en línea desde Scribd
ari2020 (Cémo usar ablas (Los Tutoriales de Java ™> Crear una GUI con JFC / Swing> Usar componentes Swing) Los Tut ‘mejoras introducidas en versiones posteriores y podrian usar tecnologia que ya no esté disponible. Consuite las Notas de la versién de JDK para obtener informacion sobre nuevas funciones, mejoras y opciones eliminadas o en desuso para todas las versiones de JOK. toriales de Java se han escrito para JDK 8. Los ejemplos y practicas descritos en esta pagina no aprovechan las Cémo usar tablas Con ki la sTab? cclase puede mostrar tablas de datos, opcionalmente permitiendo al usuatio editar los datos. 7rableno contiene ni almacena en caché datos; Es simplemente una vista de sus datos, Aqui hay una imagen de una tabla tipica que se muestra dentro de un panel de desplazamiento: ‘The Header contains Column tabs TEESE ‘Speed reading Fach Cell splays Each Column displays data ten tne «ype af data Erresto de esta seccién le muestra cémo realizar algunas tareas comunes relacionadas con la tabla, Estos son los, temas que cubre esta seccién: Crear una tabla simple Agregar una tabla a un contenedor Establecer y cambiar anchos de columna Selecciones de usuario Crear un modelo de tabla Escuchando los cambios de datos Disparar eventos de cambio de datos Conceptos: editores y renderizadores Usar renderizadores personalizados Especificacién de informacién sobre herramientas para celdas Especificacién de informacién sobre herramientas para encabezados de columna Ordenar y fitrar Usar un cuadro combinado como editor Usar otros editores Uso de un editor para validar texto introducido por el usuario Impresién Ejemplos que usan tablas Crear una tabla simple Prueba esto: 1. Haga clic en el botén Iniciar para ejecutar Simp LeTab leDemousando Java ™ Web Start ( descargue DK 7 0 posterior }. O, para compilar y ejecutar el ejemplo usted mismo, consulte el indice del ejemplo 2, Haga clic en la celda que contiene “Snowboard”. Se selecciona toda la primera fila, lo que indica que ha seleccionado los datos de Kathy Smith. Un resaltado especial indica que la celda "Snowboard" es editable. Generalmente, comienza a editar una celda de texto haciendo doble otic en ella 3, Posicione el cursor sobre "Nombre". Ahora presione el botén del mouse 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 del encabezado de una columna, Ahora presione el bot6n del mouse y arrastre hacia la derecha o izquierda. La columna cambia de tamaiio y las otras columnas se ajustan para llenar el espacio restante, 5, Cambie el tamafio de la ventana que contiene la tabla para que sea mas grande de lo necesario para mostrar la tabla completa, hitpsildocs.orace.com/javaseftutorialuswinglcomponentstable htm 1120 2rri2020 (Cémo usar ablas (Los Tutoriales de Java ™> Crear una GUI con JFC / Swing> Usar componentes Swing) ‘Todas las celdas de la tabla se ensanchan y se expanden para llenar el espacio horizontal adicional. Latabla en Sinpietabledemc. javadeclara los nombres de columna en una matriz de cadena: Cadena [] columnNanes Deporte”, “W de aos", 'Vegetariano” ‘Sus datos se inicializan y almacenan en una matriz de objetos bidimensional UC) datos Kathy", "smith Snosboard", nuevo entero (5), nuevo booleano (Fals0)}, {cJohn", "Doe", eno", nuevo entero (3), nuevo booleano (verdadero)}, (Sue, "Negro", ‘Tejer", nuevo entero (2), nuevo booleano (Fals0)), "Jane", “white”, Velocidad de lectura”, nuevo entero (28), nuevo booleano (verdadero)}, Joe", "Brown", Pool", nuevo entero (18), nuevo boolean (Fals0)} objet Pr Luego, la tabla se construye utilizando estos datos y columnNames: 3Table table = new JTable (data, colunnNanes) ; Hay dos 77a! econstructores que aceptan datos directamente ( simpleTablenemousa el primero) + stable (object [] []_rowbat + stable (Vector rowData, Ve , Object {] colum lonnvanes) La ventaja de estos constructores es que son faciles de usar. Sin embargo, estos constructores también tienen desventaias: ‘+ Autométicamente hacen que cada celda sea editable. ‘+ Tratan todos los tipos de datos de la misma manera (como cadenas). Por ejemplo, si una columna de la tabla tiene Bool eandatos, la tabla puede mostrar los datos en una casilla de verificacién. Sin embargo, si utiliza ‘cualquiera de los dos JTaisleconstructores enumerados anteriormente, sus Booleandatos se muestran como una cadena, Puede ver esta diferencia en la Vegetariancolumna de la figura anterior. ‘+ Requieren que coloque todos los datos de la tabla en una matriz o vector, lo que puede no ser apropiado para algunos datos. Por ejemplo, si esta creando 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 todas sus valores en una matriz o vector. Si desea evitar estas restricciones, debe implementar su propio modelo de tabla, como se describe en Creacién de un modelo de tabla Agregar una tabla a un contenedor Aqui hay un cédigo tipico para crear un panel de desplazamiento que sirve como contenedor para una tabla: aScrollPane scrolipane = new 2ScrollPane (tabla); table. setFillsViewportHeight (verdadero); Las dos lineas en este fragmento hacen lo siguiente: +E] uScro11Paneconstructor se invoca con un argumento que se refiere al objeto de la tabla. Esto crea un panel de desplazamiento como contenedor para la tabla; la tabla se agrega autométicamente al contenedor, + JTable. set Fi lsViewportHeichtse invoca para establecer la £i11sViewportHei ght propiedad, Cuando esta propiedad es trucla tabla, usa la altura completa del contenedor, incluso sila tabla no tiene suficientes filas para usar todo el espacio vertical. Esto facilta el uso de la tabla como un objetivo de arrastrar y soltar. Elpanel de desplazamiento coloca automaticamente el encabezado de la tabla en la parte superior de la ventana agrafica. Los nombres de las columnas permanecen visibles en la parte superior del area de visualizacién cuando se desplazan los datos de la tabla. hitpsildocs.orace.com/javaseftutorialuswingleomponentsitabe htm 2120 2rri2020 (Cémo usar ablas (Los Tutoriales de Java ™> Crear una GUI con JFC / Swing> Usar componentes Swing) Si esta utlizando una tabla sin un panel de desplazamiento, debe obtener el componente del encabezado de la tabla y colocarlo usted mismo. Por ejemplo: container. setLayout (nuevo BorderLayout ()); container.add (table.getTableHeader (), BorderLayout.PAGE_START); container.add (tabla, SorderLayout.CENTER); Establecer y cambiar anchos de columna De forma predeterminada, todas las columnas de una tabla comienzan con el mismo ancho y las columnas ocupan automaticamente todo el ancho de la tabla. Cuando la tabla se vuelve mas ancha o mas angosta (lo que podria suceder cuando el usuario cambia el tamafio de la ventana que contiene la tabla), todos los anchos de calumna cambian adecuadamente, Cuando el usuario cambia el tamafio de una columna arrastrando su borde derecho, entonces otras columnas deben cambiar de tamaiio o el tamaiio de la tabla debe cambiar. De forma predeterminada, el tamaiio de la tabla sigue siendo el mismo, y todas las columnas a la derecha del punto de arrastre cambbian de tamafio para acomodar ell espacio agregado 0 eliminado de la columna a la izquierda del punto de arrastre. Para personalizar los anchos de columna iniciales, puede invocar se -dWvidthen cada una de las columnas de su tabla. Esto establece los anchos preferidos de las columnas y sus anchos relativos aproximados. Por ejemplo, agregar el siguiente cédigo para Simpl eTabeDenohacer que su tercera columna sea mas grande que las otras. columnas: Tablecoluan column = null; para (int i= @; i <8; 1 4+) ¢ colunn = table.getColunrModel (). getColumn (1); si (i == 2) { column.setPreferreddidth (108); // la tercera columna es més grande } mas { colunn.setPreferreddidth (58); y y Como muestra el cédigo anterior, cada columna de una tabla esté representada por un ?abLeCo!unobjeto. TabLeColumnproporciona métodos getter y setter para los anchos minimo, preferido y maximo de una columna, asi como un método para obtener el ancho actual. Para ver un ejemplo de configuracién de anchos de celdas en funcién de una aproximacién del espacio necesario para dibujar el contenido de las celdas, consulte el initColumnsizesmétodo en Tab leRenderDemo. java. Cuando el usuario cambia el tamatio explicitamente de las columnas, los anchos preferidos de las columnas se establecen de tal manera que los tamafios especificados por el usuario se convierten en los nuevos anchos actuales de las columnas . Sin embargo, cuando se cambia el tamafio de la tabla, generalmente porque la ventana ha ‘cambiado de tamaiio; los anchos preferidos de las columnas no cambian. En cambio, los anchos preferidos existentes se usan para calcular nuevos anchos de columna para llenar el espacio disponible. Puede cambiar el comportamiento de cambio de tamafio de una tabla invocando s2tautoxesizeMode. Selecciones de usuario En su configuracién predeterminada, una tabla admite una seleccién que consta de una o mas filas. El usuario puede seleccionar un rango contiguo de filas 0 un conjunto arbitrario de flas. La Ultima celda que indicé el usuario obtiene Una indicacién especial; En el aspecto Metal, la calda se describe. Esta colda se conoce como la seleccién principal ; a veces se llama “la celda con el foco” o “la celda actual’, El usuario usa el mouse y//o el teclado para realizar selecciones, como se describe en la siguiente tabla: 5 ‘Accion del ; Operacién ose Accién del teclado Seleccione una lt acer clic IFlecha arriba o flecha abajo. sola fila Extiende ta pyesione, 'seleccion yus y NAGa_ | shift-Up Arrow o Shift-Down Arrow. Idlic 0 arrastre ‘contigua. Isobre tas filas. [Agregar filaa [Control-clic _|Mueva la seleccién principal con la flecha Control-Up 0 la la seleccién / Ilecha Control-Down, luego use la barra espaciadora para hitpsildocs.orace.com/javasefttorialuswinglcomponentsitable htm 3120 2rri2020 (Cémo usar tablas (Los Tutoriales de Java ™> Crear una GUI con JFC / Swing> Usar componentes Swing) alternar lagregar a la seleccién o la barra Control-Space para 'seleccién de jalternar la seleccion de fila. fila. Para ver c6mo funcionan las selecciones, haga clic en el botén Iniciar para ejecutar Tableselect ionDemousando Java ™ Web Start ( descargue JDK 7 0 posterior ). 0, para compilar y ejecutar el ejemplo usted mismo, consulte el indice del ejemplo . Este programa de ejemplo presenta la tabla familiar y permite al usuario manipular ciertas opciones de JTable. También hay un panel de texto que registra los eventos de seleccién. En la captura de pantalla a continuacién, un usuario ha ejecutado el programa, ha hecho clic en la primera fila y luego hha hecho clic en la tercera fila. Observe el contomo alrededor de la titima celda en la que hizo clic; asi es como se ve y 8e siente ol Metal, destaca la seleccién principal alex S] FirstName LastName Sport #ofYears Vegetarian || ati. ‘Sin Showboarding John Doe Sue ‘Black Jane white Rowing | inti Speed reading | Selection Made @ Mutiple intenal Selection © Single Selection © Single Interval Selection Selection Options (Row Selection [1 Column selection ROW SELECTIONEVENT, Lead 0, 3. Rows: 0, Columns 3 Fowee SELECTION EVENT, Leads 0, 3. Rows: 0, Columns: 3 ROW SELECTION EVENT. Lead: 2, 2. Rows: 02. Columns: 23, poe SELECTIONEVENT. Load: 2, 2. Rows: 02, Couumne: 2. En "Modo de seleccién* hay un conjunto de botones de opcién. Haga clic en la etiquetada *Seleccién tnica’. Ahora solo puede seleccionar una fla a la vez. Si hace clic en el botén de opcién "Seleccién de intervalo Unico’, puede seleccionar un conjunto de filas que deben ser contiguas. Todas los botones de radio en "Modo de seleccién” invocan JTable. s=tselect .ce. Este método toma un solo argument, que debe ser una de las siguientes constantes definidas en javax. swing. ListSelectionMedel: MULTIPLE INTERVAL SELECTION, SINGLE INTERVAL SELECTION, y SINGLE_SELECTTON. Volviendo a PabieselectionDeno, observe las tres casillas de verificacién de opciones en "Opciones de seleccion’, Cada casilla de verificacién controla el estado de una boo Leanvariable enlazada definida por J.ab»1e + La"Seleccién de fla” controla rowselect ionAl Lowedqué tiene 6! método setter = onal Lowedy el método getter yet RowSelect ionAl lowed, Cuando esta propiedad enlazada es truc(y la columnselect ion’ Lowedpropiedad es fal se), el usuario puede seleccionar por fila + La"Seleccién de columna" controla colunnseectionA1lowedel método seller setColunnSelect ionAl lowedy el método getter getColunnSelectionAllcwed. Cuando esta propiedad enlazada es truely la rowSe lect ion] lowedpropiedad enlazada es a ).se), el usuario puede seleccionar por columna, + Controles de "Seleccién de celda’ cel select !onznabled, que tiene el método SeLectionEnablecy el método getter get cei 1select ionEnabled, Cuando esta propiedad crue, el usuario puede seleccionar una sola celda o un bloque rectangular de celdas, hitpsildocs.orace.com/javaseftutorialuswinglcomponentstable htm 420 2rri2020 (Cémo usar ablas (Los Tutoriales de Java ™> Crear una GUI con JFC / Swing> Usar componentes Swing) NOTA: Jtab1e utiliza un concepto muy simple de seleccién, administrado como una interseccién de filas y columnas. No fue disefiado para manejar selecciones de celdas totalmente independientes. Si desactiva las tres casillas de verificacién (configurando las tres propiedades enlazadas a f21se),no hay seleccién; solo se muestra la seleccién principal Puede observar que Ia casilla de veriicacién "Seleccién de celda” esta deshabilitada en el modo de seleccién de intervalos miltiples. Esto se debe a que la seleccién de celdas no se admite en este modo en la demostracién. Puede cespecificar la seleccién por celda en el modo de seleccién de intervalos miltiples, pero el resultado es una tabla que no produce selecciones tiles. También puede notar que cambiar cualquiera de las tres opciones de seleccién puede afectar a las demés. Esto se debe a que permitir la seleccién de filas y columnas es exactamente lo mismo que habiltar la seleccién de celdas, vab1 eactualiza automaticamente las tres variables enlazadas segiin sea necesario para mantenerlas consistentes, NOTA: Establecer ce11sels enBnabledun valor tiene el efecto secundario de establecer también ambos bledy colunnSeLlectionEnabledese valor, Establecer ambos roxSe lect ionEnabledy columnSelect ionEnablecun valor tiene el efecto secundario de establecer también cel1select ionEnabledese valor, Establecer rowSelect ion=nabledy columnSelectionEnabledpara diferentes valores tiene el efecto secundario de establecer también ce! Select ionEnableden false. Selection! Para recuperar la seleccién actual, use JYablc.getselectedsowsque devuelve una matriz de indices de fila yoTabls.getselectedCo!umnsque devuelve una matriz de indices de columna. Para recuperar las coordenadas de la seleccién principal, consulte los modelos de seleccién para la tabla misma y para el modelo de columna de la tabla. El siguiente cédigo formatea una cadena que contiene la fila y la columna de la seleccién principal: String.format (“Seleccién de leads:% d,% d.", table. getSelectionNodel (). getLeadSelectionindex (), table.getColunnodel (). getSelectionMedel (). getLeadSelectionIndex ()); Las selecciones de los usuarios generan una serie de eventos. Para obtener informacién sobre estos, consulte Cémo escribir un oyente de seleccién de lista en la leccién Escribir ayentos de eventos NOTA: Los datos de seleccién en realidad describen celdas seleccionadas en la "vista" (datos de la tabla tal como aparecen después de cualquier clasificacién o fitrado) en lugar de en el modelo de la tabla. Esta distinci6n no importa a menos que los datos vistos se hayan reorganizado mediante la clasificacion, e| fillsado o fa manipulacién de columnas por parte del usuario. En ese caso, debe convertir las coordenadas de seleccién utilzando los métodos de conversién descritos en Ordenar y fitrar Crear un modelo de tabla Cada objeto de tabla usa un objeto de modelo de tabla para administrar los datos reales de la tabla. Un objeto de modelo de tabla debe implementar la "ais! Moce7interfaz. Si el programador no proporciona un objeto de modelo de tabla, J?ab lecrea automaticamente una instancia debe Fa It T=) eNioce |. Esta relacion se ilustra a continuacién. Object Table Object >, <-> Table Dats El stab econstructor utlizado pot Simple?ab1e3encerea su modelo de tabla con un cédigo como este: nuevo AbstractTableModel () { public String getColunnNane (int col) ( return colunnNanes [col] .toString (); Public int getRowCount () {return row0ata.length; } public int getColunncount () {return columnNanes. length; } Objeto publico getValueat (int fila, int col) { return rowbata [fila] [col]; hitpsildocs.orace.com/javaseftutorialuswingleomponentsitabe htm 5120 2rri2020 (Cémo usar ablas (Los Tutoriales de Java ™> Crear una GUI con JFC / Swing> Usar componentes Swing) Public boolean iscelléditable (int fila, int col) (return true; } public void setvalueat (valor del objeto, int fila, int col) { rowata [fila] [col] = valor; fireTablecellUpdated (Fila, col); y Como muestra el cédigo anterior, implementar un modelo de tabla puede ser simple, Generalmente, implementa su modelo de tabla en una subclase de la Abstract Tab!eMode |¢lase. ‘Su modelo puede contener sus datos en una matriz, vector o mapa hash, o puede obtener los datos de una fuente externa como una base de datos. Incluso podria generar los datos en tiempo de ejecucién. Esta tabla es diferente de la simplevabeDemotabla de las siguientes maneras: + TableDemoEl modelo de tabla personalizado, aunque es simple, puede determinar facilmente el tipo de datos, lo que ayuda a 77'2)>1 emostrar los datos en el mejor formato. SimpleTabyieDemcEl modelo de tabla creado automaticamente, por otro lado, no sabe que la columna Nam . de afios contiene nimeros (que generalmente deben estar alineados ala derecha y tener un formato particular). Tampoco sabe que la contiene valores booleanos, que pueden representarse mediante casillas de verificacion. ‘+ Elmodelo de tabla personalizado implementado en Tai»1LeDemono le permite editar las columnas de nombre; Sin embargo, le permite editar las otras columnas. En simp leTableDemo, todas las celdas son editables, jegetariancolumna ‘Vea a continuacién el cédigo tomado de Pablebeno.. javaque es diferente del SimpLe?ablebemo. java. La fuente en negrita indica el cédigo que hace que el modelo de esta tabla sea diferente del modelo de tabla definido automaticamente para SimpleTableDeno. public Tabledeno () Tabla JTable = nueva JTable (nueva MyTableModel ()); y Clase MyTableModel extiende abstractIablevodel { private String [] colunpNanes = ... // igual que antes ... private Object [] [] data = ... // igual que antes public int getColumncount () { return colunaNanes. length; y public int getRowcount () { devolver datos. length; > public String getColumnNare (int col) ( return colunnNanes [col]; » Objeto pablico getvaluent (int fila, int col) { devolver datos [fila] [col]; y public Class getColumnclass (int c) { return getvalueat (8, c) .getClass (); » ye = No es necesario implenentar este método a menos que su tabla sea * editable. “7 public boolean isCelleditable (int fila, int col) ( 7/ Tenga en cuenta que 1a direccién de datos / celda es con: // no importa donde aparezca 1a celda en pantalla. si (col <2) { falso retorno; } mas { volver verdadero; y y hitpsildocs.orace.com/javasefttorialuswingleomponentsitable htm 2120 2rri2020 (Cémo usar ablas (Los Tutoriales de Java ™> Crear una GUI con JFC / Swing> Usar componentes Swing) ye + No es necesario inplenentar este método a menos que su tabla sea * los datos pueden canbiar. +7 public void setvalueat (valor del objeto, int fila, int col) { datos [fila] [col] = valor; fireTablecellUpdatec (Fils, col); } Escuchando los cambios de datos Un modelo de tabla puede tener un conjunto de oyentes que reciben notificaciones cada vez que cambian los datos de la tabla, Los oyentes son instancias de Talb!e¥oce 11 stener. En el siguiente cédigo de ejemplo, Simple Tab leDemose extiende para incluir dicho oyente. El nuevo cédigo esta en negrita, Anport javax.suing.event. *; inport javax.swing. table. TableModel; public class SimpleTableDeno ... implenenta TableModelListener { public SinpleTabledeno () { table.getModel (). addTableModelListener (esto); } public void tablechanged (TableModelevent e) { int fila = e.getFirstRow (); int columa = e.getcolunn ()3 Modelo de Tabletodel = (TableNodel) e.getSource ()5 Cadena columnNane = nodel.getColunnNane (colunna); Datos del objeto = madel.getValueat (fila, colunna); // Haz algo con Los datos ... y Disparar eventos de cambio de datos Para activar eventos de cambio de datos, el modelo de tabla debe saber cémo construir un Tab LeMode/Sventobjeto, Este puede ser un procedimiento complejo, pero ya estd implementado en Default ?ablevode2. Puede permitir 77abLeutlizar su instancia predeterminada de Default Tablevedel, 0 crear su propia subclase personalizada de Default TableMode Si DefaultTabletiodeino es una clase base adecuada para su clase de modelo de tabla personalizada, considere la subclasennst ract Tabl.eVode!. Esta clase implementa un marco simple para consttuir 1abLeviede2Eventobjetos. Su clase personalizada simplemente necesita invocar uno de los st ract TableMode lmétodos cada vez que una fuente externa cambia los datos de la tabla. siguientes ai Método [Cambio fireTableCellUpdated [Actualizacién de celda especificada. reTableRowsUpdated [Actualizacién de filas especificadas fireTableDataChanged [Actualizacin de toda la tabla (solo datos). fireTableRows Inserted [Nuevas filas insertadas. fireTableRowsDeleted IFilas existentes eliminadas fireTablestru ‘tureChanged ||Invalidar toda la tabla, tanto datos como estructura. Conceptos: editores y renderizadores ‘Antes de continuar con las siguientes tareas, debe comprender cémo las tablas dibujan sus celdas. Puede esperar que cada celda de una tabla sea un componente. Sin embargo, por razones de rendimiento, las tablas Swing se implementan de manera diferente. hitpsildocs.orace.com/javaseftutorialuswingleomponentsitabe htm 7120 2rri2020 (Cémo usar ablas (Los Tutoriales de Java ™> Crear una GUI con JFC / Swing> Usar componentes Swing) En cambio, un renderizador de una sola celda se usa generalmente para dibujar todas las celdas que contienen el mismo tipo de datos. Puede pensar en el renderizador como un sello de tinta configurable que la tabla usa para ‘estampar datos con el formato adecuado en cada celda, Cuando el usuario comienza a editar los datos de una colda , Un editor de celdas se hace cargo de la celda y controla el comportamiento de edicién de la celda. Por ejemplo, cada celda en la columna # de aflosab1eveno contiene Nunberdatos, especificamente, un tnt egerobjeto. De manera predeterminada, el renderizador de celdas para una Numbezcolumna que contiene una sola JLabe linstancia utiliza los numeros apropiados, alineados a la derecha, en las celdas de la columna. Si el usuario comienza a editar una de las celdas, el editor de celdas predeterminado usa un alineado J7ext¥ielda la derecha para controlar la edicién de la celda. Para elegir el renderizador que muestra las celdas en una columna, una tabla primero determina si usted especificé un renderizador para esa columna en particular. Si no lo hizo, la tabla invoca el getColunnCiassmétodo del modelo de tabla , que obtiene el tipo de datos de las celdas de la columna. A continuacién, la tabla compara el tipo de datos de la columina con una lista de tipos de datos para los que se ragistran los procesadares de celdas. La lista inicializa esta lista, pero puede agregarla o cambiarla, Actualmente, las tablas ponen los siguientes tipos de datos en la lista: + Boolean -Prestados con una casilla de verificacién. ‘+ Number - prestados por una etiqueta alineada a la derecha. + Double, Float: igual que umber, pero la traduccién de objeto a texto es realizada por una NurberPornatinstancia (utilizando el formato de ntimero predeterminado para la configuracién regional actual) Representado por una etiqueta, con la traduccién de objeto a texto realizada por una pateFermatinstancia (utlizando un estilo corto para la fecha y la hora). + TmageTcon, Tcon- representado por una etiqueta centrada. Representado por una etiqueta que muestra el valor de la cadena del objeto, Los editores de celda se eligen usando un algoritmo similar. Recuerde que si deja que una tabla cree su propio modelo, se usa object como el tipo de cada columna. Para especificartipos de columna mas precisos, el modelo de tabla debe definir el get Columnc1assmétodo adecuadamente, como lo demuestra Taln!eemo. java Tenga en cuenta que aunque los procesadores determinan cémo se ve cada encabezado de celda o columna y pueden especificar ol toxto de la informacién sobre herramientas, un procesador no maneja eventos. Si necesita recoger los eventos que tienen lugar dentro de una mesa, la técnica que utiliza varia segiin el tipo de evento que le interese: [Situacion [Cémo obtener eventos Para detectar eventos de una Use el editor de celdas (0 registre un oyente en el editor de ‘celda que se esta editando ... _||celdas). Para detectar selecciones y __|Use un oyente de seleccién como se describe en Deteccion \deselecciones de fila / columna |\de selecciones de usuario I celda . Para detectar eventos del [Registre el tipo apropiado de escuicha de mouse en mouse en el encabezado de _ el STableHeaderobjeto de la luna columna ltabla . (Ver?ainlesorter. javapara un ejemplo.) Para detectar otros eventos ... [Registre el oyente apropiado en el JTab 1 cobjeto. Las siguientes secciones le indican cémo personalizar la visualizacién y la edicién especificando renderizadores y editores. Puede especificar editores y editares de celda por calumna o por tipo de datos. Usar renderizadores personalizados Esta seccién le dice cémo crear y especificar un procesador de celdas. Puede configurar un procesador de celdas de tipo conereto utilizando la JTablemétodo set De aul :Rendarer. Para especificar que las células en una columna en particular deben utilizar un procesador, se utiliza el TableColumnmétodo se=Cel1Rendezer. Incluso puede especificar un renderizador especifico de celda creando una JTabLesubclase. Es facil de personalizar el texto 0 la imagen representada por el procesador predeterminado, Default TableCell Renderer. Simplemente cree una subclase e implemente el setValuemétodo Para que invoque set Texto set Iconcon la cadena o imagen adecuada. Por ejemplo, asi es como se implementa el procesador de fecha predeterminado: hitpsildocs.orace.com/javaseftutorialuswingleomponentsitabe htm 8120 2rri2020 (Cémo usar ablas (Los Tutoriales de Java ™> Crear una GUI con JFC / Swing> Usar componentes Swing) La clase estatica DateRenderer extiende DefaultTableCellRenderer { Formateador DateFormat; public DateRenderer () { uper ()3 public void setvalue (valor del objeto) ( if (Formateador == nulo) { fornateador = DateFormat .getDateInstance (); y setText ((value null)? ": formatter. format (value); } Sila extension DefaultTableceliRendereres insuficiente, puede construir un renderizador utilizando otra superclase. La forma mas facil es crear una subclase de un componente existente, haciendo que su subclase implemente la "ab! eCe1 “Readerevinterfaz, TableCe11Rendererrequiere simplemente un método: get7ableCel /RendererCenponent. La implementacién de este método debe configurar el componente de representacién para reflejar el estado pasado y luego devolver el componente. En la instanténea de Tab epialo: Subclase de JLabelllamado Colorsendere implementa EditDeno, el renderizador utilizado para las celdas de Color favorito es una Aqui hay extractos Colorsenderer. Javaque muestran cémo se clase piblica Colorenderer extiende 3Label Amplenenta TableceliRenderer { ColorRenderer pablico (boolean issordered) { ‘this.istordered = isdordered; setOpaque (verdadero); // DEBE hacer esto para que aparezca el fondo. y Conponente pablico getTableceliRendererComponent ( 3Table table, Color de objeto, boolean isSelected, boolean hasFocus, int fila, int colunma) { Color newColer = (Color) color; setBackground (newColor) ; Af (isBordered) ( if (isSelected) { J selectedBorder es un borde sélido en el color //table.getSelectionsackground () setBorder (selectedBorder); 17 unselectedBorder es un borde sélido en el color //table.getBackground () setBorder (unselectedBorder) ; y setToolTiptext (...); // Discutido en La siguiente seccién devuelve estos y Aqui esta el cddigo "abt eDiatoyldi theo. javaque registra una ColorRendererinstancia como el renderizador predeterminado para todos los Co lordatos: table.setbefaultRenderer (Color.class, nuevo ColorRenderer (verdadero); Para especificar un renderizador especitico de celda, debe definir una J’Ta>1esubclase que anule al gotCol IRenderermétodo. Por ejemplo, el siguiente cédigo hace que la primera celda de la primera columna de la tabla use un renderizador personalizado: TableceliRendere= weirdRendere! table = new JTable (...) { public TableCellRenderer getcellRenderer (int fila, int colunna) ( new WeirdRenderer (); if ((#ila == @) && (colunna == @)) { Volver raroRenderers y 11 mas... return super.getCeliRenderer (Fila, colunna); hitpsildocs.orace.com/javaseftutorialuswingleomponentsitabe htm 9120 2rri2020 (Cémo usar ablas (Los Tutoriales de Java ™> Crear una GUI con JFC / Swing> Usar componentes Swing) y Especificacién de informacién sobre herramientas para celdas De manera predeterminada, el texto de informacién sobre herramientas que se muestra para una celda de a tabla esta determinado por el renderizador de la celda. Sin embargo, a veces puede ser més sencillo especificar el texto de informacion sobre herramientas anulando 77l>1cla implementacién del yetTooiTipText (MouseEvent) método, Esta seccién le muestra cémo usar ambas técnicas. Para agregar informacion sobre herramientas a una celda usando su renderizador, primero debe obtener o crear el renderizador de la celda. Luego, después de asegurarse de que el componente de representacién es a JComponent invoque el setTool TipTextmétodo en él. Un ejemplo de configuracién de informacién sobre herramientas para celdas est en Table Renderdeme. Haga clic en el botén Iniciar para ejecutarlo utiizando Java ™ Web Start ( descargue JDK 7 0 posterior ). O, para compilar y ejecutar el ejemplo usted mismo, consulte el indice del ejemplo era El cédigo fuente esta adentro ‘rain cRenderDeno. java, Agrega informacién sobre herramientas a las celdas de la columna Sport con el siguiente oédigo: // Configurar consejos sobre herranientas para las células deportivas. DefaultTablecellRenderer renderer = nuevo DefaultTableceliRenderer (); Fenderer.setToolTipText ("Haga clic para el cuadro combinado’ sportColuan.setCeliRenderer (procesador); ‘Aunque el texto de informacién sobre herramientas en el ejemplo anterior es estatico, también puede implementar informacién sobre herramientas cuyo texto cambia segiin el estado de la celda o el programa. Aqui hay un par de formas de hacerlo: ‘+ Agregue un poco de cédigo a la implementacién del g=t'TableCel JRendererComponentmétodo por parte del procesador . + Anular el 2Tablemétodo get Tool Tiprext (MouseEvent) Un ejemplo de agregar cédigo a un renderizador de celdas est en Tab=eDialogZditDemo. Haga clic en el botén Iniciar para ejecutarlo utilizandoJava "™ Web Start ( descargue JDK 7 0 posterior ). O, para compllar y ejecutar el ‘ejemplo usted mismo, consulte el indice del ejemplo . Demousa un procesador de colores, implementado en Colorsenderer. java, que establece el texto de informacion sobre herramientas usando el cédigo de negrita en ol siguiente fragmento: clase piblica Colorkenderer extiende JLabel implenenta TableceliRenderer { Componente pablico getTableceliRendererComponent. ( ITable table, Color de objeto, boolean isSelected, boolean hasFocus, int fila, int columna) { Color newColer = (Color) colér; SetToolTipText (“Valor RGB:" + newColor.getRed () + + newColor.getGreen () + + newColor.getBlue ())5 devuelve estos y Aqui hay un ejemplo de cémo se ve a informacién sobre herramientas: hitpsildocs.orace.com/javaseftutorialuswinglcomponentstable htm 10120 ari2020 (Cémo usar ablas (Los Tutoriales de Java ™> Crear una GUI con JFC / Swing> Usar componentes Swing) s] Emre Deus =(5/ x! FirstName Favorite Color Sport #ofvears Vegetarian Mary MEE Spowboarcing isan Rowing ath: ilu. 51,51, 163) ‘Sharon ing Puede especificar ol texto de informacién sobre herramiontas anulando sTableel getToolTipText (MouseBvent) método. El programa TableToolTipsDemomuestra cémo. Haga clic en el bot6n Iniciar para ejecutarlo utlizando Java ™ Web Start ( descargue JDK 7 0 posterior ). O, para compilar y ejecutar el ejemplo usted mismo, consulte el indice del ejemplo Las celdas con informacién sobre herramientas se encuentran en las columnas Deporte y Vegetariano . Aqui hay una foto de su informacién sobre herramientas: 4] eTo Demo oO) x First Name Last Name Sport Hot vears Vegetarian Katty ‘Sith ‘Showboarding John Doe Rowing Sue Black ini 7 = wane white ‘Spe This person's favorite sport fo participate in is: Row Aqul esta el cédigo Tabievo01T las columnas Sport y Vegetarian : Jomo. javaque implementa informacién sobre herramientas para celdas en Tabla JTable = nueva JTable (nueva MyTableModel ()) { 71 Inplementar informacién sobre herranientas de celda de tabla. public String getToolTipText (MouseEvent e) ( Punta de cadena = nulo; java.aut.Point p = e.getPoint (); int rowIndex = rowatPoint (p); Ant colIndex = colunnatPoint (p); int realColunnindex = convertColunnIndexToModel (colIndex) Af (realColunntndex tip = 2) {// Coluna deportiva "1 deporte favorite de esta persona para” + “participar en es: + getValueat (rowIndex, colIndex); } else if (realColunnindex == 4) {// Colunna vegetariana Modelo de TableModel = getModel (); String FirstName = (String) model.getValueAt (rowIndex, @); String lastNane = (String) model.getValueat (rowindex, 1); Veggie booleana = (Boolean) model.getValueat (rowindex, 4); if (Boolean. TRUE.equals (veggie) { ‘consejo = nonbre + "" + apellido + "es vegetariano”; y mss ¢ consejo = nonbre + "" + apellido + “no es vegetariano"; y } else (// otra colunna // Puedes omitir esta parte si sabes que no 1/ tener renderizadores que proporcionen su propia herramienta J /consejos. tip = super.getToolTiptext (e); y punta de retorno; y El cédigo es bastante sencillo, excepto quizds por la llamada a convert Column Index" oMode 1. Esa llamada es necesaria porque si el usuario mueve las columnas, el indice de la vista para la columna no coincidira con el indice del modelo para la columna, Por ejemplo, el usuario puede arrastrar la columna Vegetariana (que el modelo considera hitpsildocs.orace.com/javaseftutorialuswinglcomponentstable htm 10 21vi2020 (Cémo usar tablas (Los Tutoriales de Java “> Crear una GUI con JFC / Swing> Usar components Swing) que esta en el indice 4) para que se muestre como la primera columna, en el indice de vista O. Como preparezendererproporciona el indice de vista, debe traducir el indice de vista a un indice de! modelo para que pueda estar seguro de que se ha seleccionado la columna deseada, Especificacién de informacién sobre herramientas para encabezados de columna Puede agregar una informacién sobre herramientas al encabezado de una columna configurando el texto de informacién sobre herramiontas para la tabla 77ab! cHeader. A menudo, diferentes encabezados de columna requieren diferentes textos de informacion sobre herramientas. Puede cambiar el texto anulando el getT001T: pTextmétodo del encabezado de la tabla . Altemativamente, puede invocar Tab 1eColumn. setHeaderRendererpara proporcionar un renderizador personalizado para el encabezado. ‘Se encuentra un ejemplo del uso del mismo texto de informacién sobre herramientas para todos los encabezados de columnaraleSorterdeno. java, Asi es como establece el texto de informacién sobre herramientas: table.getTableHieader (). setToolTipText ( “Haga clic para ordenar; Shift-Haga clic para ordenar en orden inverso”); "ableYoolTipsbeno. javatiene un ejemplo de implementacién de informacién sobre herramientas de encabezado de columna que varia segtin la columna. Si ejecuta Tab 1e''001 Tpsbemo(haga clic en el bot6n Iniciar) con Java ™ Web Start ( descargue JDK 7 0 posterior }. O, para compilar y ejecutar el ejemplo usted mismo, consutte el indice del ejemplo june Verd la informacién sobre herramientas cuando pase el mouse sobre cualquier encabezado de columna, excepto los dos primeros. No se completaron sugerencias de herramientas para las columnas de nombres, ya que parecian explicarse por si mismas, Aqui hay una imagen de una de las sugerencias de herramientas de encabezado de column oes lo] x| FiistName | LastName | _Spor Hofvears | Vegetarian | | Kathy ‘Smith ‘Snowboardi im \+| Liohn Dae Rowing | In REVSOS avons SforitoRaMieiate Tn sue Black Kiting an \Jane ‘White [Sneed reading 20) i al El siguiente cédigo implementa la informacién sobre herramientas. Basicamente, crea una subclase de JTableteaderque anula el get'Too1Tiptext (MouseE vent) método para que devuelva el texto de la columna actual. Para asociar el encabezado de la tabla revisada con la tabla, el JTainLemétodo creat eDefaultTablelieaderse reemplaza para que devuelva una instancia de la JTabletieadersubdlase. jlunnToolTips = { ‘asuido obvio nul, // "Apellido" asunido cono obvio "El deporte favorito de 1a persona para participar", -L numero de afios que 1a persona ha practicado el deporte”, "Si se marca, 1a persona no come carne”}; Tabla JTable = nueva JTable (nueva MyTableModel ()) { 11 Inplementar informacién sobre herranientas de encabezado de tabla. dTableHeader protegido createDefaultTableHeader () { devolver nuevo JTableHeader (colunnModel) { public String getToolTiprext (MouseEvent e) { Punta de cadens = nulos Java.awt.Point p = e.getPoint (); int index = colunnModel.getColunntndexAtx (px); int realIndex colunnModel.getColunn (index) .getModelindex (); return colunnToolTips [realIndex]; hitpsildocs.orace.com/javaseftutorialuswinglcomponentstable htm 12720 2rri2020 (Cémo usar ablas (Los Tutoriales de Java ™> Crear una GUI con JFC / Swing> Usar componentes Swing) Ordenar y filtrar La clasificacién y a! fitrado de tablas se gestionan mediante un objeto clasificador . La forma mas facil de proporcionar tun objeto clasificador es establecer la autoCreateRowSorterpropiedad vinculada a Tabla JTable = new JTable (); table.setAutoCreateRowSorter (verdadero); Esta accién define un clasificador de fllas que es una instancia de javax. ©wing. table. TableRowsorter. Esto proporciona una tabla que realiza una ordenacién simple especifica del entorno local cuando el usuario hace clic en el encabezado de una columna, Esto se demuestra en! als 1c: 1, como se ve en esta captura de pantalla Seba _ lolx [FirstName |Last Name Sport #ofveas | Vegetarian | any Sri Snowboarding Ee Uonn Doe Rowing 3 ue Bland renting a =| ane White Speed reading 30 Sj Para tener mas control sobre la ordenacién, puede construir una instancia TableRowSortery especificar que es ol objeto clasificador de su tabla. Clasificador TableRowSorter huevo TableRowSorter (table.getModel ())5 table.setRowSorter (clasificador); ‘TableRowSorterusa java.util.Comparatorobjetos para ordenar sus filas. Una clase que implementa esta interfaz debe proporcionar un método llamado conpareque defina cémo se comparan dos objetos con el fin de ordenarlos. Por ejemplo, el siguiente cédigo crea un Comparatorque ordena un conjunto de cadenas por la titima palabra en cada cadena: Comparador comparador = nuevo Comparador () { public int compare (Cadena si, Cadena s2) { Cadena [] cadenast = si.split ("\\ s"); Cadena [] cadenas2 = s2.split ("\\ s°); return strings1 [stringsi.length - 1] sconpareTo (strings2 [strings2.length - 1]); y pr Este ejemplo es bastante simplista; mas tipicamente, una Conparstorimplementacién es una subclase de Java. text .Col later, Puede definir su propia subclase, usar los métodos de fabrica Collatozpara obtener ‘torpara un entorno local especifico 0 usar} ava. text .RuleRasedt: un Compa ator. Para determinar cudl Comparatozusar para una columna, TableRowSortezintenta aplicar cada una de las siguientes regias. Las regias se siguen en el orden que se detalla a continuacion; Comparatorse utiliza la primera regla que proporciona al clasificador a , y las reglas restantes se ignoran. 1, Sise ha especificado un comparador invocando se: Comparator, use ese comparador, 2. Siel modelo de tabla informa que los datos de la columna consisten en cadenas (TableModel .getColumnClassretornos String. classpara esa columna), use un comparador que clasifique las cadenas segtin la configuracién regional actual 3, Sila clase de columna devuelta por TalsleModel . getColumnClassimplementos Comparable, use un ‘comparador que clasifique las cadenas segtin los valores devueltos por Comparable. comparete 4. Si se ha invocado un convertidor de cadenas para la tabla invocando ingConverter, use un ‘comparador que clasifique las representaciones de cadenas resultantes en funcién de la configuracién regional actual 5. Sino se aplica ninguna de las reglas anteriores, use un comparador que invoque test rinclos datos de la columna y clasifique las cadenas resultantes segiin la configuracién regional actual Para tipos mas sofisticados de clasificacién, subclase Tab leRowsortero su clase principal javax.swing.DefaultRowSorter. Para especificar el orden de clasificacién y la prioridad de clasificacion para las columnas, invoque setsorteys. Aqui hay un ejemplo que ordena la tabla utilizada en los ejemplos por las dos primeras columnas. La precedencia de las columnas en la clasificacién se indica mediante el orden de las claves de lasificacion en la lista de claves de clasificacion, En este caso, la segunda columna tiene la primera clave de clasificacién, por lo que las flas se ordenan por nombre y apellido. hitpsildocs.orace.com/javaseftutorialuswinglcomponentstable htm 13120 2rri2020 (Cémo usar ablas (Los Tutoriales de Java ™> Crear una GUI con JFC / Swing> Usar componentes Swing) Lista sortkeys new ArrayList (); sortkeys.add (nuevo RowSorter.SortKey (1, SortOrder. ASCENDING) ); sortkeys.add (nuevo RowSorter-SortKey (@, SortOrder ASCENDING) ); sorter. setSortkeys (sortkeys); ‘Ademés de reordenar los resultados, un clasificador de tablas también puede especificar qué filas se mostraran. Esto se conoce como filtrado , TableRowSoztezimplementa el fitrado Utiizando javax. swing. RowFi lterobjetos. RowF il tezimplementa varios métodos de fabrica que crean tipos comunes de filtros. Por ejemplo, regexF il verdevuelve un RowFi i terfiltro que se basa en una expresién regular En el siguiente cédigo de ejemplo, crea explicitamente un objeto clasificador para que luego pueda usarlo para especificar un filtro MyTableModel model = new MyTableModel (); sorter = new TableRowSorter (rodelo) ; tabla = nueva JTable (modelo); table.setRowSorter (clasificador); Luego, ftra segtin el valor actual de un campo de texto: private void newFilter () { RowFilter rf = null; /1 Si la expresién actual no se analiza, no actualice. tratar ( rf = RowFilter.regexFilter (filterText.getText (), @)5 } catch (java.util. regex.PatternsyntaxException e) { regreso; y Sorter. setRouFilter (rf); } En un ejemplo posterior, newPiLtex () se invoca cada vez que cambia el campo de texto. Cuando el usuario ingresa expresiones regulares complicadas, try. . .catchevita que la excepcién de sintaxis interfiera con la entrada. Cuando una tabla usa un clasificador, los datos que ven los usuarios pueden estar en un orden diferente al especificado por el modelo de datos, y pueden no incluir todas las filas especificadas por el modelo de datos. Los. datos que el usuario ve realmente se conocen como la vista y tienen su propio conjunto de coordenadas. JTabeproporciona métodos que convierten las coordenadas del modelo para ver las coordenadas - conver=Column ndexToViewy convertRowindexToV ew y que convierten las coordenadas de la vista en coordenadas del modelo column index’ ver jodely conver tRowIndex’oModel, NOTA: Cuando use un clasificador, recuerde siempre traducir las coordenadas de las celdas. El siguiente ejemplo retne las ideas discutidas en esta seccién. vableilterdeno. javaagrega un pequefio nimero de cambios a TalpicDeno. Estos incluyen los fragmentos de cédigo anteriores en esta seccién, que proporcionan un clasificador para la tabla principal y utilizan un campo de texto para proporcionar la expresién regular de filtrado. La siguiente captura de pantalla se muestra Tab lef: lterDemoantes de que se haya ordenado o filtrado. Observe que la fila 3 en el modelo sigue siendo la misma que la fila 3 en la vista: ESE Pos FirstName | __LastName Sport #ofYears | Vegetarian | | Katy ‘Smith ‘Snowboarding | @ < \Jonn Doe Rowing 3 Sue Black Knitting 2 iane [white ‘Sheed reading eI = Filter Text: stats; [Seledeu Row nview. 9 GelecteaRowin monet 3 | Siel usuario hace clic dos veces en la segunda columna, la cuarta fila se convierte en la primera fila, pero solo en la vista: hitpsildocs.orace.com/javaseftutorialuswinglcomponentstable htm 14120 ari2020 (Cémo usar tablas (Los Tutoriales de Java ™> Crear una GUI con JFC / Swing> Usar componentes Swing) s] E Bene =(5/ x! FirstName Last Name ~ Spert #ofvvears ‘Vegetarian jane whit Speed readin x Kathy Smith Snowboarding John Doe Rowing \Joe Brown Pool Filter Text: Status: [Selected Row in view: 0. Selected Rowin model. 3. Como se sefialé anteriormente, el texto que el usuario ingresa en el campo de texto "Fillrar texto" define un filtro que determina qué filas se muestran. Al igual que con la ordenacién, el fitrado puede hacer que las coordenadas de vista diverjan de las coordenadas del modelo: 4] S Demo -|5) x! FirstName |Last Name ~ Sport #of Years ‘Vegetarian Jane ite ‘Speed reading 20 vi Fitter Text: [Janel stats; [Seledeu Row nview- 0 GelecteaRowin monet i estd el cédigo que actualiza el campo de estado para reflejar la seleccién actual: table. getSelectionodel (). addListSelectionListener ( ‘nuevo ListSelectionListener () { public void valueChanged (evento ListSelectionévent) { int viewRow = table.getSelectedRow (); if (viewRow Crear una GUI con JFC / Swing> Usar componentes Swing) Ee joj: FirstName |_LastName Sport Forvears | Vegetarian ‘Rat Sinith Snnwhnardina ——[~ \John Doe : [Sue lRowing pee knitting oe peed reading [Poot None of the above El cédigo anterior es de Vais1eRenderDemo. java, Puede ejecutar ableRendexDeme(haga clic en el boton Iniciar) usando Java ™ Web Start ( descargue JDK 7 0 posterior ). O, para compilar y ejecutar el ejemplo usted mismo, onsulte al indice del ejemplo Usar otros editores Ya sea que esté configurando el editor para una sola columna de celdas (usando el tabi: 1B: \étodo) 0 para un tipo especifico de datos (usando el JTable setDefaultFaitormétodo), debe especificar el editor usando un argumento que se adhiera a la Tabece1 Edi torinterfaz, Afortunadamente, los DefaultCel1Editoraperos de clase esta interfaz y proporciona a los constructores permiten especificar un componente de edicién que es na TextField, JCheckBox0 JComboBox. Por lo general, no es necesario que especifique explicitamente una casilla de verificacién come editor, ya que las columnas con Booleandatos usan automaticamente un procesador y editor de casillas de verificacién olunn se {Qué sucede si desea especificar un editor que no sea un campo de texto, casilla de veriicacién o cuadro Combinado? Como Det axl te 1Eai torno es compatible con otros tipos de componentes, debe hacer un poco mas de trabajo, Necesita crear una clase que implemente la Tab loCe? Ed itorinterfaz, La AbstractCel1Bcitordlase es una buena superclase para usar, Implementa Tab Ja superinterfaz del usuario, lo que le cot 18 torahorra la molestia de implementar el cédigo de activacién de eventos necesario para los editores de celda. Su clase de editor de celdas necesita definir al menos dos métodos, got Cel 1EditorValuey get Tablece ‘Component. El getCel 1fditorvaluemétodo, requerido Por Cel1Edi tor, devuelve el valor actual de la celda. El get TableCe11dito=Componentmeétodo, requerido Por TaleCellEdi tor, debe configurar y devolver el componente que desea utilizar como editor. ‘Aqut hay una imagen de una tabla con un cuadro de dialogo que sirve, indirectamente, como editor de celdas. Cuando el usuario comienza a editar una celda en la columna Color favorito , aparece un botén (el verdadero editor de celdas) y abre el cuadro de dilogo, con el que el usuario puede elegir un color diferente, hitpsildocs.orace.com/javasefttorialuswingleomponentsitable htm 16120 ari2020 (Cémo usar ablas (Los Tutoriales de Java ™> Crear una GUI con JFC / Swing> Usar componentes Swing) ESE Seen Tag roo Pevewo hE ab serie 02 sample tot Hl TRC eB rier sone rt (Lowa ] [cent] Lance] Puede ejecutar "a leDialogiditvemo(haga clic en el botén Iniciar) usando Java ™ Web Start ( descargue JDK 7 0 posterior ). 0, para compilar y ejecutar el ejemplo usted mismo, consulte el indice del ejemplo Aqui esta el cédigo, tomado de colorsai .va, que implementa el editor de celdas. Coloréditor de clase publica extiende AbstractCelleditor inplenenta Tablecelleditor, ActionListener Color actual Color; 3 Botén de botén; Icolorchooser colorchooser; Didloge 3Dialog; estdtica final protegida String EDIT = "editar"; Coloréditor piblico () { ‘botén = nuevo JButton (); button. setActionConmand (EDITAR); button -addActionListener (esto); button. setorderPainted (falso) ; / Configure el didlogo que abre el botén. colorchooser = new 3Colorchooser (); dialog = IColorchooser.createDialog (botén, “Elige un color", verdadero, // modal colorchooser, esto, // OK botén controlador nul); // sin controlador de botén CANCELAR y public void actionPerforned (Actionfvent ) ( AF (EDIT-equals (e.getActionConnand ())) { // #1 usuario ha hecho clic en 1a celda, entonces 11 abre el didiogo. button. setBackground (currentColor); colorchooser.setColor (currentcolor); dialog.setvisible (verdadero); FireEditingStopped (); // Hacer que el renderizador vuelva a aparecer. } else {// £1 usuario presioné el botén “Aceptar” del cuadro de didlogo. hitpsildocs.orace.com/javasefttorialuswingleomponentsitable htm 1720 2rri2020 (Cémo usar ablas (Los Tutoriales de Java ™> Crear una GUI con JFC / Swing> Usar componentes Swing) currentColor = colorchooser.getColor (); > // Inplenente el nétodo CellEditor que AbstractCelleditor no hace. Objeto publico getCellEditorvalue () { return currentColors y /I Inplenente el nico nétodo definide por TablecellEditor. Conponente pablico getTablecelléditorconponent (tabla Iabie, valor del objeto, boolean isselected, int fila, columna int) { currentColor = (Color) valor; botén de retorno; y Como puede ver, el cédigo es bastante simple, La tinica parte que es un poco complicada es la llamada al CizeBditingStoppedfinal del controlador de accién del botén del editor. Sin esta llamada, el editor permaneceria activo, aunque el dialogo modal ya no sea visible. La llamada a le fireEdi t ingStoppedpermite ala tabla saber que Puede desactivar el editor, permitiendo que el renderizador maneje nuevamente la celda, Uso de un editor para validar texto introducido por el usuario Si el editor predeterminado de una celda permite la entrada de texto, obtendré alguna comprobacién de errores de forma gratuita si el tipo de celda se especifica como algo distinto de Stringo Object. La comprobacién de errores es Un efecto secundario de convertir el texto ingresado en un objeto del tipo adecuado. La verificacién automética de las cadenas ingresadas por el usuario ocurre cuando el editor predeterminado intenta crear una nueva instancia de la clase asociada con la columna de la celda. El editor predeterminado crea esta instancia utilizando un constructor que toma a Stringcomo argumento. Por ejemplo, en una columna cuyas celdas tienen tipo rnteger, cuando el usuario escribe "123", el editor predeterminado crea el correspondiente Tntecercédigo de uso equivalente anew Integer ("123"), Si el constructor produce una excepcién, el contorno de la celda se vuelve rojo y se niega a dejar que el foco se mueva fuera de la celda. Si implementa una clase utlizada como tipo de datos de columna, puede usar el editor predeterminado si su clase proporciona un constructor que toma un Gnico argumento de tipo String, Sile gusta tener un campo de texto como editor para una celda, pero desea personalizario, tal vez para verifcar ol texto ingresado por el usuario de manera mas estrcta o para reaccionar de manera diferente cuando el texto no es valido, puede cambiar el editor de celda para usar un texto formateado campo . Elcampo de texto formateado puede verificar el valor de forma continua mientras el usuario esta escribiendo o después de que el usuario haya indicado e! final de la escritura (por ejemplo, presionando Intro). El siguiente cédigo, tomado de una demostracién llamada ain leF'TPEditDemo. java, configura un campo de texto formateado como un editor que limita todos los valores enteros entre 0 y 100. Puede ejecutar Tab1lePTFRa i cDemo(haga dlic en el botén Iniciar) usando Java ™ Web Start ( descargue JDK 7 0 luego } 0, para compilar y ejecutar el ejemplo usted mismo, consulte el indice del ejemplo El siguiente cédigo convierte el campo de texto formateado en el editor de todas las columnas que contienen datos de tipo Integer table. setbefaultéditor (Integer.class, nuevo Integereditor (2, 108)); La Integeredi torcase se implementa como una subclase de D=‘au:1=ce1 120 corque utiliza un soporte en JormattedTextFielclugar del JTextFieldque DefaultCe21Editoradmite, Esto se logra al configurar primero un campo de texto formateado para usar un formato entero y tener los valores minimos y maximos especificados, utllzando la API descrita en Cémo usar las campos de texto formateado . A continuacién, anula la Defaultcel Edi toraplicacién de las get'TableCel 1EditorComponent, getCellEdi to: uey stopCel 1Edi t inglos métodos, la adicién de las operaciones que son necesarias para los campos de texto con formato. La anulacién de get Tab lece18aittorComponentestablece la propiedad de valor del campo de texto formateado (y no solo la propiedad de texto de fa que hereda Tex Field) antes de que se muestre el editor, La anulacién de getCe1 Edi torvalvemantiene el valor de la celda como Tateger, en lugar de, digamos, el Longvalor que el hitpsildocs.orace.com/javasefttorialuswingleomponentsitable htm 18120 2rri2020 (Cémo usar ablas (Los Tutoriales de Java ™> Crear una GUI con JFC / Swing> Usar componentes Swing) analizador del campo de texto formateado tiende a devolver. Finalmente, la anulacién le stopCe118ditingpermite verificar si el texto es valido, posiblemente evitando que se descarte el editor. Si el texto no es valido, su implementacién de stopCe! 1F Crear una GUI con JFC / Swing> Usar componentes Swing) ltodos los datos en lla columna Deporte , También selecciona ide forma inteligente los tamarios de lcolumna. Utiliza renderizadores para imostrar informacion sobre herramientas para las células deportivas. \TableDialoglditDemo|Usar otros editores (Modifica TableDemopara tener un editor y lun editor de celdas que muestren un color y le permitan elegir uno nuevo, usando un Ididlogo de seleccién de color. [Especificacién de informacién sobre \tableToolTipsD: lencabezados de lcolumna , lherramientas para lceldas ,Especificacion Ide informacion sobre lherramientas para [Muestra o6mo usar varias técnicas para Iconfigurar el texto de informacién sobre herramientas para celdas y encabezados ide columna. ITableSortDemo lOrdenar y filtrar Demuestra el clasificador predeterminado, \que permite al usuario ordenar columnas haciendo clic en sus encabezados. lOrdenar y filtrar Demuesira la clasificacién y el filtrado, y \cémo esto puede hacer que las ‘coordenadas de la vista diverjan de las ‘coordenadas del modelo limpresion Demuesira la impresion de a mesa |Como escribir un ide lista loyente de seleccién [Muestra cémo usar todos los modos de 'seleccién de lista, usando un detector de Iseleccién de lista que se comparte entre luna tabla y una lista. SharedModelDemo IEn ninguna parte ‘Se basa en ListSelect ionDemohacer \que el modelo de datos se comparta entre lla tabla y la lista. Si edita un elemento en la primera columna de la tabla, el nuevo valor se refleja on la lista hitpsildocs.orace.com/javaseftutorialuswingleomponentsitabe htm 20120

También podría gustarte