问题: 通过调用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);
}
}
程序代码:
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);
}
}
::SetFocus(this->GetSafeHwnd());
2,你的组件也要养成一个好习惯,不要直接放到面板上,而要放到一个JPanel上,再放到面板上,这样管理起来也方便
3,不能获得焦点的组件是JWindow,以及Window,其它的都是可以的
你用JFrame试一下,还有,你的GridLayout用错了,不是像你那样用的