本页面由葡萄牙语机器翻译,可能存在错误。葡萄牙语版本为准。
如何制作可选择的简单列表
目的。 显示一个可滚动的文本项列表,并在用户选择一个(SINGLE)或多个(MULTIPLE)时做出响应。
ListView 是一个可嵌入的 Component:你可以将其添加到任何布局,无需窗口。
使用的 API
new ListView(String[] items, ListView.ItemType type)— 从文本数组创建列表。new ListView(String title, String[] items, ListView.ItemType type)— 相同,带标题头部。ListView.ItemType.SINGLE/ListView.ItemType.MULTIPLE— 枚举仅有的两个值。SINGLE= 点击选择并触发onConfirm;MULTIPLE= 复选框 + “确认”按钮。ListView.onConfirm(Component.Action action)— 确认时触发的回调。接收ListView本身作为事件源。ListView.getSelectedText()/getSelectedIndex()— 第一个被选中的项(文本/索引),或null/-1。ListView.getSelectedTexts()/getSelectedIndices()— 所有被选中的项(在 MULTIPLE 中有用)。ListView.confirmText(String)— 确认按钮的文本(默认"Confirmar",仅在 MULTIPLE 中)。
完整示例(复制、粘贴并运行)
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[] frutas = {"Maçã", "Banana", "Laranja", "Uva"};
// SINGLE:点按即选中并触发 onConfirm
ListView lista = new ListView("Escolha uma fruta", frutas, ListView.ItemType.SINGLE);
lista.onConfirm(e ->
{
String texto = lista.getSelectedText(); // 例如:"Banana"
int idx = lista.getSelectedIndex(); // 例如:1
Debug.log("Selecionado: " + texto + " (#" + idx + ")");
return null;
});
add(LAY_FILL, lista); // ListView 是一个 Component:直接进入布局
}
}
下面的片段只展示核心部分。要运行它,请将其放入上面的
MainWindow骨架中。
最小片段
// 已在源码核实:ListView.java
String[] frutas = {"Maçã", "Banana", "Laranja", "Uva"};
// SINGLE:点按即选中并触发 onConfirm
ListView lista = new ListView("Escolha uma fruta", frutas, ListView.ItemType.SINGLE);
lista.onConfirm(e ->
{
String texto = lista.getSelectedText(); // 例如:"Banana"
int idx = lista.getSelectedIndex(); // 例如:1
Debug.log("Selecionado: " + texto + " (#" + idx + ")");
return null;
});
layout.add(.9f, lista); // ListView 是一个 Component:直接进入布局
// MULTIPLE:复选框;onConfirm 仅在点按 "Confirmar" 按钮时触发
ListView multi = new ListView("Selecione ingredientes", frutas, ListView.ItemType.MULTIPLE);
multi.confirmText("Adicionar");
multi.onConfirm(e ->
{
String[] escolhidas = multi.getSelectedTexts(); // 所有被勾选的项
return null;
});
layout.add(.9f, multi);
深入了解
- 需要模态弹窗而非嵌入式?参见 popup-de-selecao.md。
- 数千个项目?不要使用
ListView(它会实例化所有项);参见 lista-virtual-grande.md。 - 组件指南:ListView · 权威来源:第 15 章
这个页面有帮助吗?感谢你的反馈!