求助,TextField的addFocusListener事件中showMessageDialog弹框两次的问题

nmm81101 2015-11-02 08:32:16
代码如下:
text1.addFocusListener(new FocusListener(){
@Override
public void focusGained(FocusEvent e) {
JOptionPane.showMessageDialog(null, "对不起,您输入的");
text.requestFocusInWindow(); //设置焦点为长度有误的文本框中
text.setText(null);
}
@Override
public void focusLost(FocusEvent e) {
}
});

这里的JOptionPane.showMessageDialog(null, "对不起,您输入的");弹框永远弹两次,把这句改成system.out.print语句却又只执行一次,这究竟是JOptionPane.showMessageDialog语句的问题还是哪的问题?求大牛指点,最好能给个简单的代码,谢谢!!
...全文
238 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
nmm81101 2015-11-04
  • 打赏
  • 举报
回复
好的,谢谢!信息已收到!分也结了!再次感谢!
三仙半 2015-11-03
  • 打赏
  • 举报
回复
看看下面的代码是不是你想要的效果

import java.awt.TextField;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

public class DemoFrame_3 extends JFrame {
	private static final long serialVersionUID = -4153854902587618289L;

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		new DemoFrame_3().setVisible(true);
	}

	private TextField text1;

	public DemoFrame_3() {
		// TODO Auto-generated constructor stub
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		this.setSize(400, 300);
		this.setLayout(null);

		text1 = new TextField();
		text1.setSize(150, 25);
		text1.setLocation(10, 10);
		add(text1);
		text1.addFocusListener(new FocusListener() {
			@Override
			public void focusGained(FocusEvent e) {

			}

			@Override
			public void focusLost(FocusEvent e) {
				String txt = text1.getText();
				if (txt.equals("")) {
					JOptionPane.showMessageDialog(DemoFrame_3.this, "对不起,这是必选字段,请输入。");

					text1.requestFocusInWindow(); // 设置焦点为长度有误的文本框中
					text1.setText(null);
				} else {
					JOptionPane.showMessageDialog(DemoFrame_3.this, "您输入的是:" + txt);
				}
			}
		});

		JButton button = new JButton("确定");
		button.setSize(75, 25);
		button.setLocation(80, 50);
		add(button);
	}
}
三仙半 2015-11-03
  • 打赏
  • 举报
回复
我觉得你这个代码,会反复的弹出MessageBox, 而不仅仅是两次吧?你把输入检查移动到focusLost()方法中试试。
nmm81101 2015-11-03
  • 打赏
  • 举报
回复
你好,感谢你回复帖子的指导,我用了你提供的方法,把MessageBox写到了focusLost()语句中,现在弹窗确实只弹一次了,但在点窗体的最大化,最小化,和关闭按钮时focusLost()事件也响应了,就是说在关闭当前窗体时,所有空白的文本框的MessageBox都弹一次,请问下,这个应该怎样解决?

62,614

社区成员

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

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