2013-02-05 15 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裏面的方法的建議仍然有效。