Esta página fue traducida automáticamente del portugués y puede contener errores. La versión en portugués es la canónica.
Group
Group agrupa componentes “chequeables” (option, switch y cualquier Checkable) para selección mutuamente exclusiva — comportamiento de radio button. Cuando un miembro se marca, los demás se desmarcan automáticamente, opcionalmente con transición animada (fade). No es un Component: no dibuja nada, es solo un registro de miembros + la lógica de exclusión.
🟢 · Paquete:
dev.crossfly.ui· Extiende:java.lang.Object(no es visual) · Estilo: — (sin estilo propio)
Cuándo usar
- Transformar un conjunto de
optionen radio buttons exclusivos. - Hacer exclusivo un conjunto de
switcho cualquierCheckabletuyo.
Cuándo NO usar
Apariencia
Ninguna. Group es puramente lógico. La apariencia de cada botón es responsabilidad de los miembros (que deben ser componentes visuales chequeables).
Ejemplo completo (copiar, pegar y ejecutar)
package com.exemplo;
import dev.crossfly.ui.*;
import dev.crossfly.ui.layout.*;
/** Pantalla principal ejecutable. Apunta el launcher (classname) y corre: gradlew :lwjgl3:run */
public class MainWindow extends Window
{
@Override
public void onShow() throws Exception
{
super.onShow();
setLayout(new VerticalLayout());
Label saida = new Label("Selecionado: Cartão");
add(LAY_AUTO, saida);
// Group hace las Options mutuamente exclusivas (radio), con fade al cambiar
Group g = new Group().fade(true);
Option[] ops = {
new Option("Cartão").group(g).checked(true),
new Option("Boleto").group(g),
new Option("Pix").group(g)
};
for (Option o : ops)
{
// Group no guarda el seleccionado: cada miembro avisa y nosotros leemos isChecked()
o.onAction(c -> {
for (Option x : ops)
if (x.isChecked())
saida.setText("Selecionado: " + x.text);
});
add(LAY_AUTO, o);
}
}
}
Los fragmentos siguientes muestran solo el núcleo (lo que va dentro de
onShow()). Para ejecutar, colócalos en el esqueletoMainWindowde arriba.
Uso básico
Group g = new Group().fade(true); // fade = transición animada
Option a = new Option("Opção A").group(g);
Option b = new Option("Opção B").group(g);
Option c = new Option("Opção C").group(g);
container.add(LAY_AUTO, a);
container.add(LAY_AUTO, b);
container.add(LAY_AUTO, c);
// Al marcar cualquiera, las demás se desmarcan con fade.
Constructores
| Constructor | Descripción |
|---|---|
Group() |
Grupo vacío, sin fade. |
Propiedades y personalización
| Propiedad / método | Tipo | Por defecto | Qué hace |
|---|---|---|---|
fade(boolean) |
Group (fluido) |
false |
Activa/desactiva la transición animada de selección. |
fade |
boolean (campo) |
false |
Estado del fade (lectura). |
add(Component) |
void |
— | Registra un miembro (ignora duplicado, por identidad). |
remove(Component) |
void |
— | Elimina un miembro (no-op si no es miembro). |
select(Component sender) |
void |
— | Desmarca todos los miembros excepto el sender. |
Normalmente no llamas a
add/selectdirectamente: el propio chequeable se registra vía.group(group)y llama aselect(this)cuando se marca.
Callbacks y eventos
Group no tiene callbacks. Reacciona a los cambios en el onAction de cada miembro y consulta isChecked().
Estados
Group no guarda “cuál está seleccionado” — solo garantiza que los demás queden apagados cuando alguien avisa que fue marcado. No hay getSelected(): consulta el estado en cada miembro (isChecked()).
Descubrir qué miembro está seleccionado
Group g = new Group();
Option[] ops = {
new Option("Cartão").group(g).checked(true),
new Option("Boleto").group(g),
new Option("Pix").group(g)
};
for (Option o : ops)
container.add(LAY_AUTO, o);
// En algún punto (ej.: botón "Confirmar"):
for (Option o : ops)
if (o.isChecked())
System.out.println("selecionado: " + o.text);
Buenas prácticas
- Deja el registro a cargo del componente:
.group(g)ya llama agroup.add(this)internamente. - La exclusividad solo funciona porque
Option/Switchllaman aselect(this)al ser marcados; unCheckablepropio debe hacer lo mismo.
Errores comunes
- Buscar un
getSelected()inexistente — itera por los miembros consultandoisChecked(). - Olvidar
.group(g)en algún miembro: queda fuera de la exclusión mutua.