Re: [問題] 關於JTextField的問題
※ 引述《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)
討論串 (同標題文章)
java 近期熱門文章
PTT數位生活區 即時熱門文章