Pular para o conteúdo
CrossFly é 100% open sourceSiga no GitHub
CrossFlyCrossFly
Começar

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 único Label com quebra de linha. Usado no modo SINGLE.
  • CheckLabelItem — um Option (check) + Label. Usado no modo MULTIPLE.

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 ListView criar os itens por você.
  • Linha rica com imagem/múltiplos campos → monte um Component próprio (ou use itemFactory do ListView).

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 esqueleto MainWindow acima.

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 pressable por padrão (feedback ao toque).
  • checked — só CheckLabelItem: controlado por setChecked/toggle, consultável com isChecked.

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 .95f num GridLayout(CENTER, START) para reproduzir o espaçamento do ListView.

Erros comuns

  • Esperar que CheckLabelItem alterne o check no toque automaticamente — chame toggle() no onAction.
  • Instanciar estes itens quando já usa ListView — o ListView já cria o tipo correto pelo ItemType.

Veja também

Esta página foi útil?