我有一个 JList 列表和以下代码行:
list.getInputMap().put(KeyStroke.getKeyStroke('d'), "action");
因此,当我的列表处于焦点状态并且按下键盘上的 d 键时,应该执行一个操作。该操作考虑了当前选择的 JList 中的哪一项。问题是,每当我的列表中存在第一个字母“d”的项目时,我的选择将首先跳转到该条目,然后执行操作(应用于错误的项目)。
所以我的问题是:如何禁用 JList 中因输入字母而导致的选择跳转?
您可以从 JList 中删除 KeyListeners。
我尝试过,但无法弄清楚这在标准功能方面有何破坏。
KeyListener[] lsnrs = list.getKeyListeners();
for (int i = 0; i < lsnrs.length; i++) {
list.removeKeyListener(lsnrs[i]);
}
不要删除 KeyListeners,而是重写 JList 的
getNextMatch()
方法以每次返回 -1。那么按键时就不会跳到按字母选择。
import javax.swing.JList;
import javax.swing.text.Position;
class CustomJList extends JList<Object> {
@Override
public int getNextMatch(String prefix, int startIndex, Position.Bias bias) {
return -1;
}
}