2013-02-05 14 views
0

我写冰/谷歌instant search样的特征在combo box,所以这个组合框提供建议,根据他所键入的用户。该程序的作用像一个魅力,但他们是一个错误,我无法找出如何解决。问题是,键入的第一个字符在键入字符后第二个字符被识别,字符的其他位置也一样。文件没有更新的组合框的Java

下面是代码:

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未被调用?如果还有其他简单的替代方案,请分享。

我该如何解决上述问题?

回答

3

裹在SwingUtilities.invokeLater()

+0

是什么呢? –

+0

它确保在EDT上创建/更新GUI类。有关更多详细信息,请参见[Swing中的并发](http://docs.oracle.com/javase/tutorial/uiswing/concurrency/)。 –

+0

在事件处理的长度可以反映错误值,因为事件处理正在进行中。在Document中反映的更改后使用呼叫来调用您的代码。 – StanislavL

1

changedUpdate()通话按照Java tutorial在Oracle的网站,changedUpdate()方法不适用于纯文本文档。如果这是你的情况下,使用insertUpdate()和/或removeUpdate()

使用SwingUtilities里面的方法的建议仍然有效。