Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Swing相关字段验证_Java_Swing_Validation - Fatal编程技术网

Java Swing相关字段验证

Java Swing相关字段验证,java,swing,validation,Java,Swing,Validation,在焦点转移过程中,是否有方法验证相关字段,从而使JComponents(a、b、c)之间的焦点转移不被否决,但将焦点转移到某个外部元素(如d)被否决 做这种事情最自然的地方似乎是在InputVerifier.shouldYieldFocus();但是,我当时看不到获得(下一个)焦点目标的方法。对于您应该能够使用的相关组件: component.setVerifyInputWhenFocusTarget( false ); InputVerifier机制不支持。而且可能不应该处于这种粒度级别,因

在焦点转移过程中,是否有方法验证相关字段,从而使JComponents(a、b、c)之间的焦点转移不被否决,但将焦点转移到某个外部元素(如d)被否决


做这种事情最自然的地方似乎是在
InputVerifier.shouldYieldFocus()
;但是,我当时看不到获得(下一个)焦点目标的方法。

对于您应该能够使用的相关组件:

component.setVerifyInputWhenFocusTarget( false );

InputVerifier机制不支持。而且可能不应该处于这种粒度级别,因为这可能会导致将焦点放在a中包含无效数据的d上

假设一个InputVerifier确实知道相反的组件(即潜在的下一个focusOwner),并且其数据无效

  • 在shouldYieldFocus中,它测试的是相反的结果
    • 对于b,它允许传输
  • 将焦点转移到b
  • 将焦点转移到d(允许)
(顺便说一句,总体效果与Rob的建议相同,只是a的InputVerifier从未运行过)

总的来说,内置的验证支持不是很强——开发人员还有很多工作要做。一些你需要做的事情

  • 可以在每个组件级别使用InputVerifier来实际执行验证,shouldYield始终返回true
  • 有一些“InputVerifierController”来检查焦点是否“向外”
  • 如果将任何无效数据放在“内部”的任何位置,则阻止传输

使用f.i.JGoodies之类的框架进行验证可能更容易。

我怀疑这在某种程度上违反了Java Focus子系统原则,或者有一种显而易见的(如果不简单的话)方法来实现这一点。为了更快/更好地帮助您,您必须使用可运行的示例来编辑您的文章,显示您的问题,谢谢,如果我能找到一种方法将我正在处理的应用程序简化为一个简单的示例,我将在这里发布。谢谢,我遇到了很多困难,因为我使用的是我自己的自定义InputVerifier,但我似乎看不到相反的组件。您的第二个建议(使用一些“InputVerifierController”)似乎很有希望;我将从调用InputVerifier来验证焦点转移的控制器的角度来研究Swing实现了什么。不幸的是,我仍然需要验证用户在字段中输入的内容,因为这可能会触发其他操作。