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

Como fazer uma lista simples selecionável

Propósito. Mostrar uma lista rolável de itens de texto e reagir quando o usuário seleciona um (SINGLE) ou vários (MULTIPLE). O ListView é um Component embutível: você o adiciona a qualquer layout, sem precisar de janela.

APIs usadas

  • new ListView(String[] items, ListView.ItemType type) — cria a lista a partir de um array de textos.
  • new ListView(String title, String[] items, ListView.ItemType type) — igual, com cabeçalho de título.
  • ListView.ItemType.SINGLE / ListView.ItemType.MULTIPLE — únicos dois valores do enum. SINGLE = tap seleciona e dispara onConfirm; MULTIPLE = checkboxes + botão “Confirmar”.
  • ListView.onConfirm(Component.Action action) — callback disparado ao confirmar. Recebe o próprio ListView como fonte do evento.
  • ListView.getSelectedText() / getSelectedIndex() — primeiro item selecionado (texto/índice), ou null/-1.
  • ListView.getSelectedTexts() / getSelectedIndices() — todos os selecionados (útil em MULTIPLE).
  • ListView.confirmText(String) — texto do botão de confirmação (default "Confirmar", só em MULTIPLE).

Exemplo completo (copiar, colar e rodar)

package com.exemplo;

import dev.crossfly.ui.*;
import dev.crossfly.ui.layout.*;

/** 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());

      String[] frutas = {"Maçã", "Banana", "Laranja", "Uva"};

      // SINGLE: o tap já seleciona e dispara onConfirm
      ListView lista = new ListView("Escolha uma fruta", frutas, ListView.ItemType.SINGLE);
      lista.onConfirm(e ->
      {
         String texto = lista.getSelectedText();   // ex.: "Banana"
         int idx = lista.getSelectedIndex();       // ex.: 1
         Debug.log("Selecionado: " + texto + " (#" + idx + ")");
         return null;
      });
      add(LAY_FILL, lista);   // ListView é um Component: entra direto no layout
   }
}

O trecho abaixo mostra só o miolo. Para rodar, coloque-o no esqueleto MainWindow acima.

Trecho mínimo

// verificado na fonte: ListView.java
String[] frutas = {"Maçã", "Banana", "Laranja", "Uva"};

// SINGLE: o tap já seleciona e dispara onConfirm
ListView lista = new ListView("Escolha uma fruta", frutas, ListView.ItemType.SINGLE);
lista.onConfirm(e ->
{
   String texto = lista.getSelectedText();   // ex.: "Banana"
   int idx = lista.getSelectedIndex();       // ex.: 1
   Debug.log("Selecionado: " + texto + " (#" + idx + ")");
   return null;
});
layout.add(.9f, lista);   // ListView é um Component: entra direto no layout
// MULTIPLE: checkboxes; onConfirm dispara só ao tocar no botão "Confirmar"
ListView multi = new ListView("Selecione ingredientes", frutas, ListView.ItemType.MULTIPLE);
multi.confirmText("Adicionar");
multi.onConfirm(e ->
{
   String[] escolhidas = multi.getSelectedTexts();   // todos os marcados
   return null;
});
layout.add(.9f, multi);

Aprofunde-se

Esta página foi útil?