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-1se nenhum.dropdown.getSelectedText()— texto do item selecionado, ounullse 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
MainWindowacima.
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:
DropdownestendeButton; construtoresDropdown(String placeholder, String[] items)eDropdown(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 callbackonSelectroda depois de oselectedIndex/textjá terem sido atualizados, então é seguro chamargetSelectedText()dentro dele.
Aprofunde-se
- Página do widget: Dropdown · Fonte canônica: Capítulo 14
- Seleção única/múltipla com marcadores: checkbox-e-radio.md