我有两个编辑框,我想在输入第一个框里的内容不正确的时候,弹出个对话框提示错误信息,然后焦点重新定在第一个框上,目前我写了代码,可是弹出的对话框会弹出两次,请问为什么??其实应该只弹出一次才对。代码如下:
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();
}
}
{
JTextField tf = (JTextField)event.getComponent(); if(tf.getText().length() <=0)
{
JOptionPane.showMessageDialog(tf, "不能为空");
} tf.setBackground(Color.lightGray);
}
{
JTextField tf = (JTextField)event.getComponent(); if(tf.getText().length() <=0)
{
JOptionPane.showMessageDialog(tf, "不能为空");
return;
} tf.setBackground(Color.lightGray);
}
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 TestFocus { JTextField f1; JTextField f2; JFrame f; JPanel p; JLabel l1; JLabel l2; public TestFocus() { // 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 TestFocus();
}
}
把紅色那句注釋掉 就行了~
{
JOptionPane.showMessageDialog(null, "不能为空");
jTxFName.requestFocus();
return;
} jTxFName.setBackground(Color.lightGray); 试过了,没问题
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.BorderFactory;
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; JTextField tf; public TestFoucs() { f = new JFrame("测试焦点问题");
Container con = f.getContentPane();
p = new JPanel();
l1 = new JLabel("编辑框1:");
l2 = new JLabel("编辑框2:");
f1 = new JTextField("", 12);
f1.addFocusListener(new FocusHandler()); f2 = new JTextField("", 12);
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) { return; } public void focusLost(FocusEvent event) {
if (event.getSource() == f1) {
if ((f1.getText().length() <= 0)) {
JOptionPane.showMessageDialog(null, "不能为空");
f1.requestFocus();
return;
}
}
} } public static void main(String[] args) {
new TestFoucs();
}
}
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 TestFocus { JTextField f1; JTextField f2; JFrame f; JPanel p; JLabel l1; JLabel l2; public TestFocus() { 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(focusListener); f2 = new JTextField("", 12);
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);
} FocusListener focusListener = new FocusListener(){ public void focusGained(FocusEvent e) {
if (e.getSource() == f1){
f1.setBackground(Color.pink);
//f1.requestFocus();
}
} public void focusLost(FocusEvent e) {
if (e.getSource() == f1){
f1.removeFocusListener(focusListener);
f1.setBackground(Color.lightGray);
if(f1.getText().trim().length() <=0)
{
f1.requestFocus();
JOptionPane.showMessageDialog(f1, "不能為空");
System.out.println("2");
f1.addFocusListener(focusListener);
}
}
}
};public static void main(String[] args) {
new TestFocus();
}
} 你看改成這樣 怎么樣 大概思路就是 在監聽中去除已有的監聽 然後在失去焦點的時候再加回來