2008-12-30 73 views

回答

8

這可能不是最佳的方式(它已經有一段時間),但在過去,我已經加了的DocumentListener到的JTextField和任何事件(插入,更新,刪除)I:

evt.getDocument().getLength() 

它返回文本字段內容的總長度。

3

這可能與此有關"bug" (or rather "feature")

的聽衆事先通知的關鍵事件給他們處理,以 讓聽衆通過消耗他們「偷」的事件。這給出了 與舊的awt消費事件概念的兼容性。
「鍵入」 事件並不意味着文本被輸入到組件中。這不是一個 錯誤,它是打算的行爲。

一個可能的解決方案是聽一個associated Document

// Listen for changes in the text 
myTextField.getDocument().addDocumentListener(new DocumentListener() { 
    public void changedUpdate(DocumentEvent e) { 
    // text was changed 
} 
public void removeUpdate(DocumentEvent e) { 
    // text was deleted 
} 
public void insertUpdate(DocumentEvent e) { 
    // text was inserted 
} 
}); 

注意這部作品無論文本如何得到改變;通過剪貼板剪切/粘貼,在TextField上使用progamatic「setText()」,或者在用戶界面上鍵入字段中的用戶。

3

KeyEvent s是低級別的事件,在這裏不適合[聽起來很熟悉]。

JTextField系統如何知道輸入了一個字符?通過鍵盤輸入事件(IIRC,通過PL & F完成)。你的監聽器之前事件是否被分派到系統監聽器?它可能會或可能不會。

在這種情況下,您可能想要轉到Document並添加更高級別的偵聽器。對於Swing來說,儘早推出模型是個好主意 - 'J'類接口是不連貫的。如果您正在截取輸入數據,那麼您可能需要一個自定義模型(或者在Document a DocumentFilter的情況下)。

2

使用此代碼:

public void jTextField6KeyReleased(java.awt.event.KeyEvent evt) 
{ 
    System.out.println(jTextField6.getText().length()); 
} 
+0

考慮擴大你的答案來解釋給提問者爲什麼,這達到預期的結果,可能鏈接到文檔。如此,這僅僅是有用的。 – 2013-10-08 16:10:57