Java Focus Обход недавно отключенной кнопки - PullRequest
0 голосов
/ 28 октября 2010

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

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

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

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

Далее включается моя проверка и отключается кнопка сохранения

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

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

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

1 Ответ

0 голосов
/ 28 октября 2010

Вы можете использовать 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 );
    }
};
...