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 disparaonConfirm;MULTIPLE= checkboxes + botão “Confirmar”.ListView.onConfirm(Component.Action action)— callback disparado ao confirmar. Recebe o próprioListViewcomo fonte do evento.ListView.getSelectedText()/getSelectedIndex()— primeiro item selecionado (texto/índice), ounull/-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
MainWindowacima.
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
- Precisa de um popup modal em vez de embutido? Veja popup-de-selecao.md.
- Milhares de itens? Não use
ListView(materializa todos); veja lista-virtual-grande.md. - Guia de widget: ListView · Fonte canônica: Capítulo 15
Esta página foi útil?Obrigado pelo feedback!