文档不更新组合框Java

时间:2013-02-05 11:41:17

标签: java swing document documentlistener invokelater

我正在instant search编写Bing / Google combo box类功能,因此此组合框会根据用户输入的内容向用户提供建议。该程序就像一个魅力,但它们是一个我无法弄清楚如何解决的错误。问题是,键入的第一个字符在键入字符的第二个字符后被识别,字符的其他位置也是如此。

以下是代码:

public MyClass extends JFrame
{
 private  Document doc;
public MyCode()
{
  comboxBox= new JComboBox();
  Handler handle = new Handler();
  JTextComponent comp = (JTextComponent) comboBox.getEditor().getEditorComponent();
  doc = comp.getDocument().addDocumentListener(handle);
  comboBox.addKeyListener(handle);
}

private class Handler implements DocumentListener,KeyListener
{
    String dataTobeSearched= "";
    @Override
    public void changedUpdate(DocumentEvent event) {
        try
        {
            dataTobeSearched = doc.getText(0, doc.getLength());
            System.out.println("Data to be searched "+dataTobeSearched);
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
 }

    @Override
    public void keyPressed(KeyEvent event) {

            changedUpdate(null);
    }
}

我做错了什么?

我将keyListener添加到组合框编辑器中,因为在组合框中输入内容时没有调用DocumentListener?如果还有其他简单的替代方案,请分享。

如何解决上述问题?

2 个答案:

答案 0 :(得分:3)

changedUpdate()

中的SwingUtilities.invokeLater()内打电话

答案 1 :(得分:1)

根据Oracle网站上的Java tutorialchangedUpdate()方法不适用于纯文本文档。如果是这种情况,请使用insertUpdate()和/或removeUpdate()

在方法中使用SwingUtilities的建议仍然有效。