AutoCompleteTextField筛选列表中无法获取正确选中项的问题
解决AutoCompleteTextField选中项索引获取错误的问题
核心原因
直接调用options.getSelectedIndex()是错误的——DefaultListModel本身的选中状态和AutoCompleteTextField下拉列表的选中状态并不同步,所以会始终返回0。
正确解决方案
有两种可靠的方式获取用户实际选中的项索引:
方式1:通过输入框文本匹配索引
用户选中下拉项后,输入框会自动填充选中的文本,通过该文本在DefaultListModel中查找对应索引:
labelACField.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { if (filteredIdObjs != null) { String selectedText = labelACField.getText(); int selectedIdx = -1; // 遍历Model找到对应文本的索引 for (int i = 0; i < options.size(); i++) { if (options.getElementAt(i).equals(selectedText)) { selectedIdx = i; break; } } if (selectedIdx != -1 && selectedIdx < filteredIdObjs.length) { selectedIdObj = filteredIdObjs[selectedIdx]; oidx = selectedIdObj.getId(); } } } });
方式2:直接获取下拉列表的选中索引(推荐)
如果你的AutoCompleteTextField实现提供了获取下拉列表组件的方法(比如getAutoCompleteList()或getDropdownList()),可以直接调用其getSelectedIndex()方法:
labelACField.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent evt) { if (filteredIdObjs != null) { // 假设组件提供getAutoCompleteList()方法获取下拉列表 int selectedIdx = labelACField.getAutoCompleteList().getSelectedIndex(); if (selectedIdx != -1 && selectedIdx < filteredIdObjs.length) { selectedIdObj = filteredIdObjs[selectedIdx]; oidx = selectedIdObj.getId(); } } } });
补充说明
不同第三方库的AutoCompleteTextField实现可能略有差异,若方式2中的方法名不匹配,可以查看组件的API文档确认获取下拉列表的正确方法。
内容的提问来源于stack exchange,提问作者Daniel Tsai
相关产品推荐
相关产品推荐

