我有一个包含两个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而我不知道如何。
其他人是否处理过类似的问题?
答案 0 :(得分:2)
Focus / FocusSubsystem非常异常,您必须将相关代码包装到invokeLater
FocusListener
可能导致案件中的问题与JTextComponents
的其他听众一起添加,例如FocusListener
ItemListener
{(1}}添加到(可编辑的)JComboBox
导致无端循环,或者Caret
同时存在DocumentListener
的行为,
在focusLost
,
在focusGained
内的所有代码结束
为什么你需要FocusListener
的原因,也许有两个更好的选择,但你的问题没有明确,用SSCCE编辑你的问题
答案 1 :(得分:1)
FocusEvent
有public Component getOppositeComponent()
方法