嘗試了幾種不同的方法,但迄今尚未取得成功。只是想知道我是否缺少任何東西。我有一個JSpinner,它是DateSelector小部件和Calendar的組件。如果用戶更改了JSpinner中的任何文本,而不是使用Calendar控件或JSpinner上下箭頭,我試圖激發驗證方法。Java KeyListener未在JSpinner上觸發
以下是我已經嘗試了不同的方法:
jSpinner1.addKeyListener(kl);
jSpinner1.getEditor().addKeyListener(kl);
((JSpinner.DefaultEditor) jSpinner1.getEditor().getTextField().addKeyListener(kl);
任何人在那裏有任何想法,我做錯了嗎?由於
UPDATE 道歉,我應該說我已經添加一個ChangeListener其連接到的JSpinner的JSpinnerDateModel。像這樣:
ChangeListener changeListener = new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
dateChanged();
}
};
jSpinnerDateModel.addChangeListener(changeListener);
KeyListener keyListener = new KeyListener() {
@Override
public void keyTyped(KeyEvent e) {
// TODO Auto-generated method stub
}
@Override
public void keyPressed(KeyEvent e) {
System.out.println(e.getKeyChar());
dateChanged();
}
@Override
public void keyReleased(KeyEvent e) {
// TODO Auto-generated method stub
}
};
((JSpinner.DefaultEditor) jSpinner1.getEditor()).getTextField().addKeyListener(
keyListener);
感謝
弗蘭克
在原始問題中沒有包含這個信息的道歉(我現在已經更新了),但是我已經有了一個連接到JSpinner模型的ChangeListener。這會捕獲對JSpinner中的值所做的任何更改,但僅當用戶使用JSpinner控件時纔會發生更改。我試圖在用戶通過鍵盤手動編輯JSpinner的值時觸發KeyListener的按鍵事件。謝謝 – Frank 2010-10-06 15:19:42
@Frank:每當用戶改變數值*並聚焦*(或按下Enter)時,ChangeListener應該會觸發。儘管如此,你說得對,它在用戶輸入時不會觸發。 – 2010-10-06 15:36:37
是的,這是我遇到的問題。這是一個嚮導面板的一部分,如果用戶只是簡單地選擇一個日期然後點擊下一步,那麼焦點不會丟失,驗證方法的激發時間太晚。無論如何感謝您的輸入。似乎比首先想到的更棘手。 – Frank 2010-10-06 15:50:00