模块  java.desktop
软件包  javax.swing

Class 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.*;
    
     // This program demonstrates the use of the Swing InputVerifier class.
     // It creates two text fields; the first of the text fields expects the
     // string "pass" as input, and will allow focus to advance to the second text
     // field if either that string is typed in by the user or the second
     // field contains "accept" string.
    
     public class VerifierTest extends JFrame {
    
         public VerifierTest() {
             JTextField field1 = new JTextField("Type \"pass\" here");
             JTextField field2 = new JTextField("or \"accept\" here");
             getContentPane().add(field1, BorderLayout.NORTH);
             getContentPane().add(field2, BorderLayout.SOUTH);
    
             field.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);
         }
     } 
    从以下版本开始:
    1.3
    • 构造方法详细信息

      • InputVerifier

        public InputVerifier()
    • 方法详细信息

      • verifyTarget

        public boolean verifyTarget​(JComponent target)
        检查将接收焦点的目标JComponent是否已准备好接受它。 只有在需要验证焦点转移的目标时,才应该覆盖此方法。 这种方法应该没有副作用。 它返回一个布尔值,指示参数输入的状态。
        实现要求:
        默认情况下,此方法返回 true
        参数
        target - 要验证的目标JComponent
        结果
        true有效时, false无效时
        从以下版本开始:
        9
        另请参见:
        JComponent.setInputVerifier(javax.swing.InputVerifier)JComponent.getInputVerifier()
      • shouldYieldFocus

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