如何让InputVerifier与可编辑的JComboBox一起使用

时间:2008-09-10 16:20:21

标签: java swing jcombobox

我有一个JComboBox,其自定义inputVerifyer设置为在设置为可编辑时限制MaxLength。

验证方法似乎永远不会被调用 在JTextField罚款时调用相同的verifyer。

我可能做错了什么?

2 个答案:

答案 0 :(得分:8)

我找到了解决方法。我以为我会让下一个有这个问题的人知道。

基本上。而不是在ComboBox上设置inputVerifier,而是将其设置为“编辑器组件”。

JComboBox combo = new JComboBox();
JTextField tf = (JTextField)(combo.getEditor().getEditorComponent());
tf.setInputVerifier(verifyer);

答案 1 :(得分:1)

向我们展示您的代码的一小部分。

package inputverifier;

import javax.swing.*;

    class Go {
    public static void main(String[] args) {
        java.awt.EventQueue.invokeLater(new Runnable() { public void run() {
            runEDT();
        }});
    }
    private static void runEDT() {
        new JFrame("combo thing") {{
            setLayout(new java.awt.GridLayout(2, 1));
            add(new JComboBox() {{
                setEditable(true);
                setInputVerifier(new InputVerifier() {
                    @Override public boolean verify(JComponent input) {
                        System.err.println("Hi!");
                        return true;
                    }
                });
            }});
            add(new JTextField());
            setDefaultCloseOperation(EXIT_ON_CLOSE);
            pack();
            setVisible(true);
        }};
    }    
}

Looks like it's a problem with JComboBox being a composite component.我建议避免使用这种令人讨厌的UI解决方案。