2012-12-09 48 views
3

我想創建一個Swing JTextPane,當用戶在其中輸入文本時需要採取操作。但我也希望能夠更改該窗格中的文本,而不用將其作爲用戶輸入進行處理。我怎樣才能做到這一點?如何在不觸發insertUpdate()的情況下將文本插入到文檔中

+3

您可以偵聽'KeyEvents',然後只查看文檔。或者你可以建立一個內部標誌告訴你的聽衆,它正在被程序而不是用戶修改。 – mercutio

+4

我更喜歡@ mercutio的第二個想法。 KeyEvents可能是騙人的,尤其是因爲還有其他非關鍵的方式與文本組件交互。 –

+0

*改變該窗格中的文本,而不會將其作爲用戶輸入*作爲用戶處理該更改我不認爲這是可能的通過API ......與此說,也許你的代碼邏輯有點歪曲,因爲你應該修復整個文本他們輸入,並且比通過'insertString(..)'重置該文本,例如,該調用當然會觸發'insertUpdate(..)',但由於文本先前已更改爲匹配約束,它應該通過所有驗證因此不會做任何更改,即'insertString(..)'不稱爲IMO。類似這樣的東西:http://stackoverflow.com/a/13721186/1133011 –

回答

1

如果您不讓更新事件觸發,那麼根據實際實施情況,您的UI可能不會更新。所以我同意,通過與事件處理程序交談,讓它知道下一次更改將是一個程序化更改,可能會更好。類似這樣的:

try { 
    listener.setProgrammaticChange(true); 
    // change document 
} 
finally { 
    listener.setProgrammaticChange(false); 
} 
相關問題