Читаем Графические интерфейсы пользователя Java полностью

Связанное свойство state содержит константы PENDING (до вызова метода doInBackground), STARTED (до вызова метода done), DONE (завершение задачи).

Текущее значение возвращается методом getState.

В этом примере мы создаем компонент JProgressBar, в конструкторе которого указываем минимальное и максимальное значения прогресс бара.

Метод setStringPainted (true) определяет, что в индикаторе отображается еще число – процент выполнения процесса.

В объекте SwingWorker мы используем его метод publish, который позволяет публиковать промежуточные результаты фонового вычисления в поток EDT.

Класс SwingWorker является типизированным.

Первый тип указывает тип значения, возвращаемый методом doInBackground, а второй тип указывает тип значения, публикуемый методом publish.

Публикуемое значение обрабатывается в методе process объекта SwingWorker.

Результаты множественных вызовов метода publish накапливаются для одного вызова метода process.

Поэтому его параметром служит список публикуемых значений.

Так как нас интересует последнее публикуемое значение, мы извлекаем его методом get из списка.

В методе doInBackground объекта SwingWorker с помощью метода setProgress мы изменяет значение связанного свойства progress.

Изменение этого свойства мы отслеживаем в слушателе объекта SwingWorker, который добавляем методом addPropertyChangeListener.

В обработчике этого слушателя мы извлекаем новое значение этого свойства и устанавливаем его как значение прогресс бара.

Метод setIndeterminate (true) устанавливает индикатор в неопределенный режим (indeterminate mode), в котором индикатор прокручивается в обе стороны.



Когда задача будет выполнена, нужно перевести индикатор в обычный режим методом setIndeterminate (false).

ProgressMonitor

Индикатор может работать в отдельном окне, эту возможность предоставляет класс ProgressMonitor.




Окно ProgressMonitor создается с помощью конструктора, в котором указывается родительский компонент, строка сообщения, строка, которую можно менять при прогрессе, и минимальное и максимальное значения индикатора.

Окно ProgressMonitor отображается самостоятельно.

После первых миллисекунд монитор прогресса сам определяет, сколько времени займет выполнение задачи.

Если это время больше, чем 2 секунды, появляется всплывающее окно индикатора.

В этом примере для изменения строки окна мы используем метод publish и метод process, в котором изменяем строку индикатора методом setNote.

В слушателе связанного свойства progress объекта SwingWorker мы изменяем значение индикатора методом setProgress.

Индикатор Progress Bar используется, если вы хотите контролировать конфигурацию.

Для Progress Bar вы можете установить его неопределенным, сделать его отображаемым по вертикали, отображать процент выполнения на нем.

Вместе с Progress Bar вы можете отображать другие компоненты.

Также вы можете отображать несколько индикаторов Progress Bar.

Вы можете повторно использовать индикатор Progress Bar.

Окно Progress Monitor нельзя использовать повторно.

После того, как монитор прогресса решил отобразить диалоговое окно, он не сможет сделать это снова.

Окно Progress Monitor используется, если вам нужен простой способ отображения прогресса в диалоговом окне.

Окно Progress Monitor предоставляет пользователю возможность отклонить диалог во время выполнения задачи.

Также задача может быть отменена с помощью кнопки Cancel окна.

Окно Progress Monitor предоставляет метод setNote, чтобы задача могла предоставить дополнительную информацию о том, что она делает.

Вы можете контролировать появление окна или его не появление в зависимости от времени выполнения задачи с помощью метода setMillisToPopup.

JMenuBar

Тяжеловесные окна верхнего уровня JFrame, JApplet и JDialog могут содержать панель меню горизонтально ниже заголовка окна.




Панель меню представлена классом JMenuBar.

Эта панель меню состоит из различных выборов меню, доступных конечному пользователю.

Кроме того, каждый выбор содержит список опций, который называется раскрывающимся меню.

Выбор меню представлен классом JMenu, а опция в списке представлена классом JMenuItem.

При этом видно, что класс JMenu расширяет класс JMenuItem.

Чем же отличаются выбор меню от опции в списке?

Во-первых, видно, что и тот и другой класс, это просто кнопки.

Но, выбор меню JMenu, в отличие от опции JMenuItem, обеспечивает всплывающее окно, содержащее JMenuItems, которое отображается, когда пользователь выбирает JMenu в панеле JMenuBar.

В дополнение к элементам JMenuItem, меню JMenu также может содержать разделители JSeparator.

По сути, меню представляет собой кнопку с ассоциированным всплывающим меню JPopupMenu.

Когда нажимается «кнопка», появляется всплывающее меню JPopupMenu.

Панель меню создается с помощью конструктора класса и добавляется в окно верхнего уровня методом setJMenuBar.



Затем создается само меню, которое добавляется в панель меню методом add.

Так как панель меню использует компоновку BoxLayout, а метод add позволяет добавлять любой Swing компонент, в панель меню можно добавить заполнитель класса Box, и меню окажется справа.



Перейти на страницу:

Похожие книги

Programming with POSIX® Threads
Programming with POSIX® Threads

With this practical book, you will attain a solid understanding of threads and will discover how to put this powerful mode of programming to work in real-world applications. The primary advantage of threaded programming is that it enables your applications to accomplish more than one task at the same time by using the number-crunching power of multiprocessor parallelism and by automatically exploiting I/O concurrency in your code, even on a single processor machine. The result: applications that are faster, more responsive to users, and often easier to maintain. Threaded programming is particularly well suited to network programming where it helps alleviate the bottleneck of slow network I/O. This book offers an in-depth description of the IEEE operating system interface standard, POSIX (Portable Operating System Interface) threads, commonly called Pthreads. Written for experienced C programmers, but assuming no previous knowledge of threads, the book explains basic concepts such as asynchronous programming, the lifecycle of a thread, and synchronization. You then move to more advanced topics such as attributes objects, thread-specific data, and realtime scheduling. An entire chapter is devoted to "real code," with a look at barriers, read/write locks, the work queue manager, and how to utilize existing libraries. In addition, the book tackles one of the thorniest problems faced by thread programmers-debugging-with valuable suggestions on how to avoid code errors and performance problems from the outset. Numerous annotated examples are used to illustrate real-world concepts. A Pthreads mini-reference and a look at future standardization are also included.

David Butenhof

Программирование, программы, базы данных
Разработка ядра Linux
Разработка ядра Linux

В книге детально рассмотрены основные подсистемы и функции ядер Linux серии 2.6, включая особенности построения, реализации и соответствующие программны интерфейсы. Рассмотренные вопросы включают: планирование выполнения процессов, управление временем и таймеры ядра, интерфейс системных вызовов, особенности адресации и управления памятью, страничный кэш, подсистему VFS, механизмы синхронизации, проблемы переносимости и особенности отладки. Автор книги является разработчиком основных подсистем ядра Linux. Ядро рассматривается как с теоретической, так и с прикладной точек зрения, что может привлечь читателей различными интересами и потребностями.Книга может быть рекомендована как начинающим, так и опытным разработчикам программного обеспечения, а также в качестве дополнительных учебных материалов.

Роберт Лав

Программирование, программы, базы данных / Программирование / Книги по IT