Это контролируется LAF.
В логике по умолчанию указано, что при вводе того же ключа список будет просто переходить к следующему элементу в списке.
Таким образом, вы не можете перейти непосредственно к номерам «22 ...», поскольку они пройдут через каждый элемент, начинающийся с «2 ...».
Однако, если у вас есть номер типа «2301» и «2311», вы сможете перейти непосредственно к этим номерам.
Здесь логика находится в классе BasicListUI:
public void keyTyped(KeyEvent e) {
JList src = (JList)e.getSource();
ListModel model = src.getModel();
if (model.getSize() == 0 || e.isAltDown() ||
BasicGraphicsUtils.isMenuShortcutKeyDown(e) ||
isNavigationKey(e)) {
// Nothing to select
return;
}
boolean startingFromSelection = true;
char c = e.getKeyChar();
long time = e.getWhen();
int startIndex = adjustIndex(src.getLeadSelectionIndex(), list);
if (time - lastTime < timeFactor) {
typedString += c;
if((prefix.length() == 1) && (c == prefix.charAt(0))) {
// Subsequent same key presses move the keyboard focus to the next
// object that starts with the same letter.
startIndex++;
} else {
prefix = typedString;
}
} else {
startIndex++;
typedString = "" + c;
prefix = typedString;
}
lastTime = time;
if (startIndex < 0 || startIndex >= model.getSize()) {
startingFromSelection = false;
startIndex = 0;
}
int index = src.getNextMatch(prefix, startIndex,
Position.Bias.Forward);
if (index >= 0) {
src.setSelectedIndex(index);
src.ensureIndexIsVisible(index);
} else if (startingFromSelection) { // wrap
index = src.getNextMatch(prefix, 0,
Position.Bias.Forward);
if (index >= 0) {
src.setSelectedIndex(index);
src.ensureIndexIsVisible(index);
}
}
}
Обратите внимание на комментарий, где устанавливается переменная «префикс».
Итак, если вы хотите изменить поведение, которое вам нужно создать, пользовательский интерфейс и переопределить метод. Не знаю, использует ли метод приватные переменные или методы.
Или другим вариантом было бы удалить KeyListener по умолчанию из JList. Затем вы можете реализовать свой собственный KeyListener и вызвать getNextMatch(...)
непосредственно с вашим пользовательским определенным префиксом.
Пожалуйста, прочтите и создайте и MCVE! http://stackoverflow.com/help/how-to-ask & http://stackoverflow.com/help/mcve. – StackFlowed