该方法
verify实际上不是打开JOptionPane的好地方。
您可以考虑采用几种方法来解决问题:
- 您希望此JOptionPane每次在文本字段失去焦点并且输入不正确时出现:在JTextField上使用FocusListener并对适当的事件进行操作
- 您希望此JOptionPane每次按下按钮时出现:如果输入不正确,请使用ActionListener进行操作。
这是后一种选择的一小段:
import java.awt.BorderLayout;import java.awt.frame;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import javax.swing.InputVerifier;import javax.swing.JButton;import javax.swing.JComponent;import javax.swing.Jframe;import javax.swing.JOptionPane;import javax.swing.JTextField;public class VerifierTest extends Jframe { private static final long serialVersionUID = 1L; public VerifierTest() { final JTextField tf = new JTextField("TextField1"); getContentPane().add(tf, BorderLayout.NORTH); tf.setInputVerifier(new PassVerifier()); final JButton b = new JButton("Button"); b.setVerifyInputWhenFocusTarget(true); getContentPane().add(b, BorderLayout.EAST); b.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { if (!tf.getInputVerifier().verify(tf)) { JOptionPane.showMessageDialog(tf.getParent(), "illegal value: " + tf.getText(), "Illegal Value", JOptionPane.ERROR_MESSAGE); } if (b.hasFocus()) { System.out.println("Button clicked"); } } }); setDefaultCloseOperation(EXIT_ON_CLOSE); } public static void main(String[] args) { frame frame = new VerifierTest(); frame.setSize(400, 200); frame.setVisible(true); } class PassVerifier extends InputVerifier { @Override public boolean verify(JComponent input) { final JTextField tf = (JTextField) input; String pass = tf.getText(); return pass.equals("Manish"); } }}还可以考虑设置Jframe的默认关闭操作,而不是添加窗口侦听器(但是,如果要弹出对话框询问用户是否确定要退出应用程序,则使用WindowListener是一个好方法)。



