Отключить закрытие диалога для ProgressMonitor

1

Я работаю с Swing ProgressMonitor.

Это создает приятное диалоговое окно для меня:

Изображение 174551

Честно говоря, я думаю, что есть недостаток в дизайне ProgressMonitor: что вы думаете, если пользователь закрывает диалоговое окно, нажимая красный/белый крест? Да, вы догадались: он просто закрывает/скрывает диалог, и все, что вы делаете на заднем плане, конечно, продолжается. Там нет способа вернуть диалоговое окно, afaik.

Закрытие окна должно означать "отменить" или просто не разрешено, потому что мне нужно, чтобы пользователь либо дождался завершения задачи, либо отменил ее. Как мне достичь этого?

Если бы я мог просто получить ссылку на этот JDialog, тогда я мог бы сделать:

dialog.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE);

но я не могу получить эту ссылку.

ОБНОВЛЕНИЕ И ОКОНЧАТЕЛЬНЫЙ ОТВЕТ

Итак, я не рассказывал вам всю историю. Фактически я использую ProgressMonitorInputStream, который, конечно, под обложками использует ProgressMonitor, поэтому я думал, что это не имеет значения для рассматриваемого случая. Но это так!

Андрей прав, когда говорит, что ProgressMonitor устанавливает флаг isCancelled, когда диалог закрыт. Это можно проверить, посмотрев источники JDK. Но для того, чтобы поймать это событие, вам понадобится PropertyChangeListener. При работе с ProgressMonitorInputStream вас, скорее всего, не будет такого (как я), потому что обновление ProgressMonitor позаботится ProgressMonitorInputStream поэтому вам не придется самостоятельно выполнять эту часть. Я был в предположении, что ProgressMonitorInputStream raison d'etre не должен был кодировать код.

Я должен сказать, что я нахожу преимущества использования ProgressMonitorInputStream чрезвычайно маленькими или даже отрицательными по сравнению с подходом DIY.

Теги:
swing

1 ответ

2
Лучший ответ

Проверьте ProgressMonitor.isCanceled(), что и делает ProgressMonitorDemo.

  • 1
    windowClosing() , JOptionPane имеет обработчик windowClosing() ; Вы также можете увидеть изменения свойств работников.
  • 0
    Спасибо Андрей и trashgod. Я обновил свою публикацию с окончательным выводом.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню