Подробнее об эффектах
Не ждали? Однако мы снова возвращаемся к технологии JavaFX на страницах "Компьютерных вестей". И если вы думаете, что зря, то спешу разубедить: после покупки Sun компанией Oracle перспективы JavaFX вырисовываются особенно радужные...
Если вы не совсем понимаете, при чём покупка Oracle "Солнечных микросистем" к технологии JavaFX (вернее, даже, наверное, не к самой технологии, а к её будущему), то, думаю, не слышали о том, что обещал в ближайшей перспективе глава Oracle. Ларри Эллисон заверил, что основным направлением развития будет Java, а интерфейс пакета StarOffice и его клона OpenOffice будет переделан с самым что ни на есть активным внедрением в него JavaFX. В то время, как фанаты открытых технологий кричат, что не будут пользоваться пакетом, интерфейс которого сделан с использованием коммерческой технологии JavaFX, мы с вами поступим умнее - будем совершенствовать свои навыки владения этой технологией. Думаю, уж после того, как на основе JavaFX сделают новый интерфейс к офисному пакету от Sun Microsystems, и остальные компании начнут использовать эту платформу гораздо активнее.
Сегодня поговорим о некоторых особенностях ключевых эффектов, доступных нам с вами при программировании JavaFX-приложений. Почему? Потому что, в общем-то, именно благодаря эффектам есть возможность придать приложению такой привлекательный и современный вид, какого невозможно достичь стандартными средствами Java. Вполне возможно, что вы и сами легко разберётесь во всех эффектах. Для тех же, кто не столь уверен в своих силах, рад сообщить, что больше не смею затягивать вступление и немедленно перехожу к рассказу о различных эффектах в JavaFX.
Тени
Первым из эффектов, который мы с вами рассмотрим, будет тень. Это, в общем-то, самый часто используемый, по моим наблюдениям, эффект, потому что даже обычная кнопка с тенью будет смотреться куда эстетичнее, чем просто прямоугольник с надписью.
Параметров у эффекта DropShadow, в общем-то, совсем немного. Самые важные из них - это offsetX и offsetY. Они, как легко догадаться из названий, задают смещения тени относительно основного объекта. Нужно отметить, что эти параметры могут быть как положительными, так и отрицательными. Нулевые означают, что тень не смещена относительно объекта. Отрицательный offsetX смещает изображение влево, положительный, соответственно, вправо. Что касается offsetY, то здесь, как ни странно, положительное значение параметра смещает тень вниз, а отрицательное - вверх. Очевидно, в Sun исходили из того, что тень в естественных условиях лежит ниже объекта, а потому положительное значение соответствует именно такому раскладу.
Есть и другие параметры. Параметр radius определяет, насколько размытой будет тень от объекта: чем больше этот параметр, тем по большей площади размыта тень. Примерно так же можно описать и параметр spread. Но здесь, когда он равен нулю, края тени максимально размыты. Когда он равен единице, размытие полностью отсутствует. Есть ещё такой параметр, как color, он задаёт цвет тени.
Следует сказать, что DropShadow - не единственный эффект из всего арсенала JavaFX, который подходит для создания тени. Есть ещё эффект Shadow. Он отличается меньшим количеством различных параметров, то есть, в общем-то, этот эффект более прост в применении. На самом деле, конечно, отличий больше, однако для большинства разработчиков они будут не очень существенны, и останавливаться на них подробнее мы сейчас не будем.
Имеется ещё один эффект, который называется InnerShadow и предназначен, как не сложно догадаться, для создания эффекта тени внутри контура нашего с вами объекта. У него параметры, конечно же, несколько отличаются от параметров эффекта DropShadow, потому что и работа этого эффекта выглядит совершенно иначе. Первый в списке параметров - choke. Он определяет часть исходного объекта, где видимость исходного материала составит 100%, и изменяется от 0 до 1. То есть, если мы выставим этот параметр нулевым, то весь объект окажется заполнен внутренней тенью. Если же, наоборот, choke равен единице, то у тени будут жёстко обрубленные края в пределах, которые заданы параметром radius. Собственно говоря, только этот параметр в эффекте InnerShadow новый - с остальными (color, radius, offsetX и offsetY) мы с вами уже знакомы по эффекту DropShadow, который рассмотрен выше.
Как видите, у JavaFX достаточно неплохой арсенал для создания теней всех видов и мастей. Впрочем, конечно же, тень является не единственным эффектом, активно применяемым в практике украшения интерфейсов RIA-приложений, построенных на основе технологии JavaFX. Поэтому двинемся дальше, к новым эффектам.
Сияние
Думаю, что после тени этот эффект будет вторым по применяемости. Хотя, может быть, я ошибаюсь, и он, на самом деле, не второй, а даже первый.
Если вы работали с эффектами в графических редакторах, то можете подумать, что здесь под эффектом Glow подразумевается светящееся пятно вокруг объекта. На самом деле в JavaFX такие пятна предлагается реализовывать с помощью эффекта DropShadow - благо, широкие возможности настройки параметров данного эффекта вполне позволяют использовать его подобным образом. Эффект Glow здесь предназначен для того, чтобы заставить "светиться" сам объект, к которому мы применяем данный эффект. Конечно, если объект у вас кривая, то и свечение будет вокруг (если вы помните наш пример в одной из предыдущих статей по JavaFX, там так и было). Но применив эффект к какому-нибудь рисунку или кнопке, мы получим иную картину.
Параметров у эффекта Glow на удивление немного, всего два: input и level. Первый из этих параметров задаёт эффект, к которому будет в дальнейшем применяться Glow, и используется в том случае, если к одному объекту нужно применить несколько эффектов. Если ничего не задавать в качестве этого параметра, то эффект будет применяться к графическому изображению того объекта, к которому мы "присоединяем" эффект в тексте программы. Второй параметр, level, задаёт интенсивность свечения. Он может изменяться от нуля до единицы, и чем выше его значение, тем сильнее свечение. При этом на разные цвета этот параметр действует в разной степени, в соответствии с восприятием человеком разных базовых (R, G, B) цветов.
Отражение
Сейчас мы рассмотрим ещё один эффект, также способный здорово украсить и разнообразить интерфейс вашего RIA-приложения. Речь, конечно, об отражении, которое оживляет текст надписей и делает массу других полезных, с дизайнерской точки зрения, вещей.
Эффект, который помогает делать отражения, так и называется - Reflection. Параметров у него достаточно много, но, на мой взгляд, это совершенно не делает его сложным в применении.
Первый параметр называется bottomOpacity и задаёт степень прозрачности нижней границы отражения. Изменяться он может от нуля до единицы. Второй параметр, самый, по большому счёту, важный, - fraction. Он задаёт часть изображения исходного объекта, которая будет видна в отражении. То есть, если значение этого параметра будет равным 0.75 (это, кстати, его значение по умолчанию), то в отражении будет видно три четверти исходного объекта. Параметр этот также, как вы наверняка уже догадались, изменяется от нуля до единицы. Следующий по счёту параметр, input, мы с вами уже, фактически, рассматривали, когда вели разговор о предыдущем эффекте, поэтому второй раз на нём останавливаться не будем. Параметр topOffset характеризует расстояние, которое будет разделять верхний край отражения и нижний край отражаемого объекта. Аналогично параметру bottomOpacity есть и параметр для верхнего края изображения - называется он, соответственно, topOpacity.
В общем-то, конечно, вам далеко не всегда потребуется специально настраивать каждый из параметров отражения, однако это временами бывает необходимо, и потому достаточно удобно, что их так много.
Размытие
Иногда бывает необходимо сделать объект нечётким. Не суть важно, по какой причине - либо из эстетических соображений, либо для того, чтобы пользователь подумал, что у него со зрением что-то не так... Нас сейчас интересует, как именно это можно сделать. В арсенале разработчика, использующего JavaFX, конечно же, имеется эффект, позволяющий размывать изображения. Называется он GaussianBlur.
Параметров у него мало, всего два. Первый из них хорошо знаком вам по предыдущим эффектам - это параметр input. Второй же по счёту параметр называется radius и задаёт, как говорится в справке, радиус ядра размытия. То есть, в общем-то, именно этот параметр определяет, насколько сильно будет размыт тот объект, к которому вы примените данный эффект.
Резюме
Что ж, наверное, на сегодня эффектов хватит. Мы, конечно, успели рассмотреть далеко не все из них, но, сами понимаете, объём газетной статьи всё-таки ограничен, а потому с тем, что мы не успели разобрать сегодня, мы будем разбираться в следующих номерах "Компьютерных вестей".
В целом же, как видите, эффекты, предлагаемые корпорацией Sun Microsystems тем разработчикам, которые используют её платформу создания RIA-приложений, имеют весьма гибкие настройки, что позволяет создавать привлекательные визуальные композиции и практически не ограничивают свободу творчества дизайнеров, участвующих в создании таких приложений. И ничего удивительного, что Ларри Эллисон захотел сделать интерфейс для OpenOffice на основе JavaFX: технология действительно способна изменить интерфейс этого свободного офисного пакета буквально до неузнаваемости.
Вадим СТАНКЕВИЧ,
dreamdrusch@tut.by
Горячие темы