0

我在 中编写 Bing/Googleinstant search类型的功能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组合框中键入内容时没有调用它?如果还有其他简单的替代方法,请分享。

我该如何解决上述问题?

4

2 回答 2

3

Wrap the call inside changedUpdate() in SwingUtilities.invokeLater()

于 2013-02-05T11:55:33.640 回答
1

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

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

于 2014-10-20T16:35:39.480 回答