Материал: Портянкин И. Swing

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Введение

XI

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

Глава 1. Основные концепции. В этой главе мы взглянем на Swing «с высоты птичьего полета» и раскроем для себя главные замыслы разработчиков библиотеки, которые оказали наибольшее влияние на ее архитектуру. Вы увидите, что в основе Swing лежит библиотека AWT, узнаете, как это влияет на библиотеку Swing и ее компоненты, рассмотрите архитектуру JavaBeans и механизмы разделения модели, вида и контроллера. Не ускользнут от нашего внимания и подключаемые внешний вид и поведение компонентов Swing, а также поддержка пользователей с ограниченными возможностями.

Глава 2. Модель событий. Мы узнаем, как в Swing обрабатываются события. Сначала рассмотрим простые примеры, а затем перейдем к скрупулезному исследованию «начинки» системы обработки событий. Будут рассмотрены вопросы написания слушателей, низкоуровневые события, техника обработки событий и работы с мышью. Этой главы будет вполне достаточно для обычной обработки всех событий.

Глава 3. За кулисами системы обработки событий. В этой главе мы разберем детали системы событий, узнаем про поток рассылки событий EventDispatchThread и очередь событий EventQueue, правила работы с потоками. В конце главы мы узнаем «золотое правило» системы обработки событий Swing; оно совсем не сложно, но позволяет писать по-настоящему быстродействующие программы, невзирая на все доводы скептиков о не слишком высокой производительности пользовательских интерфейсов, созданных с помощью Swing.

Глава 4. Рисование в Swing. Система рисования Swing реализована в основном в базовом классе JComponent. Прежде всего рассмотрен механизм рисования и его применение в реальных приложениях. Мы также коснемся скрытого «двигателя» системы рисования, класса RepaintManager.

Глава 5. Внутренние винтики Swing. Остальные скрытые механизмы Swing, реализованные в базовом классе JComponent, незаметно работают «за кулисами» библиотеки, освобождая вас от рутинной работы. Как правило, нам не надо знать, как и что происходит во внутренних механизмах библиотеки, , но в сложных ситуациях без этого не обойтись. Рассмотрены самые сложные части Swing, реализация которых во многом объясняет работу всех компонентов библиотеки.

Глава 6. Контейнеры высшего уровня. После создания интерфейса его необходимо вывести на экран. Для этого предназначены особые компоненты Swing, единственные, имеющие связь с операционной системой; они называются контейнерами высшего уровня. Помимо обычных свойств они обладают некоторыми особенностями, которые мы досконально обсудим в данной главе. Мы также узнаем о средствах создания многодокументных интерфейсов (MDI).

Глава 7. Искусство расположения. Менеджер расположения — это ассоциированный с контейнером алгоритм, который определяет, как компоненты должны располагаться в контейнере. Стандартные менеджеры расположения просты, но получение с их помощью нужного расположения компонентов часто сродни искусству. В этой главе мы постараемся в полной мере овладеть тайнами этого процесса, а также напишем несколько вспомогательных программных инструментов, призванных облегчить создание сложных расположений компонентов. Сравниваются разные подходы к расположению компонентов на примере элемента реального интерфейса.

XII

Введение

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

Глава 9. Элементы управления. Элементы управления используются в интерфейсе повсюду, с их помощью пользователь влияет на ход выполнения программы. Арсенал предоставляемых Swing элементов управления велик и разнообразен, но пользоваться им просто, в этом вы убедитесь после прочтения данной главы.

Глава 10. Меню и панели инструментов. В меню собраны все команды, необходимые для работы с приложением. Они помогают быстрее ознакомиться с возможностями приложения, поэтому начать работу, имея под рукой хорошо организованную и интуитивно понятную систему команд, гораздо проще. Теперь создание самого сложного меню в Swing перестанет быть проблемой для вас. На «переднем крае» приложения находятся и панели инструментов, которые содержат набор элементов управления для выполнения наиболее часто встречающихся действий. В этой главе мы разберем компонент JToolBar, применяемый в Swing для создания панелей инструментов.

