Java swing.Как дождаться других Jframes
-
06-07-2019 - |
Вопрос
В JFrame, когда я нажимаю на "войти", я открываю другой Jframe, который является окном входа в систему.
Как мне заставить мой основной Jframe дождаться завершения работы моего Jframe для входа в систему, прежде чем делать что-либо еще?
Решение
Просто используйте модальное диалоговое окно вместо фрейма, таким образом, вы ничего не можете сделать, пока он не будет закрыт
см. http://mindprod.com/jgloss/modal.html для объяснения. и посмотрите http://www.java2s.com/Tutorial/Java/0240__Swing/ASimpleModalDialog .htm для примера кода
Если вы настаиваете на использовании JFrame, вы можете использовать обходной путь, накрыв другой кадр стеклянным каркасом. Признаюсь, это не слишком хорошее решение.
Другие советы
Я согласен, что модальный диалог был бы лучшим вариантом здесь, но если бы я ответил на этот вопрос в более общей форме, скажем:
Как мне заставить один JFrame ждать другого JFrame?
Я бы сказал, что самый простой способ достичь этого - зарегистрировать и запустить прослушиватели событий.
- В вашем "дочернем" фрейме зарегистрируйте "основной" фрейм в качестве прослушивателя событий.
- В вашем "главном" фрейме,
- реализуйте выбранный вами слушатель, например
ActionListener
- в методе, вызываемом слушателем, например
actionPerformed
, закодируйте логику, которая обрабатывает то, что происходит при каждом из действий, на которые она может реагировать в "дочернем" фрейме.
- реализуйте выбранный вами слушатель, например
Это можно легко реализовать в целом ряде ситуаций, включая сценарий входа в систему, описанный в вопросе.
Используйте JModalFrame вместо JFrame.