问题: 通过调用setAlwaysOnTop(true)方法后窗口能够在最前表示,但窗口上TextField控件却不能接受键盘输入。
程序代码:
public class MerlinFocus extends Frame{
       DefaultKeyboardFocusManager myFocusmgr
               = new DefaultKeyboardFocusManager();
       Button bt;
       TextField tf;
       MerlinFocus() {
           bt = new Button("myButton");
           tf = new TextField("myTextField");
           setLayout(new GridLayout());
           add(tf);
           add(bt);
           
           
       }
       public static void main(String args[]) {
           
           try {
            Thread.sleep(3000);  //为了测试窗口能在最上层表示,在这个时间段里打开一个notepad,
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
           MerlinFocus mf = new MerlinFocus();
           mf.setTitle("Merlin Focus");
           mf.pack();
           mf.toFront();
           mf.setAlwaysOnTop(true);
           mf.setExtendedState(Frame.NORMAL);
           mf.setVisible(true);
       }
}  

解决方案 »

  1.   

    CWnd::SetForegroundWindow
    ::SetFocus(this->GetSafeHwnd());
      

  2.   

    1,最好不要再用Frame了,要用也用JFrame
    2,你的组件也要养成一个好习惯,不要直接放到面板上,而要放到一个JPanel上,再放到面板上,这样管理起来也方便
    3,不能获得焦点的组件是JWindow,以及Window,其它的都是可以的
    你用JFrame试一下,还有,你的GridLayout用错了,不是像你那样用的