在Java/Swing中,有没有办法合法地"尝试在通知中变异"?

Arv*_*nem 3 java notifications swing listener mutation

我想知道是否有某种魔法可以用来解决IllegalStateException并允许JTextField"尝试在通知中变异",或者换句话说,如果触发了侦听器则设置自己的文本.

为了您的信息,我正在尝试编写一个自动完成函数,该函数返回12个枚举范围内最可能的匹配,以响应用户在JTextField中的输入.

这是代码示例.你必须原谅我笨拙的算法,这会扼杀枚举结果.我突出显示了通过注释产生异常的代码:

jtfElement1.addCaretListener(new CaretListener() {
            @Override
            public void caretUpdate(CaretEvent e) {                    
                String s = jtfElement1.getText();
                int[] attributes = new int[13];
                // iterate through each enum
                for (BaseEnumAttributes b: BaseEnumAttributes.values()) {
                    // iterate through the length of the current text in jtfElement1
                    for (int i = 0; i < s.length(); i++) {
                        if (s.length() <= b.toString().length()) {                                
                            if (b.toString().charAt(i) == s.charAt(i)) {
                                // increase the number of "hits" noted for that enum
                                attributes[b.ordinal()] = attributes[b.ordinal()] + 1;
                            }                                
                        }
                    }                        
                }
                int priorC = 0;
                int rightC = 0;                    
                // iterate through the "array" of enums to find the highest score
                for (int j = 0; j < attributes.length; j++) {
                    if (attributes[j] > priorC) {
                        priorC = attributes[j];
                        rightC = j;
                    }
                }                    
                if (!s.equals("")) {
                    // assign to b the Enum corresponding to the "array" with highest score
                    BaseEnumAttributes b = BaseEnumAttributes.values()[rightC];
                    iController.updateInputElement1String(b.toString());                        
                    // THIS TRIGGERS EXCEPTION 
                    jtfElement1.setText(b.toString());
                }

            }
        });
Run Code Online (Sandbox Code Playgroud)

Tom*_*ine 5

您最好使用文档过滤器或自定义文档.

在事件发送期间,如果文档在文档中保持不变,那么其他听众应该看到什么?


Sta*_*avL 5

使用SwingUtilities.invokeLater()将所有修改放在那里