IP Software Книги Статьи/заметки Полезное Обсуждение ENG РУС


10 шагов к тому, чтобы сделать ваше приложение достойным


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


Однако это не повод кидаться в дебри веб-технологий или переходить в лагерь Eclipse SWT, которая к сожалению не отличается эстетикой классов и их отношений. Несколько простых шагов и ваше приложение Swing к функциональности прибавит прекрасный внешний вид и разумное поведение, которое принесет то самое эстетическое наслаждение пользователям. Как бы не был хорош функционал, внешний вид и лоск имеют значение – вспомним хотя бы продукты компании Apple.


В данной статье технические детали описаны поверхностно и без примеров – держите мою книгу о Swing под рукой – там мы скрупулезно рассматриваем необходимые для предложенных тут задач технические вопросы.



1 – Выберите подходящий внешний вид


Время идет, версии Java обновляются, появляются новые компоненты Swing и новые возможности при создании интерфейсов Java-приложений, не меняется лишь одно – отвратительный внешний вид Swing, используемый по умолчанию. Все так же он вызывает оправданный ужас и попытку вспомнить, как давно такие интерфейсы были современными. Так было и с первым вариантом, внешним видом с именем Metal, так остается и сейчас, с используемым по умолчанию внешним видом Ocean.


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


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


К примеру, окно входа в систему, которое было спроектировано в книге о Swing, в стандартном внешнем виде выглядит так:


Оставим в стороне «порку» цветов, шрифтов и тому подобных деталей внешнего вида по умолчанию для художников, правда, один вопрос все равно так и срывается с языка – зачем же все надписи сделаны жирными, хотя всем известно что жирной делается та надпись, что несет в себе большую смысловую нагрузку, в сравнении с остальными. Создатели Ocean похоже считают что любая информация чрезвычайно важна.


Теперь, для примера, возьмем внешний вид (бесплатный) с названием Plastic3D Looks от компании JGoodies. Он имеет свой собственный стиль, хотя и напоминает немного интерфейсы Windows. Получим мы следующее:


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


Ну а смену внешнего вида лучше всего провести еще до того, как будет создан какой-либо компонент Swing, чтобы избежать ненужной работы. Делается это простым вызовом в классе UIManager:

UIManager.setLookAndFeel(new Plastic3DLookAndFeel());


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


К подобранному внешнему виду нелишне также подобрать и значки, цвета и стиль сообщений, если они содержат цветной текст или разные шрифты. Хороший дизайнер (который с программистом в одном флаконе сочетается редко) здесь будет весьма кстати.


2 – Соблюдайте рекомендации для своего внешнего вида


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


Начать можно с изучения рекомендаций для интерфейсов от Microsoft и Apple, а в книге мы кратко просмотрели что рекомендует Sun для интерфейсов, написанных с применением внешнего вида Ocean, применяемого по умолчанию в приложениях Swing. Даже следуя этим нехитрым советам, вы многократно увеличите гармонию во внешнем виде своего приложения.


3 – Обеспечьте доступ с клавиатуры


Чем более профессиональным является ваше приложение (назовем его профессиональным, если работая на нем люди зарабатывают себе деньги), тем больше стоит стремиться к тому, чтобы сократить временные задержки от выполнения всех важных операций. Вспомните среды программирования (IDE) – программисты любят те среды, которые молниеносно реагируют на их команды, вставляя новый класс, выкладывая приложение на сервер или запуская отладку. Ползание в десятке встроенных меню в поиске нужной команды напрочь отбивает желание пользоваться приложением.


Пока не придумано ничего более ускоряющего работу, чем клавиатурные сокращения. Классические Control-S чтобы сохранить работу, Control-C чтобы скопировать выделенные данные и многое другое экономят уйму времени. Чем важнее действие, тем быстрее оно должно исполняться на клавиатуре (выбирайте рядом стоящие клавиши).


Реализация клавиатурных сокращений в Swing проста, расширяема, легко меняется через файлы настроек или свойств, и встроена в базовый класс JComponent. Все происходит через карты входных событий (InputMap) и реакций на них (ActionMap). В карту входных событий вы кладете объект, описывающий клавиатурное сокращение (KeyStroke) и указываете, в каком случае оно работает – когда компонент владеет фокусом или в более общем случае. В карте реакций будет хранится действие Action, которое исполняется в случае нажатия нужного сочетания клавиш. Действия Action великолепно применяются многократно в системе меню, панелях инструментов, обычных компонентах и клавиатурных сокращениях, так что вам не придется писать одно и то же много раз.


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


4 – Включите поддержку DragnDrop


С выходом Java 6 и появлением в компонентах Swing такого элементарного метода как setDragEnabled() и вспомогательного класса TransferHandler жизнь стала прекрасна как никогда и встроить поддержку технологии DragnDrop стало очень просто. Достаточно просто включить ее и определить что же будет выдавать компонент когда пользователь что-то «вытаскивает» и куда он будет определять новые данные когда пользователь «бросает» что-то на него.


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


[TBD]


5 – Подсказывайте везде где только можно

[TBD]


6 – Побольше эффектов и анимации с Java2D

[TBD]


7 – Копирование и вставка

[TBD]


8 – Обеспечьте путь к отступлению (Undo/Redo)


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


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


К сожалению, нельзя сказать чтобы Swing обеспечивал нам встроенную мощную систему отката изменений (undo/redo). Есть базовые классы для хранения истории изменений и их манипуляции (все это можно видеть в классе javax.swing.undo), однако ничем конкретным они нам не помогут. Только лишь текстовые компоненты обладают некоторым уровнем отката изменений по умолчанию.


[TBD]


9 – Мгновенная реакция на изменения


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


[TBD]


10 – Правильно распределите пространство


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

[TBD]



Все права защищены, Компания IP Software, 2014 год
Вопросы, касающиеся данного веб-сайта, можно обсудить, написав письмо по адресу webmaster@ipsoftware.ru