Re: [J2SE] 有關 javax.swing.JTextField
※ 引述《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
推
06/10 12:44, , 1F
06/10 12:44, 1F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 4 之 5 篇):