一般Apply按鈕應(yīng)該在用戶有輸入時(shí)有效,輸入沒有變化時(shí)無效。
為了達(dá)到這個(gè)效果,一般界面上每個(gè)輸入控件要監(jiān)聽,并且和以前的值做比較,實(shí)現(xiàn)起來相當(dāng)麻煩。

因?yàn)槲覀円延械慕缑媸腔跀?shù)據(jù)綁定,綁定到一個(gè)克隆的對(duì)象上。這樣判斷有沒有變化就很簡(jiǎn)單,updateInput之后,比較兩個(gè)對(duì)象是否一致即可。

什么時(shí)候去判斷呢?在用戶輸入之后:捕捉鍵盤、鼠標(biāo)事件。

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