java - 将焦点设置到 JPanel 中的 Swing 控件的最佳实践

标签 java swing focus

一个学派说添加一个窗口监听器并在 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/

相关文章:

java - GridBagLayout 位于 BoxLayout 的中心而不是顶部

java - 为什么 DragHandler exportAsDrag 禁用我的 MouseMotionListener?

forms - HTML 点击提交按钮两次

java - JSON 查询不更新 TextView

java-根据指定的整数值对字符串的链接列表进行排序

Java临时文件的读写

java - Android VMD MySQL 插入和显示对话框

java - GridBagLayout 中的 JScrollPane 影响应用程序的大小

wpf - 调用CheckBox.Focus()时如何使CheckBox焦点边框出现?

c# - 如何从 WinForms 中的文本框移除焦点?