JTextField有一個keyTyped事件,但它似乎在觸發時單元格的內容尚未更改。如何在用戶類型中獲取JTextField內容的長度?
因爲.length()在這裏讀取總是錯誤的。
必須有一個簡單的方法來獲得長度,因爲它在鍵擊後顯示給用戶?
JTextField有一個keyTyped事件,但它似乎在觸發時單元格的內容尚未更改。如何在用戶類型中獲取JTextField內容的長度?
因爲.length()在這裏讀取總是錯誤的。
必須有一個簡單的方法來獲得長度,因爲它在鍵擊後顯示給用戶?
這可能不是最佳的方式(它已經有一段時間),但在過去,我已經加了的DocumentListener到的JTextField和任何事件(插入,更新,刪除)I:
evt.getDocument().getLength()
它返回文本字段內容的總長度。
這可能與此有關"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()」,或者在用戶界面上鍵入字段中的用戶。
KeyEvent
s是低級別的事件,在這裏不適合[聽起來很熟悉]。
JTextField
系統如何知道輸入了一個字符?通過鍵盤輸入事件(IIRC,通過PL & F完成)。你的監聽器之前事件是否被分派到系統監聽器?它可能會或可能不會。
在這種情況下,您可能想要轉到Document
並添加更高級別的偵聽器。對於Swing來說,儘早推出模型是個好主意 - 'J'類接口是不連貫的。如果您正在截取輸入數據,那麼您可能需要一個自定義模型(或者在Document
a DocumentFilter
的情況下)。
使用此代碼:
public void jTextField6KeyReleased(java.awt.event.KeyEvent evt)
{
System.out.println(jTextField6.getText().length());
}
考慮擴大你的答案來解釋給提問者爲什麼,這達到預期的結果,可能鏈接到文檔。如此,這僅僅是有用的。 – 2013-10-08 16:10:57