我有两个编辑框,我想在输入第一个框里的内容不正确的时候,弹出个对话框提示错误信息,然后焦点重新定在第一个框上,目前我写了代码,可是弹出的对话框会弹出两次,请问为什么??其实应该只弹出一次才对。代码如下:
package com.wlh.test;import java.awt.Color;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UIManager;public class TestFoucs { JTextField f1; JTextField f2; JFrame f; JPanel p; JLabel l1; JLabel l2; public TestFoucs() {// try {
// UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
// } catch (Exception ex) {
// System.out.println("Exception: " + ex);
// } f = new JFrame("测试焦点问题");
Container con = f.getContentPane();
p = new JPanel();
l1 = new JLabel("编辑框1:");
l2 = new JLabel("编辑框2:");
f1 = new JTextField("", 12);
f1.setBackground(Color.lightGray);
f1.addFocusListener(new FocusHandler()); f2 = new JTextField("", 12);
//f2.setBackground(Color.lightGray);
//f2.addFocusListener(new FocusHandler());
p.setLayout(new GridLayout(2, 2));
p.add(l1);
p.add(f1); p.add(l2);
p.add(f2);
con.add(p); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
f.pack();
f.setSize(400, 200);
} class FocusHandler implements FocusListener
{
public void focusGained(FocusEvent event)
{
JTextField tf = (JTextField)event.getComponent();
tf.setBackground(Color.pink);
tf.requestFocus();
} public void focusLost(FocusEvent event)
{
JTextField tf = (JTextField)event.getComponent();
tf.setBackground(Color.lightGray);
if(tf.getText().length()<=0)
{
tf.requestFocus();
JOptionPane.showMessageDialog(tf, "不能为空");
}
}
}
public static void main(String[] args) {
new TestFoucs();
}
}
package com.wlh.test;import java.awt.Color;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UIManager;public class TestFoucs { JTextField f1; JTextField f2; JFrame f; JPanel p; JLabel l1; JLabel l2; public TestFoucs() {// try {
// UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
// } catch (Exception ex) {
// System.out.println("Exception: " + ex);
// } f = new JFrame("测试焦点问题");
Container con = f.getContentPane();
p = new JPanel();
l1 = new JLabel("编辑框1:");
l2 = new JLabel("编辑框2:");
f1 = new JTextField("", 12);
f1.setBackground(Color.lightGray);
f1.addFocusListener(new FocusHandler()); f2 = new JTextField("", 12);
//f2.setBackground(Color.lightGray);
//f2.addFocusListener(new FocusHandler());
p.setLayout(new GridLayout(2, 2));
p.add(l1);
p.add(f1); p.add(l2);
p.add(f2);
con.add(p); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.setVisible(true);
f.pack();
f.setSize(400, 200);
} class FocusHandler implements FocusListener
{
public void focusGained(FocusEvent event)
{
JTextField tf = (JTextField)event.getComponent();
tf.setBackground(Color.pink);
tf.requestFocus();
} public void focusLost(FocusEvent event)
{
JTextField tf = (JTextField)event.getComponent();
tf.setBackground(Color.lightGray);
if(tf.getText().length()<=0)
{
tf.requestFocus();
JOptionPane.showMessageDialog(tf, "不能为空");
}
}
}
public static void main(String[] args) {
new TestFoucs();
}
}
{
tf.requestFocus();
JOptionPane.showMessageDialog(tf, "不能为空");
} 当f1里的内容为空时,调用上诉,此时f1重新获得焦点
但JOptionPane.showMessageDialog(tf, "不能为空")后焦点就到了这个MessageDialog上了
tf又失去了焦点,再次调用上诉方法
所以又调用了一次JOptionPane.showMessageDialog(tf, "不能为空");
当然有俩个MessageDialog