Глава 11. Списки. В этой главе рассматриваются обычные (JList) и раскрывающиеся (JComboBox) списки библиотеки Swing. В обычном списке JList выводятся сразу несколько альтернатив, и пользователь может быстро сравнить их и выбрать то, что ему необходимо, причем, как правило, допускается множественный выбор. Раскрывающийся список JComboBox чаще всего используется для выбора одного варианта из многих (выбранный вариант появляется в поле списка), а также обычно разрешается ввод пользователем собственных значений. Эта глава раскроет все секреты списков Swing, и вы сможете убедиться, что для них нет ничего невозможного. Списки Swing могут отображать самые экзотичные на свете данные.

Глава 12. Диапазоны значений. Эта глава посвящена компонентам, обеспечивающим возможность регулировки (плавной или ступенчатой) данных в некотором диапазоне или наглядно представляющим на экране данные из некоторого диапазона. Ползунки JSlider позволяют выбрать значение в некотором ограниченном диапазоне числовых данных. Индикаторы процесса JProgressBar в наглядной форме показывают, какая часть ограниченной задачи уже завершена. Наконец, счетчики JSpinner дают возможность выбора произвольного значения среди некоторого набора альтернатив, который может быть и неограниченным. Как мы увидим, все эти компоненты Swing обладают завидной гибкостью и способны на многое.

Глава 13. Управление пространством. С недостатком места в контейнере призваны справляться специальные компоненты, которые и рассматриваются в данной главе. К таким компонентам относятся панель с вкладками JTabbedPane, разделяемая панель JSplitPane и панель прокрутки JScrollPane. Панель с вкладками обеспечивает эффективное размещение в одном контейнере нескольких вспомогательных панелей с компонентами, разделяемая панель дает возможность динамически, по мере необходимости, перераспределять пространство контейнера между двумя компонентами. Панель прокрутки, незаменимый участник любого пользовательского интерфейса, с легкостью вмещает в себя компоненты даже самых гигантских размеров и позволяет мановением руки (или строкой кода) перемещаться к любой их части.

Введение

XIII

Глава 14. Стандартные диалоговые окна. Во всех современных графических системах имеется набор так называемых стандартных диалоговых окон, позволяющих быстро выводить для пользователя разнообразную информацию или же получать эту информацию от него. В этой главе мы увидим, какие стандартные диалоговые окна предлагает нам Swing. Мы подробно рассмотрим класс JOptionPane, десятки методов которого позволят быстро и эффектно вывести на экран несложные сообщения, ввести нужные данные или запросить у пользователя подтверждение операции. Компоненты JFileChooser и JColorChooser незаменимы для выбора файлов и цветов.

Глава 15. Уход за деревьями. Иерархические отношения данных принято отображать в специальных компонентах пользовательского интерфейса, называемых деревьями. Деревья в Swing, реализованные компонентом JTree, обладают впечатляющими возможностями, и данная глава полностью посвящена им. Мы изучим далеко не самый простой процесс создания модели дерева, овладеем всеми тайнами стандартных узлов и стандартной модели деревьев Swing — эти модели чаще всего и применяются при создании интерфейсов. Далее нас ждет подробное изучение модели выделения дерева и настройка всех аспектов отображения и редактирования узлов деревьев Swing.

Глава 16. Текстовые компоненты. Одной из самых впечатляющих частей библиотеки Swing является пакет javax.swing.text, обеспечивающий ее средствами для работы с текстом. Благодаря этому пакету в вашем арсенале появятся несколько текстовых компонентов, реализующих любые механизмы для ввода и редактирования текста, от самых простых до чрезвычайно изощренных. В этой главе мы познакомимся со всеми текстовыми компонентами и их основными возможностями. Кроме того, мы затронем вопросы, относящиеся к внутренней реализации текстовых компонентов Swing: изучим основные свойства модели текстовых компонентов Document и многое другое.

