今天在调试程序的时候突然发现,当某控件有子控件存在时,该控件没有办法获得键盘焦点,该控件的键盘事件也就没有办法响应。而键盘焦点被该控件的某一个子控件获得。为什么设置给控件的键盘焦点为什么被子控件获得呢?经过看源代码发现,setFocus并不是将键盘焦点设置给该控件,而是将键盘焦点设置给它的某个子控件。当该控件的存在子控件时,setFocus方法无法实现你的需求。那么有什么方法来实现呢?通过查看setFocus源代码发现forceFocus才是最终设置键盘焦点。既然setFocus不行,那就用forceFocus代替。问题解决。
建议以后在设置键盘焦点用forceFocus、setFocus请少用。