Java 在JList中按字母禁用选择

Java 在JList中按字母禁用选择,java,swing,key-bindings,Java,Swing,Key Bindings,我有一个JList列表和以下代码行: list.getInputMap().put(KeyStroke.getKeyStroke('d'), "action"); 因此,当我的列表处于焦点时,我按下键盘上的d键,应该执行一个操作。该操作将考虑当前选择了我的JList中的哪个项目。问题是,每当我的列表中有第一个字母为“d”的项目时,我的选择将首先跳转到该条目,然后执行操作(应用于错误的项目) 因此,我的问题是:如何禁用因键入字母而导致的JLists中的选择跳转?您可以从JList中删除。 我试过

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

list.getInputMap().put(KeyStroke.getKeyStroke('d'), "action");
因此,当我的列表处于焦点时,我按下键盘上的d键,应该执行一个操作。该操作将考虑当前选择了我的JList中的哪个项目。问题是,每当我的列表中有第一个字母为“d”的项目时,我的选择将首先跳转到该条目,然后执行操作(应用于错误的项目)

因此,我的问题是:如何禁用因键入字母而导致的JLists中的选择跳转?

您可以从JList中删除。
我试过了,但不知道这在标准功能方面有什么突破

KeyListener[] lsnrs = list.getKeyListeners();
for (int i = 0; i < lsnrs.length; i++) {
    list.removeKeyListener(lsnrs[i]);
}
KeyListener[]lsnrs=list.getKeyListeners();
对于(int i=0;i
有一个
getClass
太多了,即使修复了那个打字错误,它也不起作用。@principal ideal domain-对我有效:)我使用的是一个自编表模型。这会改变什么吗?@principal-ideal-domain-TableModel并不重要。但是侦听器方法实际上只在Java8中有效。试一下模型方法。@principal ideal domain这是一个很好的问题,有一个非常糟糕的公认答案。选项2已损坏,选项1非常脆弱,它只在一个特定的JDK中工作。它完全依赖于JList的实现细节——它最终可能无法在JDK 8+N中工作。Invi字符是一种黑客行为,但至少它是健壮的。更好的选择是不使用JList。使用JTable并将其样式设置为相同的样式。一个愚蠢的想法-你是否尝试过在物品名称前添加一个不可见的空格?@pvg我刚刚尝试过,效果不错;)。但这不是我想要解决问题的方式。现在,我在为空格键指定操作时遇到问题;)。或者你所说的无形空间是什么意思?我只选了一个普通的。不,试试看不可见的unicode空格,而不是实际的空格。我认为这实际上是一个相当不错的解决方案,它不会过度挖掘JList的默认和相当具体的实现细节。@您必须覆盖的主要理想域,通过返回禁用
JList#getNextMatch
return-1