Глава 17. Таблицы. Пожалуй, настоящая «звезда» библиотеки Swing — таблица JTable. Таблица JTable дает вам возможность с легкостью выводить двухмерную информацию, расположенную в виде строк и столбцов, без особых усилий настраивать и сортировать данные для таблицы, выводить их в любом необходимом виде, управлять заголовками таблицы и ее выделенными элементами и с небольшими усилиями делать еще очень многое. Мы подробно рассмотрим процесс создания модели таблицы и варианты применения стандартных моделей, изучим модели выделения и весьма полезную модель столбцов, узнаем способы самой тонкой настройки внешнего вида столбцов, ячеек, а также увидим, как настраивается процесс редактирования ячеек таблицы.

Глава 18. Круговорот данных. Данные — это самое драгоценное для пользователей, и они очень ценят, когда приложение бережно к ним относится. В этой главе мы узнаем, как обеспечить обмен данными приложений Swing и остальных приложений системы с помощью буфера обмена и визуального перетаскивания, а также как включить в приложение поддержку отмены и повтора операций.

Книга позволит получить именно ту информацию, которая вам необходима. Если вы занимаетесь созданием не самых сложных интерфейсов и вам просто нужны сведения о том или ином компоненте Swing, обращайтесь к соответствующей главе книги. Если у вас возникнут вопросы об устройстве одного из внутренних механизмов библиотеки, вы всегда сможете найти ответ в одном из разделов первых нескольких глав книги. Ну а полностью овладеть всей магией и мощью, которую способна предоставить библиотека Swing, вы сможете, прочитав последовательно от начала и до конца всю книгу.

XIV

Введение

Для кого предназначена книга

Эта книга — не для новичков в программировании. Подразумевается, что вы имеете некоторый опыт программирования на Java, скорее всего, уже пробовали создавать на этом языке первые пользовательские интерфейсы с помощью AWT, Swing или средств быстрой разработки (Rapid Application Development, RAD), таких как Eclipse или NetBeans. Поэтому представленные в книге конструкции языка Java, а также термины, применяемые при программировании и создании пользовательских интерфейсов, не введут вас в заблуждение. Замечательно, если вы владеете навыками объектно-ориенти- рованного проектирования и анализа, в этом случае понимание архитектуры библиотеки придет гораздо быстрее и работа с ней станет истинным удовольствием. Отсутствие подобных навыков не помешает вам в полной мере изучить Swing, но только наличие некоторого опыта в объектно-ориентированном проектировании даст возможность оценить всю элегантность библиотеки.

Интерактивная документация

Материал книги ни в коем случае не повторяет и не копирует информацию, которая содержится в интерактивной документации JDK для библиотеки Swing (описание всех классов, методов и полей библиотеки, как правило, довольно краткое). Вместо этого мы изучим основы Swing, рассмотрим главные механизмы библиотеки, а затем, разрабатывая небольшие и понятные примеры, овладеем всеми тайнами компонентов Swing. Так вы составите для себя полную картину возможностей Swing, а интерактивная документация станет вашим верным компаньоном, способным подсказать правильное название метода и список его параметров. На самом деле при работе с библиотекой Swing необходимость в документации возникает не часто, поскольку библиотека удачно спроектирована, а названия свойств и методов выбраны очень точно (чему немало способствует архитектура JavaBeans, которую мы рассмотрим в главе 1). При чтении глав, посвященных конкретным компонентам Swing, рекомендуем иметь «под рукой» интерактивную документацию, с ее помощью вы еще быстрее познакомитесь со всеми возможностями компонента.

Язык шаблонов проектирования

Везде, где возможно, архитектура библиотеки Swing и ее компонентов описывается с помощью языка шаблонов проектирования (design patterns), прекрасного средства описания любого (обобщенного или подробного) объектно-ориентированного решения. Шаблоны проектирования представляют собой набор наиболее удачных и проверенных временем схем объектно-ориентированного проектирования и анализа, позволяющих быстро, элегантно и максимально гибко решать часто возникающие задачи. Библиотека Swing буквально «прошита» шаблонами проектирования, и это еще раз подтверждает высокий уровень, на котором она спроектирована. Владея шаблонами проектирования, вы быстро сможете их обнаружить практически в каждом аспекте Swing, и это поможет работать с библиотекой максимально эффективно. Нет ничего страшного, если вы незнакомы с шаблонами проектирования, — вы сможете пользоваться всей мощью Swing и без них, но лучше незамедлительно приступить к их изучению.

