2012-12-09 46 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); 
} 
相关问题