Esta página fue traducida automáticamente del portugués y puede contener errores. La versión en portugués es la canónica.
Cómo usar checkbox y radio (Option y Group)
Propósito. Ofrecer opciones marcables. Un Option aislado funciona como checkbox
(activa/desactiva independiente). Varios Option en el mismo Group funcionan como radio
buttons (solo uno marcado a la vez). Usa checkbox para elecciones independientes; radio
para una elección única entre alternativas.
APIs usadas
new Option()/new Option(String text)— crea la opción (con o sin etiqueta). Empieza desmarcada.option.checked(boolean checked)— define el estado inicial sin animación (fluido).option.setChecked(boolean checked)— cambia el estado con animación de crossfade.option.isChecked()— devuelve el estado actual (boolean).option.toggle()— invierte el estado (invocado internamente al toque).option.onAction(Component.Action action)— callback disparado cuando el estado cambia por toque del usuario.new Group()— grupo de selección mutuamente exclusiva.option.group(Group g)— asocia la opción al grupo (la transforma en radio).group.fade(boolean)— habilita la transición animada de color al cambiar la selección.
Comportamiento no obvio (confirmado en la fuente):
- En un
Group, tocar la opción ya marcada no la desmarca (toggle()retorna temprano sichecked && getGroup() != null) — igual que el radio: solo cambia al elegir otra.onActionsolo se dispara si el estado realmente cambió (if (checked != prev) runActions()).- Marcar mediante
checked(true)en una opción de grupo ya notifica al grupo y desmarca las demás.
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());
// ── Checkbox (Option aislado) ──
Option aceito = new Option("Aceito os termos");
aceito.checked(false); // estado inicial, sin animación
aceito.onAction(o -> atualizarBotao(aceito.isChecked()));
add(aceito);
// ── Radio (varios Option en el mismo Group) ──
Group entrega = new Group();
Option padrao = new Option("Entrega padrão").group(entrega);
Option expresso = new Option("Entrega expressa").group(entrega);
padrao.checked(true); // selección inicial del grupo
expresso.onAction(o -> escolherFrete("EXPRESSO"));
padrao.onAction(o -> escolherFrete("PADRAO"));
add(padrao);
add(expresso);
}
private void atualizarBotao(boolean aceito)
{
// ... habilitar/deshabilitar el botón según el checkbox ...
}
private void escolherFrete(String tipo)
{
// ... reaccionar a la elección del envío ...
}
}
El fragmento de abajo muestra solo el núcleo. Para ejecutarlo, colócalo en el esqueleto
MainWindowde arriba.
Fragmento mínimo
// ── Checkbox (Option aislado) ──
Option aceito = new Option("Aceito os termos");
aceito.checked(false); // estado inicial, sin animación
aceito.onAction(o -> atualizarBotao(aceito.isChecked()));
add(aceito);
// ── Radio (varios Option en el mismo Group) ──
Group entrega = new Group();
Option padrao = new Option("Entrega padrão").group(entrega);
Option expresso = new Option("Entrega expressa").group(entrega);
padrao.checked(true); // selección inicial del grupo
expresso.onAction(o -> escolherFrete("EXPRESSO"));
padrao.onAction(o -> escolherFrete("PADRAO"));
add(padrao);
add(expresso);
Nota de verificación (código 2026). Confirmado:
OptionimplementaComponent.CheckableyAlphaAnimation.Animate;Group.select(sender)desmarca a los demás miembros (Option/Switch) automáticamente.Group.fade(por defectofalse) controla si el cambio es animado. No hay “valor” en elGroup: para conocer la selección, verificaisChecked()en cadaOption, o guarda la referencia elegida en el callback.
Profundiza
- Páginas de los widgets: Option · Group
- Dropdown (selección única en popup): dropdown-selecao.md