У меня есть поле со списком в Java, который фильтрует плавно, если вводится буквенно-цифровой.Но если я введу японский символ, он не будет работать.
Вот сценарий, описывающий мою фильтрацию:
Элементы комбинированного списка следующие:

- Если пользователь вводит букву K , элементы сужаются / фильтруются, если строка присутствует в каждом из элементов,так что оставим это так: он работает как положено.

Однако, если пользователь вводит японский символ, такой как "" " один раз , он автоматически удваивает ввод символа, даже нажимая его один раз, поэтому он не работает так, как ожидалось, как фильтрация выше.
Иллюстрация, если пользователь вводит エ

Вот мой текущий код:
JTextComponent editor = (JTextComponent) combo.getEditor().getEditorComponent();
editor.addKeyListener(new KeyAdapter() {
public void keyReleased(KeyEvent ke) {
combo.setPopupVisible(true);
}
});
editor.getDocument().addDocumentListener(new DocumentListener() {
public void changedUpdate(DocumentEvent arg0) {
}
public void insertUpdate(DocumentEvent arg0) {
String item = combo.getEditor().getItem().toString().trim();
if (!item.equals(tempCmbString)) {
searchCmb();
}
}
public void removeUpdate(DocumentEvent arg0) {
String item = combo.getEditor().getItem().toString().trim();
if (!item.equals(tempCmbString)) {
searchCmb();
}
}
private void searchCmb() {
Runnable doSearchCmb = new Runnable() {
@Override
public void run() {
IElement[] foundList = null;
List list = new ArrayList(0);
String toFind = combo.getEditor().getItem().toString().trim();
if (toFind.length() == 0) {
int cmbItems = combo.getItems().length;
if (cmbItems != elements.length) {
combo.setItems(elements);
}
tempCmbString = "";
} else {
boolean isEqualToTempStr = !toFind.equals(tempCmbString);
if (isEqualToTempStr) {
combo.setItems(elements);
}
if (!toFind.equals(":")) {
for (int i = 1; i < elements.length; i++) {
if (toFind.length() > 0) {
String key = elements[i].getKey();
String fullName = elements[i].getName();
String name = "";
if (fullName.length() > 0 && fullName.indexOf(':') > 0) {
name = fullName.substring(0, fullName.indexOf(':'));
}
if (key.contains(toFind)) {
if (toFind.length() < 5 && toFind.length() > 0) {
if (toFind.equals(key.substring(0, toFind.length()))) {
list.add(elements[i]);
}
}
} else if (name.contains(toFind)) {
list.add(elements[i]);
} else if (fullName.contains(toFind)) {
list.add(elements[i]);
}
}
foundList = (IElement[]) list.toArray(new IElement[list.size()]);
}
if (list.size() > 0) {
if (isEqualToTempStr) {
combo.setItems(foundList);
}
} else {
combo.removeAllItems();
if (isEqualToTempStr) {
combo.setItems(elements);
}
list.add(new DIElement("", ""));
foundList = (IElement[]) list.toArray(new IElement[list.size()]);
if (isEqualToTempStr) {
combo.setItems(foundList);
}
}
if (isEqualToTempStr) {
combo.getEditor().setItem(toFind);
tempCmbString = toFind;
}
}
}
}
};
SwingUtilities.invokeLater(doSearchCmb);
}
});