检查哪个JTextField将获得焦点

时间:2012-03-28 09:43:21

标签: java swing focus

我有一个包含两个JTextField s的表单: text1 text2

每个文本字段都有一个焦点监听器,我正在text1和text2上监听focusLost()

焦点遍历 text1 - > text2的即可。

当从text2中丢失焦点时,处理text1和text2,然后清除然后再将焦点设置为text1。

在text2上,这是我的自定义焦点监听器:

private class Text2FocusListener implements FocusListener{
  @Override
  public void focusLost(FocusEvent arg0){
     if(arg0.isTemporary()){
        return;
     }
     process_input...
  }
}

问题是,如果用户需要点击(通过鼠标或键盘)返回到text1(即需要更正text1字段中的数据),则会丢失来自text2的焦点,并处理来自text1和text2的输入。

if子句中,我需要以某种方式检查焦点是否发送到text1而我不知道如何。

其他人是否处理过类似的问题?

2 个答案:

答案 0 :(得分:2)

  1. Focus / FocusSubsystem非常异常,您必须将相关代码包装到invokeLater

  2. FocusListener可能导致案件中的问题与JTextComponents的其他听众一起添加,例如FocusListener ItemListener {(1}}添加到(可编辑的)JComboBox导致无端循环,或者Caret同时存在DocumentListener的行为,

  3. focusLost

  4. 上删除这些侦听器
  5. focusGained内的所有代码结束

  6. 后,只添加必需的侦听器
  7. 为什么你需要FocusListener的原因,也许有两个更好的选择,但你的问题没有明确,用SSCCE编辑你的问题

答案 1 :(得分:1)

FocusEventpublic Component getOppositeComponent()方法