【发布时间】:2016-05-05 17:43:55
【问题描述】:
我有一个 JDialog 的子类...被覆盖的 setVisible 方法如下所示:
public void setVisible( boolean visible ){
super.setVisible( visible );
if( visible ){
inputJTF.requestFocus();
}
}
事实上,当我显示 JDialog 时,焦点是在 JTF 上...但后者恰好也是 JDialog 中的“第一个”组件(NORTH 面板),所以这并不奇怪.
但我的测试代码告诉我其他事情:
EventQueue.invokeAndWait(new Runnable() {
@Override
public void run() {
app.mainFrame.searchDlg.setVisible( true );
// all 3 of these asserts fail...
assertTrue( app.mainFrame.searchDlg.inputJTF.hasFocus() );
Component focusOwner = app.mainFrame.searchDlg.getFocusOwner();
assertFalse( focusOwner == null );
assertTrue( String.format( "# focus owner %s", focusOwner.getClass()), focusOwner == app.mainFrame.searchDlg.inputJTF );
}
});
...所以实际上我被告知“焦点所有者”为空...并且 JTF 没有焦点。谁能解释一下是怎么回事?
【问题讨论】: