Как и обещал пишу первый топик посвященный изучению javaFX, немного с запозданием ввиду отсутствия времени, но лучше поздно чем никогда.
Итак начем. В первой части я расскажу откуда скачать, как установить, и напишем и разберем наш первый как водится helloWorld.
Пункт первый он же Установка всего необходимого
В зависимости от того какой IDE вы пользуетесь будут разные варианты. Я расскажу о двух вариантах, на примере двух самый популярных IDE для разработки Java это NetBeans и Eclipse.
Для NetBeans все ужасно просто, есть специальная сборка для JavaFX в которой уже есть все необходимое для работы. Скачать ее можно отсюда.
C Eclipse дело обстоит несколько хуже. Можно скачать плагин добавив репозиторий http://javafx.com/downloads/eclipse-plugin, затем нужно скачать саму SDK это можно сделать по той же ссылке что и для NetBeans, прописать путь к SDK в переменной окружения JAVAFX_HOME и после этих махинаций все должно работать, но увы, как я понял, этот плагин не адаптирован для javafx 1.2 поэтому весь ваш код будет подчеркиваться как сплошная ошибка, соответственно не будет работать авто комплит, но при этом будет нормально компилироваться. Я не стал углубляться в решении этой проблемы(пару часов погуглил, попробовал несколько плагинов, и нашел на форумах много аналогичных нерешенных проблем), а просто перешел на NetBeans (хотя конечно Eclipse для меня приятнее и привычнее). Ну я думаю на этом с первым пунктом разобрались.
Идем далее Пишем HelloWorld
После создания нового пустого проекта, в NetBeans уже будет создан некий начальный код, но его мы удалим и начнем писать с нуля.
для начала объявим две переменные которые будут у нас отвечать за размеры окна:
var height =500; var widght =500;
Сразу оговорюсь, что тип переменной var определяется в момент компиляции, а не во время исполнения. Создадим так же переменную
var textField =TextBox{ text:"" columns:19 selectOnFocus:true }; var welcomeText:Text; var animation =TranslateTransition{ duration:2s node: bind welcomeText toY:-350 interpolator:Interpolator.LINEAR
}
textField переменная хранит в себе объект TextBox — аналогичный JTextField. Мы задаем ей параметры: text — это содержимое текстового поля, colums — количество «ячеек»(видимых символов), a selectOnFocus это значит что не важно в фокусе этот элемент или нет при получении фокуса его содержимое будет выделено. welcomeText переменная типа Text мы ее определим позже, a переменная adnimation — экземпляр класса, который отвечает за анимацию поля welcomeText (мы написали node: bind welcomeText). Далее переходим к основному. понимаем следующую частичку кода:
Stage — это высокоуровневый контейнер для всех объектов которые есть в скрипте. В нашем случае (я запускаю скрипт как desktop application) это будет обычное окно. Так же мы задаем размеры этому окну и запрещаем менять размер.
Построение всего графического интерфейса в javafx постоено в виде дерева. Корнем его является класс Scene. У него есть большое количество атрибутов, но мы пока что воспользуемся только некоторыми.
fill — атрибут который отвечает за отрисовку фона. Мы его в данном случае заполним градиентом от светло-серого до черного сверху вниз (startX и startY это координаты начала отрисовки градиента, endX и endY его конца, принимают значения в процентах т.е. 0.5 — 50% т.е. середина).
Перейдем к самому интересному — добавлению контента.
content: Group{
layoutY:30 content:[ HBox{ width:500 spacing:10 vpos:VPos.CENTER hpos:HPos.CENTER content:[ Label{ graphicVPos:VPos.CENTER text:"Enter your name" textFill:Color.WHITE effect:Reflection{ fraction:0.75 topOffset:0.0 topOpacity:0.5 bottomOpacity:0.0 } }, textField, Button{ text:"Go go go" action:function() { if(textField.text!="") { welcomeText.content ="Hi,{textField.text}!\n" "Приветстую тебя вот тут, я решил написать \n" "Много всякой лабуды, чтобы все таки можно \n" "Было забить пустое место на экране....\n"; welcomeText.visible =true; animation.playFromStart(); } else { welcomeText.visible =false; animation.stop(); } } } ] }, welcomeText =Text{ layoutX:50 layoutY:450 content:"" font:Font.font("Sergio",20) fill:Color.LIGHTCYAN } ] }
Мы создаем группу отображения (Group — это ветвь которая содержит несколько дочерних ветвей). Атрибуты layoutX и layoutY — задаю абсолютное положение относительно левого верхнего угла родительского объекта. В javafx существует 2 layout menager`а это VBox и HBox которые соответственно отвечают за вертикальную и горизонтальную компоновку объектов. Мы делим всю рабочую область на 2 части.
В верхнюю мы добавляем Label (аналог обычного JLabel, к нему мы для красоты сопоставляем эффект Reflection — отражение), за ним идет наш textField и кнопка, которая будет обрабатывать собитие нажатия. Нижняя панель по-умолчанию пуста. После нажатия кнопки мы берем то что уже написано в textField (методом textField.text), добавляем это в сумбурный бредовый текст welcome.content = «some_text {inserted_text} some_other_text», далее делаем этот объект видимым и запускаем анимацию (animation.playFromStart()). Конечно все это дело заключаем в if-else блок, чтобы проверить на пустоту ввода (если в поле ничего не ввели, то выключаем анимацию и скрываем поле). Должно получиться что-то вроде такого
чтобы можно было легко скопипастить и проверить если не верите то я приведу полный листинг этого простенького кода.
layoutY:30 content:[ HBox{ width:500 spacing:10 vpos:VPos.CENTER hpos:HPos.CENTER content:[ Label{ graphicVPos:VPos.CENTER text:"Enter your name" textFill:Color.WHITE effect:Reflection{ fraction:0.75 topOffset:0.0 topOpacity:0.5 bottomOpacity:0.0 } }, textField, Button{ text:"Go go go" action:function() { if(textField.text!="") { welcomeText.content ="Hi,{textField.text}!\n" "Приветстую тебя вот тут, я решил написать \n" "Много всякой лабуды, чтобы все таки можно \n" "Было забить пустое место на экране....\n"; welcomeText.visible =true; animation.playFromStart(); } else { welcomeText.visible =false; animation.stop(); } } } ] }, welcomeText =Text{ layoutX:50 layoutY:450 content:"" font:Font.font("Sergio",20) fill:Color.LIGHTCYAN visible:true } ] } }
}
Топик получился немного сумбурным, прошу за это прощения, уже почти 5 давно не спал и голова уже не соображает. Надеюсь это кому-то когда-нибудь пригодится. Спасибо за внимание, жду критики.