JavaFX · FXML · Groovy · GroovyFX

Controles para
extender FXML

GrooveFX agrega controles de flujo a FXML: iteración, condicionales y bifurcadores multi-caso directamente en el marcado XML. Sin DSL. Sin reemplazar FXML.

Java 17+ Apache Groovy 4 JavaFX 17+ GraalVM / GluonFX Apache 2.0
<?import page.codeberg.rrangelo.groovefx.IterablePane?>

<VBox>
    <IterablePane items="{myList}">
        <HBox>
            <Label text="{item.name}" />
            <Label text="{item.email}" />
        </HBox>
    </IterablePane>
</VBox>
<?import page.codeberg.rrangelo.groovefx.ConditionalPane?>

<ConditionalPane test="{condition}">
    <then>
        ...
    </then>
    <else>
        ...
    </else>
</ConditionalPane>
<?import page.codeberg.rrangelo.groovefx.DynamicPane?>

<DynamicPane test="{user.role}">
    <when value="ADMIN">
        ...
    </when>
    <when value="USER">
        ...
    </when>
    <default>
        ...
    </default>
</DynamicPane>
// En memoria
PaginatedList<User> paginated = new PaginatedList<>(allUsers);
paginated.setPage(0, 10);

// Desde base de datos
PaginatedList<User> paginated = new PaginatedList<>();
paginated.setAction((page, size, filters, sort) -> {
    Page<User> result = userRepository.findAll(
        PageRequest.of(page, size)
    );
    paginated.setTotalItems((int) result.getTotalElements());
    paginated.setTotalPages(result.getTotalPages());
    return result.getContent();
});
paginated.setPage(0, 10);

reactividad

Bindings de JavaFX

Los componentes escuchan ObservableValue y se actualizan automáticamente ante cambios de estado.

paginación

PaginatedList

Modelo de paginación listo para usar, compatible con listas en memoria y con cualquier ORM o repositorio de base de datos.

compatibilidad

Sin restricciones de stack

Funciona con Java, Groovy y GroovyFX. Compatible con GraalVM y GluonFX. Sin DSL, sin hacks de reflexión.

IterablePane

Itera una lista usando el layout del contenedor padre.

ConditionalPane

Bifurcador booleano con ramas <then> y <else>.

DynamicPane

Multi-caso con <when> y <default>.

PaginatedList

Modelo de datos puro para paginación en memoria o DB.

ConditionPane

Clase base con deepClone y render compartidos.

PaginateAction

Interfaz implementable con lambda en Java o closure en Groovy.

Java

17 o superior (LTS)

Apache Groovy

4.x

JavaFX

17 o superior

provided por la aplicación

GraalVM / GluonFX

Compatible

opcional

<dependency>
    <groupId>page.codeberg.rrangelo</groupId>
    <artifactId>groovefx</artifactId>
    <version><!-- version --></version>
</dependency>

Si GrooveFX te resulta útil, podés apoyar su desarrollo.