一般Apply按鈕應該在用戶有輸入時有效,輸入沒有變化時無效。
為了達到這個效果,一般界面上每個輸入控件要監聽,并且和以前的值做比較,實現起來相當麻煩。

因為我們已有的界面是基于數據綁定,綁定到一個克隆的對象上。這樣判斷有沒有變化就很簡單,updateInput之后,比較兩個對象是否一致即可。

什么時候去判斷呢?在用戶輸入之后:捕捉鍵盤、鼠標事件。

攔截鍵盤鼠標事件目前找到兩種方法:
1. Toolkit.getDefaultToolkit().addAWTEventListener(listener,eventMask);
這個方法注冊全局的監聽機制,無論哪個窗口。里面注冊為weakHashmap,應該不用考慮垃圾回收問題。因為是全局的,不建議采用。
2. 攔截每個component自己的事件。
正常來說,如果在textbox里面打字,事件不會交給window處理。enableInputMethods(true)可以幫忙。
enable以后調用getInputContext(),取得InputContext處理。
注意,InputContext的dispatchEvent(AWTEvent)會接到各種消息,感興趣的getID()有以下三個:
???MouseEvent.MOUSE_CLICKED
???MouseEvent.MOUSE_WHEEL
???KeyEvent.KEY_TYPED