You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何DefaultListModel的getSelectedIndex始终返回0?如何获取选中索引?

解决AutoCompleteTextField无法获取实际选中项索引的问题

你遇到的问题根源在于DefaultListModel本身不维护选中状态,它只是存储数据的容器,getSelectedIndex()方法在这里并不能反映用户实际选中的选项。正确的做法是从AutoCompleteTextField组件本身获取选中信息,而非直接调用模型的方法。

以下是两种可行的解决方式:

方式一:通过文本框内容匹配模型中的索引

用户选择选项后,AutoCompleteTextField的文本内容会同步为选中项的内容,因此可以通过文本内容在模型中查找对应的索引:

labelACField.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent evt) {
        if (filteredIdObjs != null) {
            // 获取文本框当前的内容
            String selectedContent = labelACField.getText();
            // 在DefaultListModel中查找该内容对应的索引
            selectedIdx = options.indexOf(selectedContent);
            // 如果是自定义对象,确保对象的equals方法已正确实现
        }
    }
});

方式二:直接获取下拉列表的选中索引

如果你的AutoCompleteTextField实现提供了获取内部下拉JList的方法(比如getList()),可以直接通过JList获取选中索引:

labelACField.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent evt) {
        if (filteredIdObjs != null) {
            // 获取AutoCompleteTextField内部的下拉列表
            JList<?> dropdownList = labelACField.getList();
            // 从下拉列表中获取实际选中的索引
            selectedIdx = dropdownList.getSelectedIndex();
        }
    }
});

额外注意事项

  • 确保你的filter方法正确实现:空的filter方法可能导致模型数据未正确过滤,影响索引匹配,需要根据输入文本更新模型中的选项集合。
  • 如果模型中存储的是自定义对象而非字符串,必须重写对象的equals和hashCode方法,否则indexOf无法正确找到对应对象的索引。

内容的提问来源于stack exchange,提问作者Daniel Tsai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 06:00:47