Tables & Data · jdashboardUI · B4J / JavaFX
JTableview es una tabla visual avanzada para B4J. No es solamente un visor de filas: combina edición, tipos de columna, fórmulas tipo hoja de cálculo, filtros, búsqueda, navegación por teclado, temas, soporte multilingüe, celdas con controles y utilidades para trabajar con SQLite.
Características destacadas
- Fórmulas A1 como
=A1+B1,=B2*C2o=SUM(A1:A10). - Funciones personalizadas con
SetFormulaFunction. - Fill handle para copiar valores y fórmulas ajustando referencias relativas.
- Multilingüe:
Autoy códigos comoen,es,fr,de,pt,ja,zhy muchos más. - 29 temas visuales incluidos en la versión analizada.
- Filtros acumulativos y búsqueda desde la interfaz.
- Navegación tipo Excel con Tab, Enter, Home, End, Ctrl+flechas y Delete.
- Edición de celdas y eventos de cambio.
- Tipos de columna para texto, números, fechas, hora, porcentaje, moneda e imágenes.
- Celdas enriquecidas con botones, checkbox, switch, imágenes, iconos y contenido compuesto.
- Carga de datos desde SQLite y operaciones de actualización/eliminación.
- Altura fija o automática de filas.
Uso desde el Designer
JTableview es un Custom View. Puedes agregarlo desde el Designer y declararlo:
Sub Class_Globals
Private Root As B4XView
Private xui As XUI
Private JTableview1 As JTableview
End Sub
Private Sub B4XPage_Created (Root1 As B4XView)
Root = Root1
Root.LoadLayout("Main")
End Sub
Designer Properties
| Propiedad | Tipo | Predeterminado | Descripción |
|---|---|---|---|
| TextColor | Color | 0xFF595959 |
Color del texto |
| EditMode | Boolean | True |
Activa la barra de edición / fórmulas |
| EditThemeIcon | Boolean | True |
Permite cambiar el tema desde el control |
| FilterEnabled | Boolean | False |
Activa la interfaz de filtros |
| Language | String | Auto |
Idioma interno del componente |
| Showmenu | Boolean | True |
Menú contextual |
| CornerRadius | Int | 7 |
Radio de esquinas |
| TableViewTheme | String | Purple |
Tema visual |
| BackgroundColor | Color | 0xFFFFFFFF |
Fondo de la barra |
DesignerCreateView es público por el contrato de Custom View, pero lo invoca B4J automáticamente.
Initialize
JTableview1.Initialize(Me, "JTableview1")
En la versión analizada no existe un método público AddToParent de JTableview.
Propiedades B4X
Los accesores públicos getX/setX compatibles se usan como propiedades B4X normales:
JTableview1.Language = "es"
JTableview1.FilterEnabled = True
JTableview1.Currency = "$"
JTableview1.ExcelKeyboardNavigation = True
JTableview1.SelectedRow = 2
Log(JTableview1.Language)
Log(JTableview1.SelectedRow)
Log(JTableview1.ColumnsCount)
Propiedades públicas encontradas:
| Propiedad | Acceso | Tipo |
|---|---|---|
| TextTVEmpty | escritura | String |
| Language | lectura / escritura | String |
| CurrentTableColor | lectura | Int |
| Corner | escritura | Int |
| FilterEnabled | lectura / escritura | Boolean |
| BarBackgroundColor | escritura | Int |
| TableSingleCellSelection | escritura | Boolean |
| Currency | lectura / escritura | String |
| ExcelKeyboardNavigation | lectura / escritura | Boolean |
| AllColumnTableWidth | escritura | Float |
| ColumnsCount | lectura | Int |
| SelectedRow | lectura / escritura | Int |
| CellTextColor | escritura | Int |
| CellFont | escritura | Font |
Métodos como getColumnWidth(Index), getRowHeight(Index) y setColumnWidth(Index, Width) siguen siendo métodos porque requieren parámetros adicionales.
Ejemplo completo: inventario con fórmulas
Sub Class_Globals
Private Root As B4XView
Private xui As XUI
Private JTableview1 As JTableview
End Sub
Private Sub B4XPage_Created (Root1 As B4XView)
Root = Root1
Root.LoadLayout("Main")
Dim Columns As List
Columns.Initialize
Columns.AddAll(Array As String("Product", "Price", "Stock", "Total"))
JTableview1.Setcolumns(Columns)
JTableview1.Language = "es"
JTableview1.Currency = "$"
JTableview1.ThemeBlue
JTableview1.SetColumnTypeByname("Price", JTableview1.COLUMN_TYPE_CURRENCY)
JTableview1.SetColumnTypeByname("Stock", JTableview1.COLUMN_TYPE_NUMBERS)
JTableview1.SetColumnTypeByname("Total", JTableview1.COLUMN_TYPE_CURRENCY)
JTableview1.add(Array As Object( _
JTableview1.CreateLabel("Keyboard", "Product"), _
JTableview1.CreateLabel("29.95", "Price"), _
JTableview1.CreateLabel("12", "Stock"), _
JTableview1.CreateLabel("0", "Calculated")))
JTableview1.add(Array As Object( _
JTableview1.CreateLabel("Mouse", "Product"), _
JTableview1.CreateLabel("14.50", "Price"), _
JTableview1.CreateLabel("25", "Stock"), _
JTableview1.CreateLabel("0", "Calculated")))
JTableview1.SetFormula(3, 0, "=B1*C1")
JTableview1.SetFormula(3, 1, "=B2*C2")
JTableview1.FormatAllRows
End Sub
Private Sub JTableview1_CellClick(ColIndex As Int, RowIndex As Int)
Log("Cell: " & ColIndex & ", " & RowIndex)
End Sub
Private Sub JTableview1_CellTextChanged(cellvalued As String)
Log("New value: " & cellvalued)
End Sub
La versión actual no expone un método público llamado AddRow. Para insertar datos usa add, addAtll o addAtll2.
Fórmulas
Puedes asignar fórmulas desde código:
JTableview1.SetFormula(2, 0, "=A1+B1")
Dim Formula As String = JTableview1.GetFormula(2, 0)
Funciones incorporadas encontradas en la implementación:
SUM/SUMAAVERAGE/PROMEDIOMIN/MINIMOMAX/MAXIMOCOUNT/CONTARABSIF/SIPOWER/POTENCIASQRT/RAIZROUND/REDONDEARROUNDUPROUNDDOWNMOD/RESIDUO
También admite rangos, paréntesis, operadores + - * / y comparaciones.
Función personalizada
Dim Parameters As List
Parameters.Initialize
Parameters.Add("value")
JTableview1.SetFormulaFunction("DOUBLE", Parameters, "value*2")
JTableview1.SetFormula(2, 0, "=DOUBLE(A1)")
Para eliminarla:
JTableview1.RemoveFormulaFunction("DOUBLE")
Las funciones personalizadas se almacenan en la configuración de JTableview.
Fill handle
En EditMode se muestra el manejador de relleno. Al arrastrarlo, los valores literales se copian y las fórmulas ajustan sus referencias relativas.
Multilingüe
JTableview incluye localización interna mediante JLocalizator.
JTableview1.Language = "Auto"
Auto sigue el idioma del sistema. También puedes forzar un idioma:
JTableview1.Language = "es"
JTableview1.Language = "en"
JTableview1.Language = "fr"
Idiomas declarados en Designer: ar, bn, cs, de, en, es, fa, fr, he, hi, it, ja, ko, my, nl, pa, pl, pt, ro, ru, sr, th, tr, uk, vi, zh.
Temas
JTableview incluye una amplia colección de temas. Puedes seleccionar uno desde Designer o aplicarlo por código:
JTableview1.ThemePurple
JTableview1.ThemeBlue
JTableview1.ThemeGreen
JTableview1.ThemeWhite
JTableview1.ThemeOffice ' No existe: no usar
Temas públicos reales:
ThemePurple, ThemeGreen, ThemeBlue, ThemeBrown, ThemeSkyBlue, ThemeYellow, ThemeRed, ThemeBlack, ThemeOrange, ThemePurple2, ThemeSkyBlue2, ThemeBlue2, ThemeGreen2, ThemeBrown2, ThemeYellow2, ThemeRose, ThemeSkyRed, ThemeRed2, ThemeBlack2, ThemeOrange2, ThemePurple3, ThemeWhite, ThemeWhiteOutline, ThemeLightGray, ThemeLightBlue, ThemeLightPink, ThemeLightGreen, ThemeLightPurple, ThemeTransparent.
ThemeOfficese muestra arriba únicamente como ejemplo de un nombre que no existe y no debe usarse.
Al cambiar de tema se dispara TableColorChanged.
Columnas y tipos
Constantes públicas:
| Constante | Valor |
|---|---|
| COLUMN_TYPE_TEXT | 1 |
| COLUMN_TYPE_NUMBERS | 2 |
| COLUMN_TYPE_DATE | 3 |
| COLUMN_TYPE_TIME | 4 |
| COLUMN_TYPE_LONGDATE | 5 |
| COLUMN_TYPE_PERCENTAGE | 6 |
| COLUMN_TYPE_CURRENCY | 7 |
| COLUMN_TYPE_IMAGE | 8 |
JTableview1.SetColumnTypeByname("Price", JTableview1.COLUMN_TYPE_CURRENCY)
JTableview1.SetColumnTypeByIndex(1, JTableview1.COLUMN_TYPE_NUMBERS)
JTableview1.HideColumn(2)
JTableview1.ShowColumn(2, 120)
JTableview1.setColumnWidth(0, 220)
JTableview1.SetAutoTableWidth
Filtros, búsqueda y ordenamiento
Activa filtros con:
JTableview1.FilterEnabled = True
La implementación permite filtros por columna y filtros acumulados. El evento público es:
Private Sub JTableview1_FilterChanged(ActiveFilters As Int)
Log("Filters: " & ActiveFilters)
End Sub
La búsqueda forma parte de la interfaz interna del control; no existe un método público independiente Search en JTableview.
El ordenamiento usa el estado sortable de las columnas JavaFX.
Navegación tipo Excel
JTableview1.ExcelKeyboardNavigation = True
Comportamiento implementado:
- Tab / Shift+Tab: siguiente / anterior columna.
- Enter / Shift+Enter: siguiente / anterior fila.
- Home / End: primera / última columna.
- Ctrl+Home: primera celda.
- Ctrl+End: última celda.
- Ctrl+flechas: desplazamiento hacia límites.
- Delete: limpia el contenido editable y su fórmula.
Celdas con controles
JTableview puede construir contenido visual más avanzado que texto:
CreateLabel/CreateLabel2CreateCheckboxCreateButton/CreateButton2CreateCellButton/CreateCellButton2CreateJSwitchCreateJImage,CreateJImage2,CreateJImage3CreateImageAndTextCreateTextAndIconCreateCellContentAddCellContentElement
Dos botones en una celda
Dim CellElements As List
CellElements.Initialize
Dim NormalFont As Font = fx.CreateFont("Arial", 12, False, False)
Dim IconFont As Font = fx.CreateFont("FontAwesome", 12, False, False)
CellElements.Add(JTableview1.CreateCellButton( _
"edit", "Edit", NormalFont, Chr(0xF044), _
xui.Color_White, xui.Color_White, IconFont, _
0xFF258A61, 6, 72dip, "Edit record"))
CellElements.Add(JTableview1.CreateCellButton2( _
"delete", "Delete", xui.Color_White, NormalFont, Chr(0xF2ED), _
xui.Color_White, IconFont, 0xFFCC4545, 6, 82dip, "Delete record"))
Dim ActionsCell As B4XView = JTableview1.CreateCellContent(CellElements)
SQLite
Métodos públicos principales:
LoadSQLTableLoadSQLTable2LoadSQLTable3UpdateSqlTableDeleteDataFromTableSqlDeleteTableSqlListAllTablesDB
Ejemplo:
Private SQL1 As SQL
SQL1.InitializeSQLite(File.DirApp, "shop.db", True)
JTableview1.LoadSQLTable(File.Combine(File.DirApp, "shop.db"), "products", SQL1)
UpdateSqlTable reconstruye la tabla y no es un sistema de migraciones de esquema. No debe asumirse que conservará constraints, índices o relaciones complejas.
Eventos públicos
TextCell(Value As Object)SelectedRowChanged(Index As Int, row() As Object)TableColorChanged(Color As Int)CheckTable(CheckedSender As jCheckbox, Checked As Boolean)ButtonTableAction(BtSender As jButton)SwichTable(SwichSender As jSwich, Checked As Boolean)KeyPressed(KeyCode As Object, IsControlDown As Object)CellTextChanged(cellvalued As String)CellClick(ColIndex As Int, RowIndex As Int)DeleteRow(RowIndex As Int)CreateRow(RowIndex As Int, row() As Object)TableSqlUpdated(Success As Boolean)SqlDataTableDeleted(Success As Boolean)SqlTableDeleted(Success As Boolean)TableSqlLoad(Success As Boolean)FilterChanged(ActiveFilters As Int)
Observaciones de la versión analizada
La implementación actual tiene algunas inconsistencias internas entre ciertas declaraciones de eventos y su llamada efectiva. La documentación irá ajustándose conforme revisemos JTableview en profundidad.
API pública
La referencia muestra solo Subs públicas. Los accesores B4X compatibles se presentan como propiedades y no como llamadas getX/setX.
Estructura y datos
Initialize, SetFixedRowHeight, HideColumn, ShowColumn, DesignerCreateView, add, addAtll, addAtll2, clear, get, items, FormatAllRows, Setcolumns, SetColumnTypeByname, SetColumnTypeByIndex, setColumnWidth, getColumnWidth, getRowHeight, SetAutoTableWidth, RefreshRowHeights, EnableAutoRowHeight.
Fórmulas
GetExcelColumnName, SetFormula, GetFormula, SetFormulaFunction, RemoveFormulaFunction.
Selección
SelectFullRow, SelectAndClear.
Encabezados
SetColumnHeaderAddIcon, SetColumnHeaderAddTextAndIcon, ChangeAllHeadersColor.
Celdas visuales
CreateLabel, CreateLabel2, CreateCheckbox, CreateButton, CreateButton2, CreateCellButton, CreateCellButton2, CreateCellContent, AddCellContentElement, CreateJSwitch, CreateImageAndText, CreateJImage, CreateJImage2, CreateJImage3, CreateTextAndIcon.
SQLite
LoadSQLTable, LoadSQLTable2, LoadSQLTable3, UpdateSqlTable, DeleteTableSql, DeleteDataFromTableSql, ListAllTablesDB.
Relacionados
- JDataset: data binding y navegación CRUD sobre SQLite.
- TableViewUtils: helpers estáticos para crear contenido visual destinado a tablas.