检测JComboBox编辑

use*_*457 9 java swing jcombobox

我有一个JComboBox,每秒一次,我想从数据库中检索一组字符串,并将这些字符串设置为JComboBox的内容,其中一个作为当前选择的值.但我也希望用户能够编辑JComboBox并向数据库添加值并将其设置为当前值.

我希望能够检测到何时将字符输入JComboBox,因此我可以重置倒计时,这会阻止更新JComboBox,只要它不为零.我的第一直觉是使用KeyListener,但组合框上的Java教程说明了这一点,

虽然JComboBox继承了为低级事件(例如焦点,键和鼠标事件)注册侦听器的方法,但我们建议您不要在组合框上侦听低级事件.

他们接着说,所发射的事件可能会根据外观和感觉而改变.

Sco*_*ria 5

这有点冒险,但它应该可以侦听编辑器组件(JTextField)上的文档更新。

    JComboBox cb = new JComboBox();
    Component editor = cb.getEditor().getEditorComponent();
    if (editor instanceof JTextField) {
        ((JTextField) editor).getDocument().addDocumentListener(new DocumentListener() {
            @Override
            public void insertUpdate(DocumentEvent documentEvent) {
                //To change body of implemented methods use File | Settings | File Templates.
            }

            @Override
            public void removeUpdate(DocumentEvent documentEvent) {
                //To change body of implemented methods use File | Settings | File Templates.
            }

            @Override
            public void changedUpdate(DocumentEvent documentEvent) {
                //To change body of implemented methods use File | Settings | File Templates.
            }
        });                                      
    }
Run Code Online (Sandbox Code Playgroud)

对于从 JComboBox 中键入/删除的每个字符,都应该调用这些 *Update(DocumentEvent documentEvent) 方法。