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

Como usar um Dropdown de seleção

Propósito. Oferecer seleção única a partir de uma lista de itens, exibida como um botão com seta que abre um popup (ListViewWindow) ao toque. Após escolher, o texto do Dropdown passa a mostrar o item selecionado. Use para escolher entre poucas/médias opções sem ocupar espaço fixo na tela.

APIs usadas

  • new Dropdown(String placeholder, String[] items) — cria o dropdown com um texto de placeholder e o array de itens.
  • new Dropdown(String[] items) — variante com placeholder default "Select...".
  • dropdown.onSelect(Component.Action action) — callback disparado após o usuário confirmar a escolha no popup.
  • dropdown.getSelectedIndex() — índice do item selecionado, ou -1 se nenhum.
  • dropdown.getSelectedText() — texto do item selecionado, ou null se nenhum.
  • dropdown.setSelectedIndex(int index) — seleciona programaticamente e atualiza o texto exibido.
  • dropdown.popupHeightRatio(float) / dropdown.popupWidthRatio(float) — ajustam o tamanho do popup relativo à tela.

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[] estados = { "Acre", "Bahia", "São Paulo", "Paraná" };

      Dropdown uf = new Dropdown("Selecione o estado", estados);

      uf.onSelect(origin ->
      {
         int i = uf.getSelectedIndex();       // -1 se nada escolhido
         String texto = uf.getSelectedText(); // null se nada escolhido
         filtrarPorEstado(texto);
      });

      // Pré-seleção programática (opcional)
      uf.setSelectedIndex(2);   // "São Paulo"

      add(0.5f, uf);            // meia largura na linha (GridLayout)
   }

   private void filtrarPorEstado(String estado)
   {
      // ... filtrar a lista conforme o estado escolhido ...
   }
}

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

Trecho mínimo

String[] estados = { "Acre", "Bahia", "São Paulo", "Paraná" };

Dropdown uf = new Dropdown("Selecione o estado", estados);

uf.onSelect(origin ->
{
   int i = uf.getSelectedIndex();       // -1 se nada escolhido
   String texto = uf.getSelectedText(); // null se nada escolhido
   filtrarPorEstado(texto);
});

// Pré-seleção programática (opcional)
uf.setSelectedIndex(2);   // "São Paulo"

add(0.5f, uf);            // meia largura na linha (GridLayout)

Nota de verificação (código 2026). Confirmado na fonte: Dropdown estende Button; construtores Dropdown(String placeholder, String[] items) e Dropdown(String[] items); onSelect(Action), getSelectedIndex(), getSelectedText(), setSelectedIndex(int). O popup decide sozinho se abre acima ou abaixo do dropdown conforme o espaço disponível na tela, e fecha ao tocar fora. O callback onSelect roda depois de o selectedIndex/text já terem sido atualizados, então é seguro chamar getSelectedText() dentro dele.

Aprofunde-se

Esta página foi útil?