首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检测JComboBox编辑

检测JComboBox编辑
EN

Stack Overflow用户
提问于 2012-01-21 00:03:34
回答 2查看 3.6K关注 0票数 9

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

我希望能够检测字符何时被输入到JComboBox中,因此我可以重新设置一个倒计时,这可以防止更新JComboBox,只要它不是零。我的第一反应是使用KeyListener,但是组合框上的Java教程说,

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

他们接着说,引发的事件可能会改变,取决于外观和感觉。

EN

回答 2

Stack Overflow用户

发布于 2012-01-21 00:15:09

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

代码语言:javascript
复制
    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.
            }
        });                                      
    }

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

票数 4
EN

Stack Overflow用户

发布于 2014-10-20 17:24:40

我想补充的是,changedUpdate方法不会对纯文本文档发出通知。如果使用纯文本组件,则必须使用insertUpdate和/或removeUpdate。

最近,我不得不使用文档侦听器作为禁用/启用按钮的方法,如果用户正在编辑组合框。我做了这样的事,做得很好:

代码语言:javascript
复制
public class MyDocumentListener implements DocumentListener
{

  @Override
  public void insertUpdate(DocumentEvent e)
  {
     setChanged();
     notifyObservers(true);
  }

  @Override
  public void removeUpdate(DocumentEvent e)
  {
     setChanged();
     notifyObservers(false);
  }

  @Override
  public void changedUpdate(DocumentEvent e)
  {
     // Not used when document is plain text
  }
}

然后,我将这个侦听器添加到组合框中,如下所示:

代码语言:javascript
复制
((JTextComponent) combobox.getEditor().getEditorComponent())
    .getDocument().addDocumentListener(new MyDocumentListener());

这是因为与组合框关联的文档是纯文本。当我使用changedUpdate时,它没有。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8949466

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档