java Swing 文本框获取和失去焦点的问题

zhangle1 2011-05-04 04:54:55
代码如下:

JTextField code=new JTextField();
code.addFocusListener(new FocusListener()
{
@Override
public void focusGained(FocusEvent e) {
// TODO Auto-generated method stub
JOptionPane.showMessageDialog(null,"Gained");
}
@Override
public void focusLost(FocusEvent e) {
// TODO Auto-generated method stub
JOptionPane.showMessageDialog(null,"Lost");
}
});

该文本框在一个模态窗口中,运行示例程序后,只要焦点移入该文本框,就不停的失去焦点,再获得焦点(注意是先失去焦点,事件顺序也不对啊),再失去焦点,获得焦点。。。。。。 不知道这是什么原因引起的,正常应该是只获得一次焦点,然后离开该文本框以后才会激活失去焦点的事件。大家碰到过这种问题吗?给支个招吧。谢谢啦!
...全文
2493 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
nomousewch 2011-05-04
  • 打赏
  • 举报
回复
问题在于JOptionPane.showMessageDialog()方法,它的完整过程是在原先的窗口基础上新建一个对话框弹出并当前获取焦点,然后再关闭对话框,将焦点交回到原先的窗口上。
当你点击JTextField的时候触发它的focusGained事件,这时候JTextField获得了焦点并执行focusGained()方法中的代码,执行JOptionPane.showMessageDialog(null,"Gained")这句话的效果是新弹出一个确认对话框并将这个对话框设为当前的焦点,因此对于原先JTextField来说它在此时又失去了焦点从而触发focusLost方法,并执行JOptionPane.showMessageDialog(null,"Lost"),执行完这句话之后对话框关闭并将JTextField设为当前焦点。
huntor 2011-05-04
  • 打赏
  • 举报
回复
获得焦点后、focusGained被调用弹出消息框、这时失去焦点 focusLost被调用。

你在方法中添加一句 System.out.println("Gained");

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