在 JList 中停用按字母选择

问题描述 投票:0回答:2

我有一个 JList 列表和以下代码行:

list.getInputMap().put(KeyStroke.getKeyStroke('d'), "action");

因此,当我的列表处于焦点状态并且按下键盘上的 d 键时,应该执行一个操作。该操作考虑了当前选择的 JList 中的哪一项。问题是,每当我的列表中存在第一个字母“d”的项目时,我的选择将首先跳转到该条目,然后执行操作(应用于错误的项目)。

所以我的问题是:如何禁用 JList 中因输入字母而导致的选择跳转?

java swing key-bindings
2个回答
2
投票

您可以从 JList 中删除 KeyListeners
我尝试过,但无法弄清楚这在标准功能方面有何破坏。

KeyListener[] lsnrs = list.getKeyListeners();
for (int i = 0; i < lsnrs.length; i++) {
    list.removeKeyListener(lsnrs[i]);
}

0
投票

不要删除 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;
    }

}
© www.soinside.com 2019 - 2024. All rights reserved.