Примеры

Книга содержит большое количество примеров, призванных максимально ускорить и упростить знакомство со всеми аспектами работы библиотеки Swing и ее компонентов. Примеры намеренно сделаны очень простыми и по возможности лаконичными: так они акцентируют ваше внимание на том, как что-то можно сделать, а не потрясают вас великолепным интерфейсом, который можно создать с помощью более сложного

Введение

XV

и объемного кода. Создание великолепных сложных интерфейсов после прочтения книги не составит для вас труда, а примеры книги помогут понять все то, о чем в ней рассказывается. Эти примеры будут служить неплохим справочником и после прочтения книги: открыв страницу с нужным примером, вы мгновенно поймете, как работать с тем или иным компонентом Swing.

Все примеры можно найти на сайте книги www.IPSoftware.ru. С компиляцией и запуском примеров не должно быть никаких проблем — этот процесс намеренно сделан настолько элементарным, насколько это вообще может быть. Вам нужно зайти в папку с номером главы и вызвать компиляцию всех исходных файлов (javac *.java), после чего их можно запускать. Никаких сред, средств сборки, дополнительных инструментов, кроме пакета JDK, не требуется. Лишь в нескольких примерах, которые можно пересчитать на пальцах одной руки, могут понадобиться отдельные библиотеки, и об этом обязательно упоминается при описании примера.

По мере возможности в различных главах книги мы создаем полезные инструменты и новые расширенные компоненты, которые могут сослужить неплохую службу при создании собственных интерфейсов. Все подобные инструменты размещены в особом пакете com.porty.swing. Специально для вашего удобства в состав исходных текстов книги входит архив в формате JAR (booktools.jar) со всеми инструментами, созданными в данной книге. Вы сможете включить этот архив в список своих классов и легко применять созданные нами в книге инструменты в своих программах. Найти этот архив также можно на сайте www.IPSoftware.ru.

Снимки экрана

Ряд примеров проиллюстрирован изображением экранов. Все снимки были сделаны с внешним видом Java по умолчанию — Metal, который, увы, не отличается элегантностью

инеотразимостью внешнего вида. Но пусть это вас не пугает, поменять внешний вид на один из доступного нам широкого выбора, к примеру JGoodies Looks или Subtance, легко. Достаточно указать дополнительный параметр для виртуальной машины Java, -Dswing.defaultlaf=<имя класса внешнего вида>, подставить туда ваш любимый внешний вид,

ипримеры будут выглядеть намного лучше.

Java 7

Новый пакет разработки Java 7 (JDK 1.7) во время написания книги находился в завершающей стадии, для написания примеров использовались его предварительно доступные версии. Везде, где было возможно, были упомянуты и описаны новые возможности Swing в Java 7.

Изменения во втором издании

Первое издании книги получило множество самых замечательных отзывов от читателей, которые предложили осветить во втором издании дополнительные интересующие их вопросы и присылали свои идеи, за что им огромное спасибо. Структура книги осталась прежней, и самым главным остается пошаговое изучение краеугольных камней, которые лежат в основе Swing, с помощью скрупулезных объяснений и подробных, простых примеров.

Вся информация была заново просмотрена и проверена, все новое, появившееся в Swing за время, прошедшее после выхода первого издания, было добавлено в соответствующие главы и разделы. Особенно тщательно рассматривается работа в многозадачном окружении, поскольку это жизненно необходимо и для высокой скорости Swingприложения, и для его безошибочной работы.

Многие читатели просили добавить в книгу снимки экрана (screenshots), которые можно увидеть при запуске примера, это было сделано там, где необходимо.

Источник: https://studfile.net/preview/15935977/