java.lang.Object
javax.swing.InputVerifier
这个类为Swing组件提供了验证机制。GUI经常需要确保在允许用户导航输入焦点之前,组件处于有效状态。为了实现这一点,客户端创建
InputVerifier
的子类,并使用JComponent
的setInputVerifier
方法,将其子类的实例附加到是焦点传输操作源的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 Summary
-
Method Summary
Modifier and TypeMethodDescriptionboolean
shouldYieldFocus
(JComponent input) 已弃用。boolean
shouldYieldFocus
(JComponent source, JComponent target) 如果将此InputVerifier
分配给source
Swing组件,则Swing会调用此方法,以检查是否允许从source
到target
的请求焦点传输。abstract boolean
verify
(JComponent input) 检查JComponent的输入是否有效。boolean
verifyTarget
(JComponent target) 检查将接收焦点的目标JComponent是否准备好接受焦点。
-
Constructor Details
-
InputVerifier
protected InputVerifier()子类调用的构造函数。
-
-
Method Details
-
verify
检查JComponent的输入是否有效。此方法不应产生副作用。它返回一个布尔值,指示参数输入的状态。- 参数:
-
input
- 要验证的JComponent - 返回:
-
当有效时返回
true
,无效时返回false
- 参见:
-
shouldYieldFocus
Deprecated.useshouldYieldFocus(JComponent, JComponent)
instead.调用verify(input)
来确保输入有效。此方法可能会产生副作用。特别是,当用户尝试将焦点从参数组件中的另一个Swing组件转移到另一个Swing组件时,将调用此方法。如果此方法返回true
,则焦点会正常传输;如果返回false
,则焦点将保留在参数组件中。- 参数:
-
input
- 要验证的JComponent - 返回:
-
当有效时返回
true
,无效时返回false
- 参见:
-
verifyTarget
检查将接收焦点的目标JComponent是否准备好接受焦点。只有在有必要验证焦点传输目标时才应重写此方法。此方法不应产生副作用。它返回一个布尔值,指示参数输入的状态。- 实现要求:
-
默认情况下,此方法返回
true
。 - 参数:
-
target
- 要验证的目标JComponent - 返回:
-
当有效时返回
true
,无效时返回false
- 自 JDK 版本:
- 9
- 参见:
-
shouldYieldFocus
如果将此InputVerifier
分配给source
Swing组件,则Swing会调用此方法,以检查是否允许从source
到target
的请求焦点传输。此方法可能会产生副作用。如果此方法返回true
,则焦点会正常传输;如果返回false
,则焦点将保留在第一个参数组件中。- 实现要求:
-
此方法的基本实现返回从
verify(input)
和verifyTarget(input)
获得的结果的连接,以确保源组件和目标组件都处于有效状态。 - 参数:
-
source
- 焦点传输的源JComponent -
target
- 焦点传输的目标JComponent - 返回:
-
当有效时返回
true
,无效时返回false
- 自 JDK 版本:
- 9
- 参见:
-
shouldYieldFocus(JComponent, JComponent)
代替。