作者csihcs (非天夜翔)
站内java
标题Re: [J2SE] 有关 javax.swing.JTextField
时间Tue Jun 10 12:37:08 2008
※ 引述《TonyQ (骨头)》之铭言:
: ※ 引述《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
之前有一度使用另外开一个 Thread 的方式去解决原先的错误,
但是发现输入东西之後,文字会闪个不停,
这样觉得很诡异。
http://www-900.ibm.com/developerWorks/cn/java/j-merlin/part11/index.shtml
而刚刚在这边有找到我需要的,
分享给各位。
(附注:上面的网址是大陆网站)
他是利用
javax.swing.JFormattedTextField
javax.swing.text.MaskFormatter
这两个 Class 来完成的。
也谢谢 TonyQ 大大不辞辛劳的协助我。
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 59.104.31.180
1F:推 TonyQ:感谢分享~~ 06/10 12:44