Java Swing依赖字段验证

时间:2011-08-09 19:43:42

标签: java swing validation

在焦点转移期间,有没有办法验证依赖字段,以便JComponents(a,b,c)之间的焦点转移没有被否决,但转移到某些外部元素(例如,d)的焦点转移被否决?< / p>

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

2 个答案:

答案 0 :(得分:4)

InputVerifier机制不支持。并且可能不应该处于该级别的粒度,因为它可能导致将焦点放在具有无效数据的d中。

假设一个InputVerifier知道相反的组件(可能是下一个focusOwner)并且其数据无效

  • 在shouldYieldFocus中测试相反的情况
    • 表示b允许转移
  • 将焦点转移到b
  • 将焦点转移到d(允许)

(与Rob的建议相同的整体效果,顺便说一句,除了a的InputVerifier永远不会运行)

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

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

使用像f.i这样的框架。 JGoodies验证可能更容易。

答案 1 :(得分:2)

对于依赖组件,您应该可以使用:

component.setVerifyInputWhenFocusTarget( false );