" JOptionPane.QUE STION_ME S SAGE, JOptionPane.YES_NO_CANCEL_OPTION, null, opts, opts[2]); JDialog d = op.createDialog(this, " Собственное диалоговое окно"); d.setVisible(true); Еще один вид диалоговых окон, предназначенный для слежения за протеканием какого-нибудь процесса, предоставляет класс ProgressMonitor. Окно этого класса показывает сообщение, индикатор-"градусник" — объект класса JProgressBar — и кнопки OK и Cancel. Единственный конструктор класса ProgressMonitor(Component parent, Object message, String note, int min, int max); кроме ссылки parent на родительское окно, сообщения message, наименьшего min и наибольшего max значений "градусника" содержит параметр note. Это строка, значение которой можно менять во время ожидания методом setNote ( String). Для смены значения индикатора выполняемый процесс должен обращаться к методу setProgress (int pos), задавая в нем текущее значение pos, лежащее между значением min и значением max. Это похоже на работу с классом JProgressBar, описанным в В листинге 14.13 приведен пример использования окна индикатора. Для изменения значения индикатора запущен простейший подпроцесс. Рисунок 14.20 показывает вывод программы листинга 14.13. import java.awt.*; import javax.swing.*; public class Progress extends JFrame{ Progress(){ super(" Progress..."); final ProgressMonitor mon = new ProgressMonitor(this, "Идет процесс.", "Осталось ", 0, 100); Runnable runnable = new Runnable(){ public void run(){ for (int i = 1; i < 100; i++){ try{ mon.setNote( "Осталось " + (100 — i) + " %"); mon.setProgress(i); if (mon.isCanceled()){ mon.setProgress(100); break; } Thread.sleep(100); }catch(InterruptedException e){} } mon.close(); } }; Thread thread = new Thread(runnable); thread.start(); setSize(400, 400); setDefaultCloseOperation(JFrame.EXIT ON CLOSE); setVisible(true); } public static void main(String[] args){ new Progress(); } } Заключение Вопросы для самопроверки 1. Что такое менеджер размещения? 2. Почему менеджеры размещения удобнее абсолютной расстановки компонентов? 3. В каких контейнерах можно установить менеджер размещения? 4. В каких компонентах можно установить менеджер размещения? 5. Почему менеджер размещения BorderLayout столь популярен? 6. Какой менеджер размещения установлен по умолчанию в окне класса JFrame? 7. Какой менеджер размещения установлен по умолчанию в классе JPanel? 8. Какой менеджер размещения установлен по умолчанию в классе JScrollPane? 9. Какой менеджер размещения установлен по умолчанию в классе JWindow? 10. Какой менеджер размещения установлен по умолчанию в классе JDialog? 11. Можно ли написать свой собственный менеджер размещения? ГЛАВА 15Рис. 14.19. Собственное диалоговое окно Рис. 14.20. Окно индикатора