gpt4 book ai didi

Java:文本字段 FocusListener focusGained 执行两次,为什么?

转载 作者:行者123 更新时间:2023-12-01 14:16:17 25 4
gpt4 key购买 nike

我有一个文本框,我想在文本框获得焦点时显示一个对话框。所以我写了以下代码。但是当对话框被处理后,对话框会再次出现。我尝试使用换行符进行调试和检查。那次它不会执行多次,但在正常模式下它会执行多次,因此对话框出现两次...

txt1.addFocusListener(new FocusListener(){

@Override
public void focusGained(FocusEvent e) {

myform f = new myform(null,true);
f.setLocationRelativeTo(null);
f.setVisible(true);
if("OK".equals(f.button_state)){
txt2.requestFocus();
}
}

@Override
public void focusLost(FocusEvent e) {
}

});

如果我将 txt2.requestFocus() 放在可见的对话框之前,则不会发生多次执行。但我不相信。因为我需要将光标保留在 txt1 中。

你有什么想法吗..>

最佳答案

  • FocusListener 不是创建修改容器的代码的正确位置

  • Focus 是完全异步的,因此可以保证方法的正确顺序

  • Swing GUI 创建必须包装到 invokeLater 中,更多信息请参阅 Oracle 教程 - 初始线程

  • 只有这段代码被剪断才能在 FocusListener 中工作

。包装到invokeLater

if("OK".equals(f.button_state)){
txt2.requestFocus();
}
  • setVisible(true);myform 包装到 invokLater 中,但我认为必须在之前准备好(每个 JComponents 被添加、初始化、使用和应用LayoutManager打包),否则没有任何保证,你只能在那里调用

。包装到invokeLater

f.setVisible(true);
if("OK".equals(f.button_state)){
txt2.requestFocus();
}

关于Java:文本字段 FocusListener focusGained 执行两次,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18084661/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com