2010-10-28 5 views
0

У меня проблема с системой обхода фокуса в Java. Когда я нахожу вкладку между компонентами на панели в моем приложении, все работает отлично. Tab перемещает фокус на следующий компонент.Перемещение фокуса Java на вновь отключенную кнопку

Некоторые из моих компонентов выполняют проверку при потере фокуса, если проверка возвращает ошибки, тогда кнопка сохранения экранов отключена.

Моя проблема возникает, когда за подтвержденным компонентом следует кнопка сохранения.

Tab удаляет фокус из проверенного компонента и начинается асинхронный процесс назначения фокуса на следующий компонент, который включен (Сохранить Button)

Следующая мои пинки проверки в и отключает кнопку сохранить

а затем завершает асинхронный процесс и пытается назначить фокус на отключенную кнопку «Сохранить».

Фокус теперь оказывается в ловушке, и табуляция больше не сдвигает фокус, потому что ни один компонент не имеет фокуса.

Спрашивает ли кто-нибудь еще об этой проблеме, как вы решили проблему, связанную с проверкой и отключением, до того, как началось событие обхода фокуса?

ответ

0

Вы можете использовать InputVerifier для проверки текстового поля. В этом случае фокус будет помещен обратно в текстовое поле по ошибке.

Или вы можете изменить прослушиватель фокуса, чтобы справиться с этой ситуацией. Что-то вроде:

FocusListener fl = new FocusAdapter() 
{ 
    public void focusLost(final FocusEvent e) 
    { 
     JTextField tf = (JTextField)e.getSource(); 

     if (tf.getDocument().getLength() < 1) 
     { 
      System.out.println("Error"); 
      button.setEnabled(false); 

      Component c = e.getOppositeComponent(); 

      if (c instanceof JButton 
      && c.isEnabled() == false) 
      { 
       tf.requestFocusInWindow(); 
      } 
     } 
     else 
      button.setEnabled(true); 
    } 
}; 
Смежные вопросы