Re: [問題] 關於JTextField的問題

看板java作者 (zxwxz)時間19年前 (2006/06/24 13:07), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串5/6 (看更多)
※ 引述《calais007 (淺水中)》之銘言: : ※ 引述《zxwxz (zxwxz)》之銘言: : : 現在正在做gui的介面 : : 由於使用者輸入可能出現很多問題 : : 因此想直接把一個JTextField改寫成只能接受某些特定文字或數字 : : 但是問題來了就是如果是使用.addKeyListener() : : 雖然可以抓的到文字部分 : : 但是key的觸發並不是文字改變的觸發 : : 因此抓到了event卻不知道怎樣把這個event擋掉 : : 例如想擋掉非數字輸入 : : 輸入a : : 可是卻變成抓到event VK_a : : 但是此時text內容還沒變動 : : 請問有辦法抓到文字內容被變更的Listener嗎? : overwrite processEvent(KeyEvent e) : 要達到你要的效果如下程式所示 : import javax.swing.*; : import java.awt.event.*; : public class myTextField extends JTextField{ : public myTextField(int col){ : super(col); : } : protected void processKeyEvent(KeyEvent e) { : char c = e.getKeyChar(); : //如果你有需要的話可以在這裡加你想要的alert : //if key is NOT between 0 and 9 : //do nothing : if(c <48 || c>57) : return; : else : super.processKeyEvent(e); : } : } 找到了好方法了 getDocument().addDocumentListener 就可以抓到Document被改寫的時間點 這樣更可以避免被複製貼上破壞原有的格式 又遇到更麻煩的問題 public void insertUpdate(DocumentEvent e){ JOptionPane.showMessageDialog(null, getText()); try{ cnt = Integer.parseInt(getText()); } catch(NumberFormatException n){ setText(cnt+""); } if(cnt < lowbound) setText(lowbound+""); else if(cnt > upbound) setText(upbound+""); } 本想說判定完已經改變後的文字敘述 可是卻造成IllegalStateException 好像無法在這個觸發中再去SETTEXT 不知有何好辦法 有什麼辦法可以把 javax.swing.text.AbstractDocument.writeLock的設定改掉呢?? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 218.165.129.28 ※ 編輯: zxwxz 來自: 218.165.129.28 (06/24 14:26) ※ 編輯: zxwxz 來自: 218.165.129.28 (06/24 15:43)
文章代碼(AID): #14dCYc2d (java)
文章代碼(AID): #14dCYc2d (java)