无法识别日文字符

时间:2018-10-10 07:33:37

标签: java combobox cjk

我在Java中有一个组合框,如果输入了字母数字,该组合框会进行平滑过滤。但是,如果我输入日语字符,将无法正常工作。

以下是描述我的过滤条件的场景:

  1. 组合框项目如下:

    enter image description here

  2. 如果用户输入字母 K ,则在每个项目中都包含字符串的情况下,将对项目进行缩小/过滤。 留给它:它按预期工作。

enter image description here

但是,如果用户输入日语字符(例如“エ” 一次),即使按一次它也会自动使字符输入翻倍,因此它不能像上述过滤那样正常工作。 / p>

用户输入

时的插图

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);
            }
        });

0 个答案:

没有答案