Module java.desktop
Package javax.swing

Class InputVerifier

java.lang.Object
javax.swing.InputVerifier

public abstract class InputVerifier extends Object
这个类为Swing组件提供了验证机制。GUI经常需要确保在允许用户导航输入焦点之前,组件处于有效状态。为了实现这一点,客户端创建InputVerifier的子类,并使用JComponentsetInputVerifier方法,将其子类的实例附加到是焦点传输操作源的JComponent上。 InputVerifier还提供了针对焦点传输目标进行验证的可能性,该目标可能拒绝焦点。在从源Swing组件传输焦点到目标Swing组件之前,将调用输入验证器的shouldYieldFocus(source, target)方法。只有该方法返回true时,焦点才会被传输。

以下示例有两个文本字段,第一个文本字段期望用户输入字符串"pass"。如果用户在第一个文本字段中输入该字符串,或者第二个文本字段包含"accept"字符串,则用户可以通过单击或按TAB键将焦点移到第二个文本字段。但是,如果在第一个文本字段中输入其他字符串,并且第二个文本字段不包含"accept",则用户将无法将焦点转移到第二个文本字段。

 import java.awt.*;
 import javax.swing.*;

 // 本程序演示了Swing InputVerifier类的使用。
 // 它创建了两个文本字段;第一个文本字段期望用户输入字符串"pass",如果用户输入该字符串或第二个字段包含"accept"字符串,则允许焦点转移到第二个文本字段。

 public class VerifierTest extends JFrame {

     public VerifierTest() {
         JTextField field1 = new JTextField("在此输入\"pass\"");
         JTextField field2 = new JTextField("或在此输入\"accept\"");
         getContentPane().add(field1, BorderLayout.NORTH);
         getContentPane().add(field2, BorderLayout.SOUTH);

         field1.setInputVerifier(new InputVerifier() {
             public boolean verify(JComponent input) {
                return "pass".equals(((JTextField) input).getText());
             }

             public boolean verifyTarget(JComponent input) {
                 return "accept".equals(((JTextField) input).getText());
             }

             public boolean shouldYieldFocus(JComponent source,
                                                          JComponent target) {
                 return verify(source) || verifyTarget(target);
             }
         });

         pack();
         setVisible(true);
     }

     public static void main(String[] args) {
         SwingUtilities.invokeLater(VerifierTest::new);
     }
 }
 
自 JDK 版本:
1.3
  • Constructor Details

    • InputVerifier

      protected InputVerifier()
      子类调用的构造函数。
  • Method Details

    • verify

      public abstract boolean verify(JComponent input)
      检查JComponent的输入是否有效。此方法不应产生副作用。它返回一个布尔值,指示参数输入的状态。
      参数:
      input - 要验证的JComponent
      返回:
      当有效时返回true,无效时返回false
      参见:
    • shouldYieldFocus

      @Deprecated(since="9") public boolean shouldYieldFocus(JComponent input)
      Deprecated.
      调用verify(input)来确保输入有效。此方法可能会产生副作用。特别是,当用户尝试将焦点从参数组件中的另一个Swing组件转移到另一个Swing组件时,将调用此方法。如果此方法返回true,则焦点会正常传输;如果返回false,则焦点将保留在参数组件中。
      参数:
      input - 要验证的JComponent
      返回:
      当有效时返回true,无效时返回false
      参见:
    • verifyTarget

      public boolean verifyTarget(JComponent target)
      检查将接收焦点的目标JComponent是否准备好接受焦点。只有在有必要验证焦点传输目标时才应重写此方法。此方法不应产生副作用。它返回一个布尔值,指示参数输入的状态。
      实现要求:
      默认情况下,此方法返回true
      参数:
      target - 要验证的目标JComponent
      返回:
      当有效时返回true,无效时返回false
      自 JDK 版本:
      9
      参见:
    • shouldYieldFocus

      public boolean shouldYieldFocus(JComponent source, JComponent target)
      如果将此InputVerifier分配给source Swing组件,则Swing会调用此方法,以检查是否允许从sourcetarget的请求焦点传输。此方法可能会产生副作用。如果此方法返回true,则焦点会正常传输;如果返回false,则焦点将保留在第一个参数组件中。
      实现要求:
      此方法的基本实现返回从verify(input)verifyTarget(input)获得的结果的连接,以确保源组件和目标组件都处于有效状态。
      参数:
      source - 焦点传输的源JComponent
      target - 焦点传输的目标JComponent
      返回:
      当有效时返回true,无效时返回false
      自 JDK 版本:
      9
      参见: