作者TonyQ (骨头)
看板java
标题Re: [J2SE] 有关 javax.swing.JTextField
时间Tue Jun 10 12:27:19 2008
※ 引述《csihcs (非天夜翔)》之铭言:
: ※ 引述《csihcs (非天夜翔)》之铭言:
: 听了 TonyQ 大的解说,做了下面这个动作
: JTextField f = new JTextField();
: DocListener dl = new DocListener(3);
: f.getDocument().addDocumentListener(dl);
: public class DocListener impliments DocumentListener {
: private final int length;
: public DocListener(int length) {
: this.length = length;
: }
: public void insertUpdate(DocumentEvent e) {
: try {
: Document doc = e.getDocument();
: if(doc.getLength() > length) {
: doc.remove(length,doc.getLength(),null);
: // 这里 Compile 会过,但是 Runtim 的时候只要这行被执行到就会出现
: // java.lang.IllegalStateException: Attempt to mutate in notification
: }
: } catch (BadLocationException ex) {}
: }
: public void removeUpdate(DocumentEvent e) {}
: public void changedUpdate(DocumentEvent e) {}
: }
: 想请问各位大大,我该如何在这里做 doc 的内容修改。
: 谢谢各位大大的指教。 m(_@_)m
这段我以前写过类似的CODE,所以还有一点点微薄的印象。
因为你修改->有异动又跑回来这个事件->可能又会回来这个事件,
所以可能会有递回现象,所以这个地方他直接禁止你改。
我记得以前好像是用一个第二方的thread来做跨thread的修改,
那时候没想太多,不过显然不是很好的解决方案。
刚刚爬了一下 Tutorials相关部份(
http://0rz.tw/7e4ep )
在Filter的地方有提到 JTextPane可以用 Filter设定长度,
如果你可以接受把JTextField改成JTextPane,
底下有一个简单的sample可以试着run起来看看。
http://tony1223.no-ip.org:1986/JSPWiki/Wiki.jsp?page=Java_gui_jtp_maxlength
--
▄▅▆▇███▇▆▅▄▃ ╰┼╯─╮ ╮
◥███████████◣ ╰┼╯=│=│
◥██████───────◣ *. ╯ ╯ ╯ の 物 语 .*
◥███████──────◣ ~ ◢◣ ◢◣
◥██████───────◤ ◥◤* 空白的世界.翼
*◥◤
◥██▁▂▃▄▅▆▇███▆▅▄▃▂▂
~telnet://tony1223.no-ip.info
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.134.27.68