Не могу распознать японские символы - PullRequest
0 голосов
/ 10 октября 2018

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

Вот сценарий, описывающий мою фильтрацию:

  1. Элементы комбинированного списка следующие:

    enter image description here

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

enter image description here

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

Иллюстрация, если пользователь вводит

enter image description here

Вот мой текущий код:

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);
            }
        });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...