Java Swing зависимая проверка поля - PullRequest
3 голосов
/ 09 августа 2011

Во время передачи фокуса есть ли способ проверки зависимых полей, чтобы на передачу фокуса между компонентами J (a, b, c) не накладывалось вето, а на передачу фокуса на некоторый внешний элемент (скажем, d) накладывалось вето?

Самое естественное место для подобных вещей, кажется, находится в InputVerifier.shouldYieldFocus(); однако я не вижу способа получить (следующую) цель фокуса в это время.

Ответы [ 2 ]

4 голосов
/ 10 августа 2011

Не поддерживается механизмом InputVerifier.И, вероятно, не должно быть на этом уровне детализации, потому что это может привести к фокусировке на d с неверными данными в a.

Предположим, InputVerifier, который знает противоположный компонент (то есть потенциальный следующий focusOwner) и его данные недействительны

  • , в shouldYieldFocus он проверяет противоположное
    • дляb позволяет передавать
  • перенесенный фокус на b
  • переводить фокус на d (разрешено)

(тот же общий эффект, что и по предложению Роба)Кстати, за исключением того, что InputVerifier a никогда не запускается.

В целом, встроенная поддержка валидации не очень сильна - много работы осталось за разработчиком.Некоторые вещи, которые вам нужно было бы сделать

  • , могут использовать InputVerifiers на уровне каждого компонента для фактической проверки, еслиYYYLE возвращает true всегда
  • имеет какой-то InputVerifierController, который проверяет, является лиФокус направляется «наружу»
  • , если выход «наружу» с какими-либо недопустимыми данными где-либо «внутри» предотвращает передачу

Использование такой инфраструктуры, как fi Проверка JGoodies может быть проще.

2 голосов
/ 10 августа 2011

Для зависимых компонентов вы можете использовать:

component.setVerifyInputWhenFocusTarget( false );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...