本页面由葡萄牙语机器翻译,可能存在错误。葡萄牙语版本为准。
如何使用选择下拉框
用途。 从项目列表中提供单项选择,显示为一个带箭头的按钮,点击时打开弹出框(ListViewWindow)。选择后,下拉框的文本会显示选中的项。适用于在少量或中等数量的选项中进行选择,而不占用屏幕上的固定空间。
用到的 API
new Dropdown(String placeholder, String[] items)— 使用占位符文本和项数组创建下拉框。new Dropdown(String[] items)— 变体,使用默认占位符"Select..."。dropdown.onSelect(Component.Action action)— 在用户于弹出框中确认选择之后触发的回调。dropdown.getSelectedIndex()— 选中项的索引,若无则为-1。dropdown.getSelectedText()— 选中项的文本,若无则为null。dropdown.setSelectedIndex(int index)— 以编程方式选中并更新显示的文本。dropdown.popupHeightRatio(float)/dropdown.popupWidthRatio(float)— 相对于屏幕调整弹出框的大小。
完整示例(复制、粘贴并运行)
package com.exemplo;
import dev.crossfly.ui.*;
import dev.crossfly.ui.layout.*;
/** 可执行的主界面。将 launcher 指向此类(classname)并运行: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
String texto = uf.getSelectedText(); // 未选择时为 null
filtrarPorEstado(texto);
});
// 以编程方式预选(可选)
uf.setSelectedIndex(2); // "São Paulo"
add(0.5f, uf); // 占行内一半宽度(GridLayout)
}
private void filtrarPorEstado(String estado)
{
// ... 根据所选州筛选列表 ...
}
}
下面的片段只展示核心部分。要运行它,请将其放入上面的
MainWindow骨架中。
最小片段
String[] estados = { "Acre", "Bahia", "São Paulo", "Paraná" };
Dropdown uf = new Dropdown("Selecione o estado", estados);
uf.onSelect(origin ->
{
int i = uf.getSelectedIndex(); // 未选择时为 -1
String texto = uf.getSelectedText(); // 未选择时为 null
filtrarPorEstado(texto);
});
// 以编程方式预选(可选)
uf.setSelectedIndex(2); // "São Paulo"
add(0.5f, uf); // 占行内一半宽度(GridLayout)
验证说明(2026 代码)。 已在源码中确认:
Dropdown继承自Button; 构造函数Dropdown(String placeholder, String[] items)和Dropdown(String[] items);onSelect(Action)、getSelectedIndex()、getSelectedText()、setSelectedIndex(int)。 弹出框会根据屏幕上可用的空间自行决定在下拉框的上方还是下方打开, 并在点击外部时关闭。回调onSelect在selectedIndex/text已经更新之后运行, 因此在其中调用getSelectedText()是安全的。
深入了解
- 控件页面:Dropdown · 权威来源:第 14 章
- 带标记的单选/多选:checkbox-e-radio.md
这个页面有帮助吗?感谢你的反馈!