Статьи

Создание скомпилированных апплетов JavaFX Script – метод второй

В предыдущем посте я показал вам один из двух способов, которые команда компиляторов JavaFX Script предоставила для создания скомпилированных апплетов JavaFX Script. Сегодняшний пример программы демонстрирует второй из этих способов, преобразовывая пример « Привязка к функции» в скомпилированный апплет JavaFX Script. Вот скриншот апплета JavaFX Script, работающего в Firefox 3:

Bindtofunctionapplet2

Этот метод создания скомпилированного апплета JavaFX Script более «похож на JavaFX», чем метод, который я показал вам в предыдущем посте . Используя этот подход, мы:

  • Декларативно выражать апплет JavaFX, используя объект Applet в качестве верхнего уровня (см. BindToFunctionApplet2.fx ниже).
  • Присвоить javafx.ui.Applet в код атрибута апплета элемента в HTML — файл (см BindToFunctionAppletPage2.html ниже).
  • Укажите параметр AppletClass с именем класса, в котором выражен апплет (в данном случае BindToFunctionApplet2 , см. Файл HTML ниже). 

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

Сравните следующий код с примером « Привязка к функции» , основным отличием которого является отсутствие объекта Frame . Это не требуется, поскольку апплет предоставляет собственный контейнер пользовательского интерфейса.

/*
* BindToFunctionApplet2.fx - A compiled JavaFX program that demonstrates
* a "JavaFX-like" way of creating compiled JavaFX applets.
* It also demonstrates binding to a function.
*
* Developed 2008 by James L. Weaver (jim.weaver at lat-inc.com)
* to serve as a JavaFX Script example.
*/

import javafx.ui.*;
import javafx.ui.canvas.*;
import java.lang.Math;
import java.lang.System;

class CircleModel {
attribute diameter:Number;

function getArea():Number {
Math.PI * Math.pow(diameter / 2, 2);
}
}

Applet {
var cModel = CircleModel {}
content:
BorderPanel {
center:
Canvas {
content: [
Circle {
cx: 240
cy: 250
radius: bind cModel.diameter * 2
stroke: Color.PURPLE
strokeWidth: 1
fill: Color.MAGENTA
},
Text {
font:
Font {
face: FontFace.SANSSERIF
style: FontStyle.BOLD
size: 24
}
x: 20
y: 10
stroke: Color.RED
fill: Color.RED
content: bind "Diameter: {cModel.diameter}"
},
Text {
font:
Font {
face: FontFace.SANSSERIF
style: FontStyle.BOLD
size: 24
}
x: 240
y: 10
stroke: Color.RED
fill: Color.RED
content: bind "Area: {%3.2f cModel.getArea()}"
}
]
}
bottom:
Slider {
min: 0
max: 100
border:
TitledBorder {
title: "Diameter:"
}
value: bind cModel.diameter with inverse
minorTickSpacing: 5
majorTickSpacing: 10
paintTicks: true
paintLabels: true
labels: [
SliderLabel {
value: 0
label:
SimpleLabel {
text: "0"
}
},
SliderLabel {
value: 50
label:
SimpleLabel {
text: "50"
}
},
SliderLabel {
value: 100
label:
SimpleLabel {
text: "100"
}
}
]
}
}
}

 

Предоставление файла HTML для запуска апплета

Вот HTML-файл (который я назвал BindToFunctionAppletPage2.html ), который запускает апплет:

<html>
<body>
<applet code="javafx.ui.Applet" width=480 height=560
archive="javafxrt.jar,Scenario.jar,BindToFunctionApplet2.jar">
<param name="AppletClass" value="BindToFunctionApplet2">
</applet>
</body>
</html>

Вам нужно будет поместить файлы JAR (показанные в теге архива выше) в тот же каталог, что и файл HTML. Вы можете получить эти файлы из загрузки компилятора в каталоге dist / lib . Для компиляции этого апплета я использовал параметр -target, чтобы он работал в браузерах с JRE 5 или более поздней версии:

javafxc -target 1.5 BindToFunctionApplet2.fx

Как я упоминал ранее, вам нужно создать JAR-файл, содержащий файлы классов для этого апплета. Для этого в командной строке операционной системы я использовал следующую команду:

jar cvf BindToFunctionApplet2.jar BindToFunctionApplet2*.class

Вам также необходимо подписать JAR-файл, содержащий классы апплета, а также файлы javafxrt.jar и Scenario.jar . Для этого вам понадобится ключ подписи, который вы можете создать с помощью следующей команды:

keytool -genkey -alias jfx -dname "CN=John Doe, O=JFX Inc." (continued on next line)
  -validity 9999 -keystore jfx.keystore -keypass keyPassword -storepass storePassword

Используйте следующие команды для подписи файлов JAR:

jarsigner -keystore jfx.keystore -verbose -keypass keyPassword (continued on next line) 
 
-storepass storePassword BindToFunctionApplet2.jar jfx
jarsigner -keystore jfx.keystore -verbose -keypass keyPassword (continued on next line)
 
-storepass storePassword javafxrt.jar jfx
jarsigner -keystore jfx.keystore -verbose -keypass keyPassword (continued on next line)
 
-storepass storePassword Scenario.jar jfx

Чтобы выполнить этот скомпилированный апплет JavaFX Script, либо откройте файл BindToFunctionAppletPage2.html в браузере, либо используйте appletviewer, как показано ниже:

appletviewer BindToFunctionAppletPage2.html

Наслаждайтесь, и, пожалуйста, оставьте комментарий, если у вас есть какие-либо вопросы!

С уважением,
Джим Уивер
JavaFX Script: динамические сценарии Java для многофункциональных интернет-приложений и приложений на стороне клиента.

Немедленная загрузка электронных книг (PDF) доступна на сайте книги Apress.