В этом случае -
код несколько меняется. Графический пользовательский интерфейс (GUI) библиотеки Swing состоит из двух
ключевых элементов :
компонентов и
контейнеров. Контейнеры, в свою очередь, так - же
могут стать компонентами. Различие между этими двумя элементами кроется в их назначении : компонент является
независимым визуальным элементом управления, а контейнер
вмещает группу компонентов.
Т.е. должен быть, как минимум, один контейнер. JApplet (015, рис.1.1) является контейнером верхнего уровня библиотеки Swing и
имеет свой набор компонентов. Принцип формирования внешнего вида панели плеера (017-087, рис.1.1) остаётся
тем - же, почти тем- же. В библиотеке Swing обработчик событий олжен выполняется в потоке
диспетчеризации
событий, а не в главном потоке приложения.
Все взаимодействия с компонентами в библиотеке Swing
должны производится в потоке диспетчеризации событий. В программе они есть, но вызываются в потоке,
который не был создан самой программой. Чтобы создавать код GUI в потоке диспетчеризации (во избежание
противоречий между потоками обработки) нужно использовать метод
invokeAndWait. Мы попробуем
обойти это правило - почему, об этом чуть позже, когда мы будем знакомится с архивацией.
Несколько
изменился принцип формирования панели плеера. На панели управления осталось всего три кнопки (047,056 и 065, рис.1.1)
и вместо панели плейлиста появилась панель (037,040, рис.1.1) с кнопкой Выбор (034, рис.1.1). Уже по трёхзначной
нумерации строчек кода (сравнить с пред-идущим) можно понять, что добавление собственных компонентом утяжеляет
код и усложняет его обработку. Если воспользоватся типовыми компонентами (127,128,151 и 152, рис.1.1), которые мы закомментировали,
код намного упростится - исчезнет обработка кнопок. В код добавлено несколько декоративных (не обязательных)
элементов :
(028,111-118, рис.1.1) -- часы на отдельной панели и
(030,062 и 071, рис.1.1) -- подсказка с комментариями происходящих
событий;
Этот вариант панели плеера мы создали опираясь на
JMF.
О её возможностях мы поговорим позже.
Конечный результат -
тут.
Делать невидимыми компоненты этой
панели - мы не будем, процесс необходимо доработать. На данном этапе не очень понятно - почему компоненты
встроенные в панели не прозрачны для курсора мышки
MouseListener (12, рис.1).
...вернуться