This page was machine-translated from Portuguese and may contain errors. The Portuguese version is canonical.
LabelItem and CheckLabelItem
LabelItem and CheckLabelItem are ready-made list item “cards”, in the dev.crossfly.ui.listitem package. Both extend Component and are used internally by ListView:
LabelItem— a singleLabelwith line wrapping. Used inSINGLEmode.CheckLabelItem— anOption(check) +Label. Used inMULTIPLEmode.
You normally do not instantiate them directly — the ListView creates the right type based on the ItemType. Use them when building a list by hand and you want the same card appearance/behavior.
🟡 · Package:
dev.crossfly.ui.listitem· Extend:Component· Style:ComponentStyle(card) +LabelStyle(label)
When to use
- Building a list manually (outside
ListView) while reusing the standard card look. - A standalone clickable item with an appearance consistent with the framework’s lists.
When NOT to use
- Ready-made selection list → let the
ListViewcreate the items for you. - Rich row with image/multiple fields → build your own
Component(or use theListView’sitemFactory).
Appearance
Card with the selection theme’s background/border (selectionCardBackColor/selectionCardBorderColor), pressable, with default gaps. LabelItem shows the text aligned START/CENTER; CheckLabelItem places the check on the left (automatic width) and the label taking up 90%.
Complete example (copy, paste and run)
package com.exemplo;
import dev.crossfly.ui.*;
import dev.crossfly.ui.layout.*;
import dev.crossfly.ui.listitem.*; // LabelItem, CheckLabelItem
/** Runnable main screen. Point the launcher (classname) and run: gradlew :lwjgl3:run */
public class MainWindow extends Window
{
@Override
public void onShow() throws Exception
{
super.onShow();
setLayout(new VerticalLayout());
// List built by hand reusing the standard card visual.
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); // lists use LAY_FILL (they absorb the height)
}
}
The snippets below show only the core (what goes inside
onShow()). To run them, place them in theMainWindowskeleton above.
Basic usage
// LabelItem — clickable single-label item
LabelItem item = new LabelItem("Linha", 0);
item.onAction(e -> System.out.println("clicou " + item.index));
layout.add(.95f, item);
// CheckLabelItem — item with a 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 | Description |
|---|---|
LabelItem(String text, int index) |
Default styles |
LabelItem(String text, int index, ComponentStyle cardStyle, LabelStyle labelStyle) |
Custom styles |
CheckLabelItem
| Constructor | Description |
|---|---|
CheckLabelItem(String text, int index) |
Default style |
CheckLabelItem(String text, int index, ComponentStyle cardStyle) |
Custom card style |
The text and index fields are public final.
Properties and customization
| Member | Class | What it does |
|---|---|---|
text (final) |
both | Item text |
index (final) |
both | Item index in the list |
getAutoHeight() |
both | Preferred height (label/check + ingap) |
isChecked() |
CheckLabelItem |
Current check state |
setChecked(boolean) |
CheckLabelItem |
Sets the state |
toggle() |
CheckLabelItem |
Toggles the state |
getCheck() |
CheckLabelItem |
Access to the internal Option |
defaultItemStyle() (static) |
both | Reusable card style (selection card, pressable) |
defaultLabelStyle() (static) |
LabelItem |
Reusable label style |
Callbacks and events
| Callback | When it fires |
|---|---|
onAction(Action) |
On tapping the card (inherited from Component) |
In CheckLabelItem, the tap does not toggle the check on its own — call toggle() in your callback (this is what ListView does internally).
States
- pressed — both are
pressableby default (tap feedback). - checked — only
CheckLabelItem: controlled bysetChecked/toggle, queryable withisChecked.
Manual list reusing the card look
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 with a custom card
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);
Best practices
- Reuse
defaultItemStyle()/defaultLabelStyle()(with.copy()) to keep visual cohesion with the framework’s lists. - Add the items with
.95fwidth in aGridLayout(CENTER, START)to reproduce theListViewspacing.
Common mistakes
- Expecting
CheckLabelItemto toggle the check automatically on tap — calltoggle()inonAction. - Instantiating these items when you already use
ListView— theListViewalready creates the correct type via theItemType.
See also
- Area guide:
ui/· Recipes:cookbook/ - Related components:
ListView·ListViewWindow