Как написано в моем последнем блоге , я решил посмотреть на другие языки. Давайте начнем с JavaFX .
Мне нравится разрабатывать пользовательские интерфейсы, и я уже потратил полдня на изучение этого во время мероприятия, организованного nljug (Голландская группа пользователей Java) более 1 года назад.
Установка
Перейти на
JavaFX.com .
Загрузите SDK 1.1 и установите его.
При установке вы должны согласиться со странной лицензией (о которой уже
писали в прошлом году ):
если у вас нет Прав или если ваше Право не распространяется на дополнительное программное обеспечение, поставленное вам, то такое программное обеспечение для вас. Оценка Использование
(а) Оценка Использование. Вы можете проводить внутреннюю оценку Программного обеспечения в течение 90 дней с момента первого использования.
Если кто-то может объяснить, что это значит, ответьте на этот блог.
В конце установки показан register.html (для меня в Блокноте :-)).
NetBeans 6.5 (не бета-версия 6.7) кажется предпочтительной средой разработки JavaFX. Другие варианты включают Adobe Photoshop и Adobe Illustrator (которого у меня нет).
В меню Инструменты -> Подключаемые модули выберите JavaFX Kit и JavaFX SDK. И перезапустите IDE
Язык
Руководство по языку доступно по адресу
http://java.sun.com/javafx/1/tutorials/core/ .
Ключевые слова:
- def, var, null
- если, иначе, или, и
- public, package, protected, public-init, public-read
- связать, связать, заменить
- шаг, вставить в, удалить [из], sizeof, до, после
- for (in), while, break, continue, indexof
- попробуй, поймай, наконец
- пакет, импорт, класс, функция, аннотация, расширяет, переопределить, вернуть, новый
Полный список доступен
здесь
Некоторые объяснения:
- def для констант и var для переменных.
- Модификатор доступа по умолчанию является закрытым.
- Пакет используется для объявления имени пакета и в качестве модификатора доступа.
- public-init и public-read используются для указания переменных, которые могут быть публично инициализированы или прочитаны. Как записать переменную, зависит от предшествующего ей модификатора (например, пакет public-read var x = 1; ).
- Операторы такие же, как в Java, за исключением% replace by mod и! переделано нет .
- Спецификация языка доступна по адресу http://openjfx.java.sun.com/current-build/doc/reference/JavaFXReference.html .
- Похоже, класс написан на JSON .
Основные классы
Документ Java [FX] доступен по адресу http://java.sun.com/javafx/1.1/docs/api/ . В правом верхнем углу вы можете указать, для какого профиля вы хотите Javadoc. Общий профиль означает работу на настольном компьютере (ПК), мобильном телефоне и телевизоре.
- String, Number, Integer, Boolean, Duration, Void
- javafx.lang.FX, javafx.io.http.HttpRequest, javafx.util.StringLocalizer
- javafx.stage.Stage, javafx.scene.Scene, javafx.scene.Group, javafx.scene.Node
Некоторые объяснения:
- Количество переводится в поплавок в Java (с 1.1), поэтому предпочитает Integer над Number , когда это возможно
- Длительность используется в анимации, примеры 10 с, 4 мс, 0,5 ч .
Привет мир
Написание приложения
В NetBeans: Файл -> Новый проект -> JavaFX -> Приложение JavaFX.
Он генерирует код, где вам просто нужно заменить «Название приложения» и «Содержание приложения» на «Helloworld». И вы можете нажать кнопку «
Выполнить» .
Вот код
Документация
Щелкните правой кнопкой мыши по проекту и выберите « Создать Javadoc» .
Он создал каталог C: \ Java \ JavaFX \ Test \ examples \ dist \ javadoc, но, к сожалению, он пуст :-(.
Распространение
JavaFX не является стандартной библиотекой в том смысле, что вы не можете поместить ее рядом с файлом Jar, сжать и распространить.
Вы не можете распространять JavaFX.
Чтобы развернуть как апплет :
<script src="http://dl.javafx.com/dtfx.js"> </script>
<script>
javafx(
{
codebase: "http://www.japplis.com/resources/blogs/javafx"
archive: "examples.jar",
draggable: true,
width: 250,
height: 80,
code: "examples.Helloworld",
name: "Helloworld"
}
);
</script>
Демо доступно
здесь .
Чтобы развернуть как Web Start :
В каталоге dist вы найдете 2 файла jnlp, один для апплета, один для приложения (JFrame).
Сделайте копию этих файлов и замените некоторые значения, такие как codebase , vendor , homepage , …
нажмите здесь, чтобы запустить его как приложение.
Развернуть для мобильных устройств :
???
Чтобы развернуть как приложение :
Создайте значок с помощью javaws -Xnosplash helloworld.jnlp, где helloworld.jnlp имеет codebase = «file: /// C: / Java / JavaFX / Test / examples / test» href = «helloworld.jnlp» .
Проблема в том, что вы можете заранее знать, куда пользователь установит приложение и «.» или «файл: ///.» не работает как кодовая база.
Обратите внимание, что созданный файл Jar содержит Main-Class в своем манифесте, но java -jar helloworld.jar выбрасывает исключение в потоке «main» java.lang.NoClassDefFoundError: com / sun / javafx / runtime / FXObject
замечания
- JavaFX является общим для приложений JavaFX.
- Версия JavaFX указана в JNLP. Означает ли это, что мое приложение JavaFX будет использовать JavaFX 1.1, даже если на компьютере установлена более новая версия?
- Перетаскивание апплета из браузера не помогло мне.
- При запуске приложения с JNLP, рядом с окном показывался предупреждающий знак .
- Никто, кроме разработчиков Java, не знает, что такое Web Start.
- Вы также можете запустить скрипт .fx файл (интерпретированный режим) и распространять файл, сжатый в GZip, что позволяет очень маленькую площадь
Концепции
Привязки
Привязка делает зависимость переменной от значения другой переменной.
var x = 10;
def y = bind x + 10; // y is always x + 10
Вы можете связать типы, объекты, последовательности, функции.
Вы также можете использовать триггеры с on replace, которые позволяют уведомлять функцию при изменении переменной:
var x = 10 on replace oldX {
println("moving the object from {oldX} to {x}");
}
Последовательности
Последовательности — это умные списки .
Инициализация :
var seq1 = [1, 2, 3, 4, 5];
var seq2 = [1..5];
// sequences can be created based on another sequence
var seq3 = seq2[n | n mod 2 == 0];
var seq4 = seq2[2..4]; // here 2 and 4 are the indexes of seq2 (not the values)
Использование :
Просто используйте тогда, когда вы используете массивы.
Для сравнения 2 последовательностей используйте == .
Манипуляции
вставьте значение в seq, вставьте значение перед seq [i], вставьте значение после seq [i], чтобы вставить значения.
удалить значение из seq, удалить seq [i], чтобы удалить значения.
reverse seq, чтобы изменить последовательность.
Классы и функции
До сих пор наш пример Helloworld не определял класс или функцию. Но он использует классы Stage, Scene, Text и Font.
class MyClass {
var myValue: String;
public function print() {
println("The value is {myValue}");
}
public function addText(text:String):String {
myValue = "{myValue}{text}";
return myValue
}
}
Пользовательский интерфейс
Одна из сильных сторон JavaFX — написание пользовательских интерфейсов.
2D
Создание 2D объектов основано на объектах Node, которые вы помещаете в группу в макетах.
Примерами являются Rectangle, Text, ImageView.
var rect1 = Rectangle { width:300 height: 150 };
var rect2 = Rectangle { x: bind rect1.x + 50 y: bind rect1.y + 50 width: 200 height: 50 fill: Color.RED onMouseEntered: function(e:MouseEvent) {rect1.fill = Color.BLUE} };
var group1 = Group { content:[rect1, rect2] };
Обратите внимание, что я пробовал onMouseEntered: function (e: MouseEvent) {fill = Color.BLUE}, но это не сработало.
Также градиент не работал для меня.
Существует поддержка фокусировки на узлах, и у вас есть примеры того, как сделать перетаскивание с помощью JavaFX.
Эффекты и анимация
Для эффектов все узлы имеют переменную эффекта. Эффекты, кажется, работают только для профиля рабочего стола.
например
group1.effect = Reflection { fraction: 0.7 };
Анимация
JavaFX имеетпакет javafx.animation.transition для стандартных переходов.
var rotTransition = RotateTransition {
duration: 3s node: group1
byAngle: 360
};
group1.onMouseClicked = function(e:MouseEvent) {
rotTransition.play();
}
Чтобы изменить значения (включая цвета) в зависимости от времени, вы можете использовать
шкалу времени и, возможно, взглянуть на
ключевые слова dur и
tween .
Из-за нехватки времени и неудачных попыток я пропущу эту часть.
Мультимедиа
Одним из преимуществ JavaFX является MediaPlayer.
Создайте Media, а затем MediaPlayer, поместите его в свою сцену, возможно, с некоторыми кнопками, чтобы управлять им и наслаждаться.
Обратите внимание, что пользователь должен иметь установленный видео / аудио кодек для работы или вам необходимо кодировать видео с помощью кодера ON2 FX .
Элементы управления
У вас есть стандартные элементы управления Swing для профиля рабочего стола (по умолчанию используется Nimbus Look and Feel).
Но для общего профиля у вас есть только ImageView, Text и TextBox. Нет TabPanel, Checkbox, Button, …
Я советую вам взглянуть на JFXtras для большего количества элементов управления, макета, но даже там большинство классов для профиля рабочего стола.
Входы
на узле у вас есть функции, такие как onMousePressed или onKeyPressed.
Я не знаю, как JavaFX обрабатывает несколько сенсорных экранов. Может быть, для телевизоров он будет обращаться с пультом как клавиатура.
Этапы
Как описано выше с JavaFX, вы создаете сцену, которую вы добавляете на этапе. Устройство принимает эту стадию, чтобы показать пользователю (например, апплет).
Этап используется для определения информации о приложении, такой как название приложения, изменяемый размер, значок, …
Вы также можете определить расширения этапа sush как AppletStageExtension.
Обратите внимание, что высота рабочей области — это высота JFrame, которая является высотой панели + ?? пиксели.
я пробовал
icons: [Image { url: "{__DIR__}examples/Duke.gif"} ]
но это не сработало. Неудивительно, что все приложения JavaFX имеют одинаковый значок (чашка Java).
разное
При загрузке файла вы можете использовать
{__DIR__}, чтобы указать корневой URL-адрес файла Jar.
{__PROFILE__} может иметь браузер значений
,
рабочий стол или
мобильный телефон .
{__FILE__} возвращает URL текущего (класса) файла.
JavaFX не поддерживается в Linux.
Примеры ориентированы на формы, эффекты и анимацию (особенности JavaFX). В примерах нет Javadoc.
Документация по API распространяется вместе с SDK, другая документация доступна онлайн.
Взаимодействие с Java (не тестировалось)
Получение класса Java из JavaFX:
import mypackage.MyJavaClass;
var fxVar = MyJavaClass("Goodbye World!");
Получение Java-класса из JavaFX:
http://java.dzone.com/tips/calling-javafx-java
JavaFX в и из JavaME: ??
Вывод
Изучение JavaFX (в течение 8 часов) очень весело, даже если не все интуитивно понятно.
Я не вижу его как общий язык, а скорее как специфический язык для графики (Logo ++ ;-)).
Размер кода невелик, я вижу, что JavaFX используется для онлайн-рекламы, мобильных игр (бесплатно для апплетов, небольшая плата за мобильные телефоны) или мультимедийных плееров.
Это больше будет конкурентом для JavaME, чем для Flash.
Pro,
- Прост в освоении
- Удобочитаемый
- Медиа поддержка
- Анимация
- переплет
- Пиши один раз, запускай везде, простирайся на (миллиарды) устройств
Con-х
- Мобильная платформа: нет устройств, нет способов развертывания, нет эффектов, мало элементов управления.
- Абсолютные размеры, в основном используемые в примерах (на самом деле их нельзя переносить на несколько устройств с экранами разных размеров)
- В основном полезно для приложений, использующих графику