在焦点转移期间,是否有一种方法可以验证相关字段,以使JComponents(a,b,c)之间的焦点转移不被否决,而对某些外部元素(例如d)的焦点转移则被否决?

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

最佳答案

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

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

shouldYieldFocus中的

  • 测试相反
  • for b它允许传输
  • 将焦点转移到b
  • 将焦点转移到d(允许)

  • (与Rob的建议btw具有相同的总体效果,只是a的InputVerifier从未运行)

    总体而言,内置的验证支持不是很强大-开发人员还有很多工作要做。您需要做的一些事情
  • 可以在每个组件级别上使用InputVerifiers进行验证,而shouldYield总是返回true
  • 有一些“InputVerifierController”,用于检查焦点是否在“移到外面”。
  • 如果“外”在“内”的任何地方进入任何无效数据,则阻止传输

  • 使用像f.i. JGoodies验证可能更容易。

    关于java - Java Swing相关字段验证,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7001985/

    10-09 22:12