LabelItem e CheckLabelItem
LabelItem e CheckLabelItem são “cards” de item de lista prontos, no pacote dev.crossfly.ui.listitem. Ambos estendem Component e são usados internamente pelo ListView:
LabelItem— um únicoLabelcom quebra de linha. Usado no modoSINGLE.CheckLabelItem— umOption(check) +Label. Usado no modoMULTIPLE.
Normalmente você não os instancia diretamente — o ListView cria o tipo certo conforme o ItemType. Use-os quando montar uma lista à mão e quiser a mesma aparência/comportamento de card.
🟡 · Pacote:
dev.crossfly.ui.listitem· Estendem:Component· Estilo:ComponentStyle(card) +LabelStyle(rótulo)
Quando usar
- Construir uma lista manualmente (fora do
ListView) reaproveitando o visual de card padrão. - Um item clicável isolado com aparência consistente com as listas do framework.
Quando NÃO usar
- Lista de seleção pronta → deixe o
ListViewcriar os itens por você. - Linha rica com imagem/múltiplos campos → monte um
Componentpróprio (ou useitemFactorydoListView).
Aparência
Card com fundo/borda do tema de seleção (selectionCardBackColor/selectionCardBorderColor), pressable, com gaps padrão. LabelItem mostra o texto alinhado START/CENTER; CheckLabelItem põe o check à esquerda (largura automática) e o label ocupando 90%.
Exemplo completo (copiar, colar e rodar)
package com.exemplo;
import dev.crossfly.ui.*;
import dev.crossfly.ui.layout.*;
import dev.crossfly.ui.listitem.*; // LabelItem, CheckLabelItem
/** Tela principal executável. Aponte o launcher (classname) e rode: gradlew :lwjgl3:run */
public class MainWindow extends Window
{
@Override
public void onShow() throws Exception
{
super.onShow();
setLayout(new VerticalLayout());
// Lista montada à mão reaproveitando o visual de card padrão.
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); // listas usam LAY_FILL (absorvem a altura)
}
}
Os trechos abaixo mostram só o miolo (o que vai dentro de
onShow()). Para rodar, coloque-os no esqueletoMainWindowacima.
Uso básico
// LabelItem — item clicável de rótulo único
LabelItem item = new LabelItem("Linha", 0);
item.onAction(e -> System.out.println("clicou " + item.index));
layout.add(.95f, item);
// CheckLabelItem — item com checkbox
CheckLabelItem c = new CheckLabelItem("Aceito os termos", 0);
c.onAction(e -> { c.toggle(); System.out.println(c.isChecked()); });
layout.add(.95f, c);
LabelItem
| Construtor | Descrição |
|---|---|
LabelItem(String text, int index) |
Estilos padrão |
LabelItem(String text, int index, ComponentStyle cardStyle, LabelStyle labelStyle) |
Estilos customizados |
CheckLabelItem
| Construtor | Descrição |
|---|---|
CheckLabelItem(String text, int index) |
Estilo padrão |
CheckLabelItem(String text, int index, ComponentStyle cardStyle) |
Estilo de card customizado |
Os campos text e index são public final.
Propriedades e personalização
| Membro | Classe | O que faz |
|---|---|---|
text (final) |
ambos | Texto do item |
index (final) |
ambos | Índice do item na lista |
getAutoHeight() |
ambos | Altura preferida (rótulo/check + ingap) |
isChecked() |
CheckLabelItem |
Estado atual do check |
setChecked(boolean) |
CheckLabelItem |
Define o estado |
toggle() |
CheckLabelItem |
Alterna o estado |
getCheck() |
CheckLabelItem |
Acesso ao Option interno |
defaultItemStyle() (static) |
ambos | Estilo de card reutilizável (selection card, pressable) |
defaultLabelStyle() (static) |
LabelItem |
Estilo de rótulo reutilizável |
Callbacks e eventos
| Callback | Quando dispara |
|---|---|
onAction(Action) |
Ao tocar o card (herdado de Component) |
Em CheckLabelItem, o toque não alterna o check sozinho — chame toggle() no seu callback (é o que o ListView faz internamente).
Estados
- pressed — ambos são
pressablepor padrão (feedback ao toque). - checked — só
CheckLabelItem: controlado porsetChecked/toggle, consultável comisChecked.
Lista manual reutilizando o visual 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 com card customizado
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);
Boas práticas
- Reaproveite
defaultItemStyle()/defaultLabelStyle()(com.copy()) para manter a coesão visual com as listas do framework. - Adicione os itens com largura
.95fnumGridLayout(CENTER, START)para reproduzir o espaçamento doListView.
Erros comuns
- Esperar que
CheckLabelItemalterne o check no toque automaticamente — chametoggle()noonAction. - Instanciar estes itens quando já usa
ListView— oListViewjá cria o tipo correto peloItemType.
Veja também
- Guia da área:
ui/· Receitas:cookbook/ - Componentes relacionados:
ListView·ListViewWindow