Java-приложения становятся "органичными" по внешнему виду и приобретают кросс-платформенные свойства
Как вы, вероятно, уже знаете, в конце февраля вышла группа компонентов Swing 1.0, разработанная компанией JavaSoft. Компоненты Swing представляют собой расширение библиотеки Lightweight UI Framework, которая, в свою очередь, после выхода JDK 1.1 стала частью Java AWT (Abstract Windowing Toolkit). Одной из наиболее важных особенностей набора компонентов Swing, который полностью войдет в состав Java 1.2, является архитектура настраиваемого внешнего вида и поведения (look and feel, L&F), позволяющая выбирать для создаваемого приложения один из готовых шаблонов L&F и определять собственный внешний вид и поведение элементов управления.
ПРЕДВАРИТЕЛЬНАЯ ВЕРСИЯ SWING
Предварительная версия Swing, анонсированная в 1997 году на конференции JavaOne и ставшая доступной для разработчиков с июля прошлого года, содержит три шаблона L&F:
В версии 1.0 пакета Swing L&F Java был переименован в Organic. Кроме того, в нем появились две новые цветовые схемы - Santa Fe и Vancouver. Пользователям предварительной версии, применявшим L&F Java, придется заменить в исходном тексте команды JLFLookAndFeel на OrganicLookAndFeel.
L&F Organic, цветовая схема Santa Fe | L&F Organic, цветовая схема Vancouver |
L&F в стиле Motif | L&F в стиле Win32 |
Идя навстречу пожеланиям пользователей предварительных версий Swing, разработчики внесли много улучшений в L&F Java. Ниже приводится список изменений, произошедших в L&F Organic (бывший Java).
L&F Motif и Windows 32 в точности скопированы с оригиналов. В последнем имеется блокирующий метод, предотвращающий запуск интерфейсов на отличных от Windows платформах: JavaSoft не получила от Microsoft права предлагать L&F в стиле Windows пользователям других платформ.
SWING 1.0 ОБРЕЛ НОВЫЙ ВНЕШНИЙ ВИД (ПО СУТИ, ЦЕЛЫХ ДВА)
JavaSoft планирует создать еще два L&F для Swing 1.0. Авторы Symantec Visual Cafe и инженеры Apple помогли JavaSoft разработать L&F в стиле Macintosh. Кроме того, JavaSoft выпустила новый кросс-платформенный L&F, устанавливаемый по умолчанию. Он называется Metal.
L&F в стиле Macintosh | L&F Metal (выбирается по умолчанию) |
Многие разработчики жаловались на чрезмерную "выпуклость" объемных элементов интерфейса, особенно клавиш и инструментальных линеек. При создании L&F Metal эти жалобы были учтены - бросающиеся в глаза "выступы" устранены, но некоторая объемность, необходимая для разграничения состояния объектов, сохранена.
Цветовая схема L&F Metal проще, чем у L&F, который выбирался по умолчанию в предварительной версии Swing. Это сделано с тем, чтобы при переносе с платформы на платформу не возникало проблем с цветовыми палитрами. Более подробную информацию о L&F Metal можно получить на Web-узле Sun (см. врезку "Ресурсы".)
По словам представителей JavaSoft, L&F Macintosh появится вскоре после выхода Swing 1.0. Кроме того, после замены L&F, выбираемого по умолчанию, L&F Organic в комплект Swing 1.0 не включен, хотя и доступен для загрузки по Internet.
МЕСТО SWING В JFC
Компоненты Swing поддерживают событийную модель JavaBeans, то есть могут функционировать независимо от Swing в приложениях и средах разработки, совместимых с архитектурой JavaBeans. В JDK 1.1 (и выше) Swing представляет собой один из пяти API, составляющих Java Foundation Classes (JFC). Ниже перечислены остальные четыре.
КЛАССЫ КОМПОНЕНТОВ SWING
Swing реализован посредством трех составляющих JFC, к которым относятся:
Классы UI отвечают за настраиваемый L&F, за возможность расширения компонентов, перехват ввода с клавиатуры, настройку обрамления компонентов, поддержку кратких описаний инструментов (небольших всплывающих подсказок), автоматическую прокрутку, поддержку отладки и локализации.
С помощью "приспособлений" (widgets) Swing можно точно задавать внешний вид пользовательского интерфейса в соответствии с выбранной платформой. Компоненты Swing работают поверх API Java 2D, Accessibility и Drag-and-drop.
Многие компоненты Swing являются чистыми Java-версиями таких объектов AWT, как Button, Scrollbar и т. д. Кроме того, в Swing включены компоненты более высокого уровня, отсутствующие в API AWT, например дерево объектов, окно-список, панель с ярлыками.
Кроме готовых L&F, о которых говорилось выше, Swing предоставляет набор средств, позволяющий приложениям автоматически реализовывать заказные L&F на любой операционной системе. Этот набор представляет собой обширную библиотеку, содержащую более 250 классов (вдвое больше, чем в AWT) и более 75 интерфейсов, предназначенных для создания облегченных компонентов Java GUI.
ПАКЕТЫ SWING
Интерфейсы и классы Swing объединены в пакеты. Ниже приводятся как готовые, так и разрабатываемые в настоящее время пакеты Swing 1.0.
НОВОЕ В SWING 1.0
Как и было обещано, в Swing 1.0 войдет ряд новых и улучшенных функций. Рассмотрим наиболее важные из них.
Из API JTable изъят класс DefaultCellRenderer, служивший универсальным механизмом вывода для классов JList, JTree и JTable. Теперь каждый из этих классов обрел свой собственный механизм вывода.
В классе JTabbedPane появилось новое свойство - tabPlaсement, указывающее, с какой стороны панели размещать ярлыки - слева, справа, сверху или снизу. Кроме того, появились два метода, позволяющие блокировать выбор ярлыка, несколько методов для назначения цвета ярлыков, метод, возвращающий текущие размеры каждого ярлыка, и метод, возвращающий текущее число отображаемых ярлыков.
Из класса JComponent исчезли методы getClientProperties() и setClientProperties(). Вместо них введен метод clientProperty.
Класс JDialog ранее служил средством использования "ложной модальности" классов диалогов, главная задача которого - преодоление ограничения AWT 1.1, делавшего невозможным использование окон, порожденных объектами Dialog. Это означало, что компоненты, создававшие объекты Windows (в частности, JPopupMenu и JComboBox), не работали при помещении их в модальные диалоги - отсутствовала возможность ввода данных. Что, в свою очередь, препятствовало вводу данных в другие окна, вызывая сообщения об ошибках доступа к очереди системных событий. В Swing 1.0 класс JDialog модифицирован таким образом, чтобы можно было использовать истинную модальность AWT. Кроме того, при помещении в модальные диалоги компоненты Swing 1.0 всегда используют "облегченные" (lightweight) выпадающие окна.
КОНЦЕПЦИЯ, ЛЕЖАЩАЯ В ОСНОВЕ SWING
Чтобы понять, в каком направлении пойдет развитие Swing, следует обратиться к концепции, которой руководствуются его разработчики. При разработке, модификации и обновлении Swing его создатели придерживаются следующего набора правил.
1. Внешний вид должен быть уникальным, но не за счет использования логотипов.
2. Создавать Swing нужно таким образом, чтобы пользователи других графических интерфейсов могли легко обучиться работе с ним.
3. Акцент следует делать на содержании, а не на количестве компонентов.
4. Необходимо избавляться от излишней вычурности пользовательских интерфейсов, соблюдать в них порядок.
5. Обязательно исправлять ошибки в уже существующих компонентах.
Кейн Скарлетт пишет статьи для JavaWorld и NC World, и является исполнительным редактором последнего. Ему можно написать по адресу kane.scarlett@javaworld.com.
Ресурсы
http://java.sun.com/products/jfc/swingdoc-current/intro.html
http://java.sun.com/products/jfc/swingdoc-current/tool_set.html
http://java.sun.com/products/jfc/swingdoc-current/
http://java.sun.com/products/jfc/swingdoc-current/chris_ryan/metal.html