Esta página fue traducida automáticamente del portugués y puede contener errores. La versión en portugués es la canónica.
LabelItem y CheckLabelItem
LabelItem y CheckLabelItem son “cards” de ítem de lista listos, en el paquete dev.crossfly.ui.listitem. Ambos extienden Component y son usados internamente por ListView:
LabelItem— un únicoLabelcon salto de línea. Usado en el modoSINGLE.CheckLabelItem— unOption(check) +Label. Usado en el modoMULTIPLE.
Normalmente no los instancias directamente — el ListView crea el tipo correcto según el ItemType. Úsalos cuando montes una lista a mano y quieras la misma apariencia/comportamiento de card.
🟡 · Paquete:
dev.crossfly.ui.listitem· Extienden:Component· Estilo:ComponentStyle(card) +LabelStyle(rótulo)
Cuándo usar
- Construir una lista manualmente (fuera del
ListView) reutilizando el aspecto de card por defecto. - Un ítem clicable aislado con apariencia consistente con las listas del framework.
Cuándo NO usar
- Lista de selección lista → deja que el
ListViewcree los ítems por ti. - Fila rica con imagen/múltiples campos → monta un
Componentpropio (o usaitemFactorydelListView).
Apariencia
Card con fondo/borde del tema de selección (selectionCardBackColor/selectionCardBorderColor), pressable, con gaps por defecto. LabelItem muestra el texto alineado START/CENTER; CheckLabelItem pone el check a la izquierda (ancho automático) y el label ocupando 90%.
Ejemplo completo (copiar, pegar y ejecutar)
package com.exemplo;
import dev.crossfly.ui.*;
import dev.crossfly.ui.layout.*;
import dev.crossfly.ui.listitem.*; // LabelItem, CheckLabelItem
/** 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());
// Lista armada a mano reutilizando el visual de card estándar.
Component lista = new Component();
lista.setLayout(new GridLayout(Position.CENTER, Position.START));
lista.setScrollable(ScrollDirection.VERTICAL);
String[] linhas = {"Alpha", "Beta", "Gamma"};
for (int i = 0; i < linhas.length; i++) {
LabelItem item = new LabelItem(linhas[i], i);
final int idx = i;
item.onAction(e -> System.out.println("selecionou " + idx));
lista.add(.95f, item);
}
CheckLabelItem termos = new CheckLabelItem("Aceito os termos", linhas.length);
termos.onAction(e -> { termos.toggle(); System.out.println(termos.isChecked()); });
lista.add(.95f, termos);
add(LAY_FILL, lista); // las listas usan LAY_FILL (absorben la altura)
}
}
Los fragmentos de abajo muestran solo el núcleo (lo que va dentro de
onShow()). Para ejecutar, colócalos en el esqueletoMainWindowde arriba.
Uso básico
// LabelItem — ítem clicable de rótulo único
LabelItem item = new LabelItem("Linha", 0);
item.onAction(e -> System.out.println("clicou " + item.index));
layout.add(.95f, item);
// CheckLabelItem — ítem con checkbox
CheckLabelItem c = new CheckLabelItem("Aceito os termos", 0);
c.onAction(e -> { c.toggle(); System.out.println(c.isChecked()); });
layout.add(.95f, c);
LabelItem
| Constructor | Descripción |
|---|---|
LabelItem(String text, int index) |
Estilos por defecto |
LabelItem(String text, int index, ComponentStyle cardStyle, LabelStyle labelStyle) |
Estilos personalizados |
CheckLabelItem
| Constructor | Descripción |
|---|---|
CheckLabelItem(String text, int index) |
Estilo por defecto |
CheckLabelItem(String text, int index, ComponentStyle cardStyle) |
Estilo de card personalizado |
Los campos text e index son public final.
Propiedades y personalización
| Miembro | Clase | Qué hace |
|---|---|---|
text (final) |
ambos | Texto del ítem |
index (final) |
ambos | Índice del ítem en la lista |
getAutoHeight() |
ambos | Altura preferida (rótulo/check + ingap) |
isChecked() |
CheckLabelItem |
Estado actual del check |
setChecked(boolean) |
CheckLabelItem |
Define el estado |
toggle() |
CheckLabelItem |
Alterna el estado |
getCheck() |
CheckLabelItem |
Acceso al Option interno |
defaultItemStyle() (static) |
ambos | Estilo de card reutilizable (selection card, pressable) |
defaultLabelStyle() (static) |
LabelItem |
Estilo de rótulo reutilizable |
Callbacks y eventos
| Callback | Cuándo se dispara |
|---|---|
onAction(Action) |
Al tocar el card (heredado de Component) |
En CheckLabelItem, el toque no alterna el check por sí solo — llama a toggle() en tu callback (es lo que el ListView hace internamente).
Estados
- pressed — ambos son
pressablepor defecto (feedback al toque). - checked — solo
CheckLabelItem: controlado porsetChecked/toggle, consultable conisChecked.
Lista manual reutilizando el aspecto de card
Component lista = new Component();
lista.setLayout(new GridLayout(Position.CENTER, Position.START));
lista.setScrollable(ScrollDirection.VERTICAL);
String[] linhas = {"Alpha", "Beta", "Gamma"};
for (int i = 0; i < linhas.length; i++) {
LabelItem item = new LabelItem(linhas[i], i);
final int idx = i;
item.onAction(e -> System.out.println("selecionou " + idx));
lista.add(.95f, item);
}
layout.add(LAY_FILL, lista);
CheckLabelItem con card personalizado
ComponentStyle card = CheckLabelItem.defaultItemStyle()
.copy()
.backColor(0xFFF5F5F5);
CheckLabelItem opt = new CheckLabelItem("Receber notificações", 0, card);
opt.setChecked(true);
opt.onAction(e -> { opt.toggle(); });
layout.add(.95f, opt);
Buenas prácticas
- Reutiliza
defaultItemStyle()/defaultLabelStyle()(con.copy()) para mantener la cohesión visual con las listas del framework. - Agrega los ítems con ancho
.95fen unGridLayout(CENTER, START)para reproducir el espaciado delListView.
Errores comunes
- Esperar que
CheckLabelItemalterne el check al tocar automáticamente — llama atoggle()en elonAction. - Instanciar estos ítems cuando ya usas
ListView— elListViewya crea el tipo correcto según elItemType.
Ver también
- Guía del área:
ui/· Recetas:cookbook/ - Componentes relacionados:
ListView·ListViewWindow