我在Java中有一个组合框,如果输入了字母数字,该组合框会进行平滑过滤。但是,如果我输入日语字符,将无法正常工作。
以下是描述我的过滤条件的场景:
但是,如果用户输入日语字符(例如“エ” 一次),即使按一次它也会自动使字符输入翻倍,因此它不能像上述过滤那样正常工作。 / p>
用户输入エ
时的插图这是我当前的代码:
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);
}
});