【问题标题】:Check which JTextField is going to get focus检查哪个 JTextField 将获得焦点
【发布时间】:2012-03-28 09:43:21
【问题描述】:

我有一个包含两个JTextFields 的表单:text1text2

每个文本字段都有一个焦点侦听器,我在 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,但我不知道如何。

有没有其他人处理过类似的问题?

【问题讨论】:

  • which if 子句 - 在您的 sn-p 中看不到任何内容 ;-) 或者换句话说:为了尽快获得更好的帮助,请展示一个 SSCCE,它可以准确地展示您的内容是在追求你的期望如何没有得到满足。
  • 该死 .. 对 if 是盲目的 ;-) 但仍然没有看到任何 SSCCE,我又瞎了?

标签: java swing focus


【解决方案1】:
  1. Focus/FocusSubsystem 非常异步,您必须将相关代码包装到 invokeLater

  2. FocusListener 可能会在与其他侦听器一起添加到JTextComponents 的情况下导致问题,例如FocusListenerItemListener 添加到(可编辑的)JComboBox 导致 end_less 循环,或者与 Caret 一起 DocumentListener 的 stange 行为,

  3. 删除focusLost上的这些监听器,

  4. focusGained 内的所有代码结束后仅添加所需的侦听器

  5. 为什么你需要FocusListener,也许有两个更好的选择,但你的问题不清楚,用SSCCE编辑你的问题

【讨论】:

  • ad 1:是的,处理代码在invokeLater()中,但这与问题无关。
  • ad 2:只有这个监听器在 JTextField 上,我知道这个问题,它与问题无关 ad 3:效果很好 ad 5:没有找到,必须在焦点后验证输入在最后一个输入(“text2”字段)广告4中丢失:嗯,如果我将组件放在“text2”字段之后仅1像素宽,它将成为焦点遍历的下一个组件,那么应该处理“text1”和“text2”在 text2 将失去焦点并且如果用户单击返回到“text1”项目后,将不会处理处理代码。会试试的,看起来不错..
  • 这是对我的学术观点的学术回答,也许还有其他方法,用 SSCCE 编辑您的问题,
  • 看我的广告 4:它看起来像解决方案?
  • @Ladislav DANKO 默认情况下我使用另一种方式作为 FocusXxx
【解决方案2】:

FocusEventpublic Component getOppositeComponent() 方法

【讨论】:

  • 经过一番阐述后,我要回答自己:这是不可能的。事实上,我可以 MyFocusTraversalPolicy extends FocusTraversalPolicy 类你可以实现并通过 getComponentAfter() 请求下一个组件,但这与“哪个组件将在现实中获得焦点?”的问题无关。是的,我可以问MyFocusTraversalPolicy 哪个组件在组件之后或之前,但是在组件的焦点丢失之后,没有办法找出真正的哪个组件会获得焦点(我可以用鼠标单击不在的组件上MyFocusTraversalPolicy 中的-of-order)。
猜你喜欢
  • 1970-01-01
  • 2015-10-30
  • 2017-03-12
  • 2014-12-13
  • 1970-01-01
  • 2023-04-04
  • 2016-04-24
  • 1970-01-01
  • 2013-12-25
相关资源
最近更新 更多