Technical Support
🟢 Online now
Hello 👋

How can we help you today?
Contact on WhatsApp
B4X Store
jdashboardUI / Archivos y compresión / FileChooserUtils
Archivos y compresión

FileChooserUtils

Helpers para filtros de extensión, filtros combinados y selección inicial de JavaFX FileChooser

Buscar en toda jdashboardUI
Fuente
jdashboardUI.b4xlib · Solo API pública
Idioma de la tienda: es

Archivos y compresión · jdashboardUI · B4J · StaticCode · JavaFX FileChooser

FileChooserUtils centraliza el código repetitivo de JavaFX necesario para configurar objetos FileChooser.ExtensionFilter usando listas normales de B4J.

Es útil cuando una aplicación abre o guarda documentos, imágenes, backups ZIP, proyectos u otros formatos conocidos.

Qué permite hacer

  • Agregar un filtro de extensión por cada descripción.
  • Agregar un filtro combinado tipo "Archivos compatibles".
  • Agregar opcionalmente All Files.
  • Combinar filtro general + filtros individuales + All Files.
  • Seleccionar el filtro inicial por su descripción.

Regla importante: las listas deben tener el mismo tamaño

Todos los métodos Add esperan que Descriptions.Size = Filters.Size.

Dim Descriptions As List
Descriptions.Initialize2(Array As String( _
    "Archivos ZIP", _
    "Documentos PDF", _
    "Archivos de texto"))

Dim Filters As List
Filters.Initialize2(Array As String( _
    "*.zip", _
    "*.pdf", _
    "*.txt"))

Si los tamaños son diferentes, la implementación actual escribe Extension filters not added en el Log y termina sin modificar el FileChooser.

AddExtensionFilters

Agrega solamente los filtros individuales.

Dim FC As FileChooser
FC.Initialize
FC.Title = "Abrir documento"

Dim Descriptions As List
Descriptions.Initialize2(Array As String("Documentos PDF", "Archivos de texto"))

Dim Filters As List
Filters.Initialize2(Array As String("*.pdf", "*.txt"))

FileChooserUtils.AddExtensionFilters(FC, Descriptions, Filters)

Dim Selected As String = FC.ShowOpen(MainForm)
If Selected <> "" Then Log(Selected)

AddExtensionFilters2

Agrega primero un filtro combinado y después todos los filtros individuales.

FileChooserUtils.AddExtensionFilters2( _
    FC, Descriptions, Filters, "Archivos compatibles")

Por ejemplo, *.pdf, *.txt y *.zip pueden aparecer juntos bajo Archivos compatibles y seguir disponibles como filtros individuales.

AddExtensionFilters3

Agrega los filtros individuales y opcionalmente la entrada JavaFX All Files (*.*).

FileChooserUtils.AddExtensionFilters3( _
    FC, Descriptions, Filters, True)

Usa False cuando no quieras permitir una selección sin restricciones.

AddExtensionFilters4

Es el helper completo utilizado internamente por los demás métodos Add.

FileChooserUtils.AddExtensionFilters4( _
    FC, _
    Descriptions, _
    Filters, _
    True, _
    "Archivos compatibles", _
    True)
Parámetro Significado
FC FileChooser que se configurará
Descriptions Nombres visibles para el usuario
Filters Patrones JavaFX como *.zip
Merge Crea un filtro combinado si es True
MergeName Nombre visible del filtro combinado
AllFiles Agrega All Files (*.*) si es True

Seleccionar el filtro predeterminado

SetSelectedExtensionFilter selecciona el primer filtro existente cuya descripción coincida exactamente con el texto indicado.

FileChooserUtils.SetSelectedExtensionFilter(FC, "Archivos ZIP")

Para un filtro combinado:

FileChooserUtils.SetSelectedExtensionFilter(FC, "Archivos compatibles")

Para el filtro sin restricciones:

FileChooserUtils.SetSelectedExtensionFilter(FC, "All Files")

La comparación se realiza contra la descripción, no contra el patrón de extensión.

Ejemplo completo: elegir dónde guardar un backup

Private Sub ChooseBackupFile As String
    Dim FC As FileChooser
    FC.Initialize
    FC.Title = "Guardar backup"

    Dim Descriptions As List
    Descriptions.Initialize2(Array As String("Archivos ZIP"))

    Dim Filters As List
    Filters.Initialize2(Array As String("*.zip"))

    FileChooserUtils.AddExtensionFilters3( _
        FC, Descriptions, Filters, True)

    FileChooserUtils.SetSelectedExtensionFilter( _
        FC, "Archivos ZIP")

    Return FC.ShowSave(MainForm)
End Sub

Private Sub CreateBackup
    Dim Target As String = ChooseBackupFile
    If Target = "" Then Return

    ' Los filtros no agregan automáticamente la extensión.
    If Target.ToLowerCase.EndsWith(".zip") = False Then
        Target = Target & ".zip"
    End If

    Dim Zip As ZipFile
    Zip.Initialize(Target)
    Zip.SmartCompression = True

    If Zip.AddFolderSmart(File.Combine(File.DirApp, "data")) = False Then
        Log(Zip.LastError)
        Return
    End If

    If Zip.ValidateArchive Then
        Log("Backup creado: " & Target)
    Else
        Log("Backup inválido: " & Zip.LastError)
    End If
End Sub

Aquí FileChooserUtils mejora la experiencia de selección y ZipFile se ocupa del archivo ZIP.

Comportamiento de la extensión

El helper controla qué archivos se muestran en el selector. No agrega automáticamente una extensión que falte en una ruta devuelta por ShowSave.

If Path.ToLowerCase.EndsWith(".zip") = False Then
    Path = Path & ".zip"
End If

Módulos relacionados de jdashboardUI

  • FileUtils — copia/eliminación recursiva, renombrado, subcarpetas y fechas.
  • ZipFile + ZipFileHeader — creación, cifrado, lectura, validación e inspección de ZIP.

Buenas prácticas

  • Mantén Descriptions y Filters con el mismo número de elementos.
  • Usa patrones JavaFX como *.zip, *.pdf o *.txt.
  • Usa un MergeName claro.
  • Ejecuta SetSelectedExtensionFilter después de agregar los filtros.
  • Recuerda que un filtro de guardado no garantiza ni agrega automáticamente la extensión del nombre.