一般Apply按鈕應(yīng)該在用戶(hù)有輸入時(shí)有效,輸入沒(méi)有變化時(shí)無(wú)效。
為了達(dá)到這個(gè)效果,一般界面上每個(gè)輸入控件要監(jiān)聽(tīng),并且和以前的值做比較,實(shí)現(xiàn)起來(lái)相當(dāng)麻煩。
因?yàn)槲覀円延械慕缑媸腔跀?shù)據(jù)綁定,綁定到一個(gè)克隆的對(duì)象上。這樣判斷有沒(méi)有變化就很簡(jiǎn)單,updateInput之后,比較兩個(gè)對(duì)象是否一致即可。
什么時(shí)候去判斷呢?在用戶(hù)輸入之后:捕捉鍵盤(pán)、鼠標(biāo)事件。
攔截鍵盤(pán)鼠標(biāo)事件目前找到兩種方法:
1. Toolkit.getDefaultToolkit().addAWTEventListener(listener,eventMask);
這個(gè)方法注冊(cè)全局的監(jiān)聽(tīng)機(jī)制,無(wú)論哪個(gè)窗口。里面注冊(cè)為weakHashmap,應(yīng)該不用考慮垃圾回收問(wèn)題。因?yàn)槭侨值模唤ㄗh采用。
2. 攔截每個(gè)component自己的事件。
正常來(lái)說(shuō),如果在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