Существует ли в классе JDialog способ предотвращения отображения дочернего окна (JDialog) более одного раза, когда кнопка из главного окна (JFrame), используемая для ее открытия, является несколько раз? Спасибо заранее!Предотвращение дублирования диалоговых окон в Java Swing
ответ
Да, и вам не нужно делать коробку модальной, чтобы сделать это (хотя сделать ее модальной будет самым простым способом).
Просто сделать что-то вроде следующего
В ваших delcarations членов:
private final MyDialog dialog = new MyDialog();
В коде:
private void showDialog() {
dialog.setVisible(true);
dialog.requestFocus(); // May be needed to bring window to front
}
Это гарантирует, что вы только экземпляр окна один раз. Просто нажмите showDialog() всякий раз, когда нажимается кнопка.
Вы можете сделать JDialog
модальным, тогда родительское окно не будет реагировать, пока оно не будет закрыто.
Или вы можете инициализировать JDialog
раньше и просто сделать его видимым при нажатии кнопки. Чтобы сделать его видимым дважды, он не будет отображаться дважды.
Другой способ, который я делал в прошлом с Swing, заключается в том, что при нажатии кнопки первая вещь, которую я делаю, - это отключить кнопку. Затем я использую наблюдаемый шаблон для просмотра дочернего окна и снова включаю кнопку, когда дочернее окно закрывается. Таким образом, если потребуется некоторое время, чтобы отобразить дочернее окно по какой-либо причине, пользователь не может нажимать на него несколько раз и беспорядок.
Пит, пример кода всегда дает лучший ответ, нет? –