Tarea JTable - GiselleE/Lenguajes-GiselleEli GitHub Wiki

Con el JTable clase puede mostrar tablas de datos, permitiendo opcionalmente al usuario editar los datos. JTable no contiene datos o caché; es simplemente una vista de los datos. Aquí está una foto de una mesa típica que se muestra dentro de un panel de desplazamiento:

Una instantánea de TableDemo, que muestra una tabla típica. lase JTable

java.lang.Object java.awt.Component java.awt.Container javax.swing.JComponent javax.swing.JTable Todas las interfaces implementadas: ImageObserver , MenuContainer , Serializable , EventListener , Accessible , CellEditorListener , ListSelectionListener , RowSorterListener , TableColumnModelListener , TableModelListener , Scrollable

público class JTable extends JComponent implements TableModelListener , Scrollable , TableColumnModelListener , ListSelectionListener , CellEditorListener , Accessible , RowSorterListener El JTable se utiliza para visualizar y editar tablas de dos dimensiones regulares de células. Ver Cómo usar las Tablas en el Tutorial de Java para la documentación y ejemplos del uso orientado a las tareas JTable . El JTable tiene muchas instalaciones que permiten la personalización de su representación y edición, pero proporciona valores predeterminados para estas características por lo que las tablas simples se pueden configurar fácilmente. Por ejemplo, para establecer una mesa con 10 filas y 10 columnas de números:

  TableModel DataModel = new AbstractTableModel () {
      public int getColumnCount () {return 10; }
      public int GetRowCount () {return 10;}
      public Object getValueAt (int fila, int col) {return new Integer (fila * col); }
  };
  Tabla JTable = new JTable (modelo de datos);
  JScrollPane panel de desplazamiento = new JScrollPane (tabla);

JTable s normalmente se colocan dentro de un JScrollPane . Por defecto, un JTable ajustará su anchura tal que una barra de desplazamiento horizontal no es necesario. Para permitir una barra de desplazamiento horizontal, invocar setAutoResizeMode (int) con AUTO_RESIZE_OFF . Tenga en cuenta que si usted desea utilizar un JTable en una vista independiente (fuera de un JScrollPane ) y quiere el encabezado aparece, lo puede conseguir usando getTableHeader () y lo mostrará por separado.

Para habilitar la clasificación y filtrado de filas, utilice un RowSorter . Puede configurar un clasificador de fila en una de dos maneras:

Directamente establecer el RowSorter . Por ejemplo: table.setRowSorter (nueva TableRowSorter (modelo)) . Ajuste el autoCreateRowSorter propiedad a la verdadera , por lo que el JTable crea una RowSorter para usted. Por ejemplo: setAutoCreateRowSorter (verdadero) . En el diseño de aplicaciones que utilizan el JTable vale la pena prestar atención a las estructuras de datos que representarán a los datos de la tabla. El DefaultTableModel es una implementación de modelo que utiliza un vector de Vector s de Object s para almacenar los valores de celda. Así como la copia de los datos desde una aplicación en el DefaultTableModel , también es posible envolver los datos en los métodos de la TableModel interfaz de modo que los datos se pueden pasar a la JTable directamente, como en el ejemplo anterior. Esto a menudo resulta en aplicaciones más eficientes porque el modelo es libre de elegir la representación interna que mejor se adapte a los datos. Una buena regla general para decidir si usar el AbstractTableModel o la DefaultTableModel es utilizar el AbstractTableModel como clase base para la creación de subclases y la DefaultTableModel cuando no se requiere de subclases.

El directorio "TableExample" en el área de demostración de la distribución fuente da una serie de ejemplos completos de JTable uso, cubre cómo el JTable puede ser utilizado para proporcionar una vista editable de datos tomados de una base de datos y cómo modificar las columnas de la pantalla utilizar procesadores especializados y editores.

El JTable utiliza enteros exclusivamente para referirse a las filas y las columnas de la modelo que se muestra. El JTable simplemente toma un rango de celdas de tabla y utiliza getValueAt (int, int) para recuperar los valores de la modelo durante la pintura. Es importante recordar que los índices de columna y fila devueltos por varios JTable métodos son en términos del JTable (la vista) y no son necesariamente los mismos índices utilizados por el modelo.

Por defecto, las columnas pueden ser reorganizados en el JTable para que las columnas de la vista aparecen en un orden diferente a las columnas en el modelo. Esto no afecta a la aplicación del modelo en absoluto: cuando se reordenan las columnas, el JTable mantiene el nuevo orden de las columnas internas y convierte sus índices de columna antes de consultar el modelo.

Así, al escribir un TableModel , no es necesario para detectar eventos de reordenamiento columna que el modelo se preguntó en su propio sistema de coordenadas, independientemente de lo que está sucediendo en la vista. En el área ejemplos hay una demostración de un algoritmo de clasificación que hace uso de exactamente esta técnica para interponer todavía otro sistema en el que se cambia el orden de las filas, en lugar de la orden de las columnas de coordenadas.

Del mismo modo cuando se utiliza la funcionalidad de clasificación y filtrado proporcionado por RowSorter el subyacente TableModel no necesita saber cómo hacer la clasificación, en lugar RowSorter se encargará de ello. Coordinar las conversiones serán necesarios cuando se utilizan los métodos basados ​​en la fila de JTable con el subyacente TableModel . Todos JTable métodos basados ​​fila s son en términos de la RowSorter , que no es necesariamente la misma que la de la subyacente TableModel . Por ejemplo, la selección es siempre en términos de JTable , para que cuando se utiliza RowSorter tendrá que convertir usando convertRowIndexToView o convertRowIndexToModel . A continuación se muestra cómo convertir coordenadas de JTable a la del modelo subyacente:

int [] = table.getSelectedRows selección (); for (int i = 0; i <selection.length; i ++) { selección [i] = table.convertRowIndexToModel (selección [i]); } // Selección es ahora en términos de la TableModel subyacente

Por defecto, si la clasificación está activada JTable persistirá la selección y alturas variables de fila en términos del modelo de clasificación. Por ejemplo, si la fila 0, en términos del modelo subyacente, se selecciona actualmente, después de la fila de tipo 0, en términos del modelo subyacente será seleccionado. Visualmente la selección puede cambiar, pero en términos del modelo subyacente seguirá siendo el mismo. La única excepción a esto es si el índice modelo ya no es visible o se eliminó. Por ejemplo, si la fila 0 en términos de modelo se filtró a cabo la selección estará vacía después de la clase.

J2SE 5 añade métodos al JTable para proporcionar un cómodo acceso a algunas de las necesidades de impresión más comunes. Simples nueva impresión () métodos permiten la adición rápida y fácil de imprimir el apoyo a su aplicación. Además, un nuevo getPrintable (javax.swing.JTable.PrintMode, java.text.MessageFormat, java.text.MessageFormat) método está disponible para las necesidades de impresión más avanzados.

En cuanto a todos los JComponent clases, puede utilizar InputMap y ActionMap asociar una acción objeto con un KeyStroke y ejecutar la acción en las condiciones especificadas.

Atención: oscilación no es seguro para subprocesos. Para obtener más información, consulte la Política de roscado de oscilación .

Advertencia: Serialized objetos de esta clase no serán compatibles con futuras versiones de Swing. El apoyo serialización actual es apropiada para el almacenamiento a corto plazo o RMI entre aplicaciones que se ejecutan la misma versión de Swing. A partir de 1.4, el soporte para el almacenamiento a largo plazo de todos JavaBeans TM ha sido añadido a la java.beans paquete. Por favor, consulte XMLEncoder .