一个学派说添加一个窗口监听器并在 windowOpened 事件触发时设置焦点:
addWindowListener(new WindowAdapter(){
public void windowOpened( WindowEvent e){
txtMessage.requestFocus();
}
});
另一种观点认为使用 SwingUtilities.invokeLater 方法在单独的线程中设置焦点。
SwingUtilities.invokeLater(new Runnable()
{
public void run() {
field.requestFocus();
}
});
谁能告诉我哪个是最佳实践,或者您什么时候会选择一个而不是另一个? 使用线程解决方案时,是否有可能线程丢失并且焦点永远不会设置?
最佳答案
GUI 的所有更新都必须在事件调度线程 (EDT) 上完成。如果您不确定自己是否在上面,invokeLater(...) 将始终保证。如果您使用它并且不需要它,它不会损害任何东西。
此外,您应该使用 field.requestFocusInWindow();
关于java - 将焦点设置到 JPanel 中的 Swing 控件的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15796178/