- 0 Обсуждение
-
JavaFX API
Главная | Описание языка | FXD | API | Примеры | Инструменты Разработки | Новости | Ресурсы | Форум
JavaFX Script API
Содержание |
Текст
Править
Text
Править
Шрифты
Править
Шрифты можно загрузить с сайта:
Добавление шрифта в проект:
- Создать папку fonts в проекте и скопировать туда фонт
- Создать папку META-INF в корне проекта в файловой системе.
- В папке META-INF создать файл fonts.mf в котором указать имя фонта и путь к нему
- MyFont=/fonts/MyFont.ttf
- В компоненте Font использовать имя фонта
- Font { name: "MyFont" size: 40 }
Управляющие Компоненты - Controls
Править
User Interface Controls Overview
Метка - Label
Править
| Пример использования | Картинка |
|---|---|
|
|
Кнопка - Button
Править
Флажки Опций - CheckBox
Править
Переключатели
Править
RadioButton
Править
ToggleButton
Править
Ползунковый регулятор - Slider
Править
Индикатора прогресса
Править
ProgressBar
Править
ProgressIndicator
Править
Список - ListView
Править
Гипер Ссылка - Hyperlink
Править
http://blogs.sun.com/vaibhav/entry/hyperlink_to_url
Открыть браузер по ссылке:
Skinning
Править
Менеджеры Компоновки
Править
http://java.sun.com/developer/technicalArticles/javafx/v1_2_newlayouts
Группа - Group
Править
Потоковый Компоновщик - Flow
Править
Стековый Компоновщик - Stack
Править
Черепичный Компоновщик - Tile
Править
Диаграммы
Править
- http://java.sun.com/developer/technicalArticles/javafx/v1_2_charts/
- http://blogs.sun.com/vaibhav/entry/some_graphs_javafx_ria
LineChart
Править
ScatterChart
Править
BarChart3D
Править
http://forums.sun.com/thread.jspa?messageID=10773814
2D Графика
Править
Окружность - Circle
Править
Прямоугольник - Rectangle
Править
Эллипс - Ellipse
Править
Траектория - PATH
Править
Дуга - Arc
Править
Треугольник - Triangle
Править
Картинки
Править
Image
Править
Путь к изображению задается в формате URL.
Если изображение лежит в том же пакете, что и используемый ее fx файл, то обратиться к ней можно с помощью переменной __DIR__:
Image { url: "{__DIR__}lion.png" }
Если нужно указать полный путь к изображению на диске, то надо использовать следующий формат:
Image { url: "file:///C:/images/lion.png" }
Преобразования
Править
Вращение - Rotate
Править
Перемещение - Translate
Править
Масштабирование - Scale
Править
Сдвиг слоев - Shear
Править
Комбинирование Фигур
Править
Пересечение < ShapeIntersect >
Править
Вычитание < ShapeSubtract>
Править
Эффекты
Править
DropShadow
Править
InnerShadow
Править
Медиа компоненты
Править
Видео
Править
| Пример использования | Картинка |
|---|---|
| |
Рабочая ссылка на видео: http://sun.edgeboss.net/download/sun/media/1460825906/1460825906_2956241001_big-buck-bunny-640x360.flv"
Обработка пользовательских событий
Править
Button event
Править
| Пример использования | Картинка |
|---|---|
|
|
Mouse Events
Править
Анимация
Править
Для программирования анимации в языке JavaFX Script предоставляется два основных класса: Timeline и KeyFrame.
Класс KeyFrame
Править
Аттрибуты класса KeyFrame
- time - время, в течении которого будет изменяться переменная
- values - задает конечное значение изменяемой переменной и способ ее изменения
- action - выполняемое действие
var radius = 0;
KeyFrame {
time: 5s,
values: radius => 100 tween Interpolator.LINEAR
action: function() { /* User action */}
}
Класс Timeline
Править
Аттрибуты класса Timeline
- keyFrames - последовательность классов KeyFrame, которые исполняются один за другим
- repeatCount - количество повторяемых итераций
var radius = 0;
Timeline {
keyFrames:[
KeyFrame {
time: 5s,
values: radius => 100 tween Interpolator.LINEAR
action: function() { /* User action */ }
}
]
repeatCount: 5
}
Простой пример использования анимации
Править
В приведенном примере, радиус окружности линейно изменяется от 0 до 100 в течении 5 секунд, 3 раза.
import javafx.scene.*;
import javafx.stage.*;
import javafx.animation.*;
import javafx.scene.paint.*;
import javafx.scene.shape.*;
import javafx.scene.transform.*;
var radius = 0.0;
Timeline {
keyFrames: KeyFrame {
time: 5s,
values: radius => 100 tween Interpolator.LINEAR
action: function() { /* User action */
}
}
repeatCount: 3
}.play();
Stage{
title: "JavaFX Animation"
scene: Scene{
width: 200
height: 200
content: Circle{
centerX: 100
centerY: 100
radius: bind radius
fill: Color.ORANGE
}
}
}
Маятник
Править
Программа, моделирующая поведение маятника:
Web приложения
Править
Чтение RSS
Править
import javafx.stage.*;
import javafx.scene.*;
import javafx.scene.text.*;
import javafx.scene.control.*;
import javafx.data.feed.rss.*;
import java.lang.Exception;
import javafx.scene.layout.LayoutInfo;
var feed: String = "http://planetnetbeans.org/rss20.xml";
var rssItems: String[];
var rssTask = RssTask {
interval: 30s
location: feed;
onStart: function() {
println("loading RSS feed...");
}
onItem: function(rssItem: Item) {
insert rssItem.title into rssItems;
}
onException: function(e: Exception) {
println("There was an error: {e.getMessage()}");
}
onDone: function() {
println("done reading RSS");
}
};
rssTask.start();
Stage {
title: "Read RSS"
scene: Scene {
width: 200
height: 200
content: ListView {
layoutInfo: LayoutInfo{ width: 300 height: 400 }
items: bind for(item in rssItems) Text{
font: Font{ size: 16 }
content: item
}
}
}
}
HTTPRequest
Править
GET
Править
import javafx.io.http.HttpRequest;
def http: HttpRequest = HttpRequest {
method: HttpRequest.GET
location: "http://www.wikipedia.org"
onResponseHeaders: function(headerNames: String[]) {
println("There are {headerNames.size()} response headers:");
for (name in headerNames) {
println(" {name}: {http.getResponseHeaderValue(name)}");
}
}
onException: function(e) { e.printStackTrace() }
}
http.start();
Результат:
There are 12 response headers:
: HTTP/1.0 200 OK
date: Mon, 17 May 2010 14:26:23 GMT
server: Apache
cache-control: s-maxage=3600, must-revalidate, max-age=0
last-modified: Thu, 13 May 2010 04:53:47 GMT
vary: Accept-Encoding
content-length: 47067
content-type: text/html; charset=utf-8
x-cache: HIT from sq77.wikimedia.org
x-cache-lookup: HIT from sq77.wikimedia.org:80
age: 13
connection: keep-alive
Апплеты
Править
Замена картинки при загрузки апплета.
Код апплета MyApplet.fx который лежит в пакете pack:
package pack;
import javafx.scene.Scene;
import javafx.stage.Stage;
import javafx.scene.text.Text;
import javafx.scene.text.Font;
import javafx.scene.paint.Color;
import javafx.scene.effect.DropShadow;
Stage {
title: "My Applet"
width: 250
height: 80
scene: Scene {
content: Text {
x: 10 y: 30
font: Font { size: 24 }
fill: Color.BLUE
effect: DropShadow{ offsetX: 3 offsetY: 3}
content: "Hello World!"
}
}
}
index.html:
<html>
<body>
<h1>Wiki</h1>
<script src="http://dl.javafx.com/dtfx.js"></script>
<script>
javafx(
{
archive: "Wiki.jar",
draggable: true,
width: 150,
height: 100,
code: "pack.MyApplet",
name: "Wiki"
}
);
</script>
</body>
</html>
Для компиляции вручную, надо вызвать следующую команду из корня проекта:
> javafxc -d . pack/MyApplet.fx
После этого надо открыть index.html файл в броузере:
Социальные сети
Править
Facebook
Править
Полезные примеры
Править
Сохранить приложение в виде картинки
Править
DraggableNode
Править
Этот простой компонент позволяет перетаскивать JavaFX компоненты с помощью мышки:
import javafx.scene.*;
public class DraggableNode extends CustomNode {
public var content: Node;
var dragX: Number;
var dragY: Number;
var dragAnchorX: Number;
var dragAnchorY: Number;
public override function create(): Node {
Group {
content: content
translateX: bind dragX
translateY: bind dragY
onMousePressed: function(e): Void {
dragAnchorX = dragX;
dragAnchorY = dragY;
}
onMouseDragged: function(e): Void {
dragX = dragAnchorX + e.dragX;
dragY = dragAnchorY + e.dragY;
}
}
}
}
Пример использования:
import javafx.stage.*;
import javafx.scene.*;
import javafx.scene.shape.*;
import javafx.scene.paint.*;
Stage {
title: "Application title"
scene: Scene {
width: 500
height: 500
content: DraggableNode{
content: Circle{
centerX: 250
centerY: 250
radius: 100
fill: Color.YELLOW
stroke: Color.ORANGE
}
}
}
}
ScalableNode
Править
Этот простой компонент позволяет масштабировать JavaFX компоненты с помощью мышки:
import javafx.scene.*;
public class ScalableNode extends CustomNode {
public var content: Node;
var scale = 1.0;
public override function create(): Node {
Group {
content: content
scaleX: bind scale
scaleY: bind scale
onMouseWheelMoved: function(e): Void {
scale += e.wheelRotation / 10.0;
}
}
}
}
Пример использования:
import javafx.stage.*;
import javafx.scene.*;
import javafx.scene.shape.*;
import javafx.scene.paint.*;
Stage {
title: "Application title"
scene: Scene {
width: 500
height: 500
content: ScalableNode{
content: Circle{
centerX: 250
centerY: 250
radius: 100
fill: Color.YELLOW
stroke: Color.ORANGE
}
}
}
}
CenterScalableNode
Править
Этот простой компонент позволяет масштабировать JavaFX компоненты относительно позиции мышки:
import javafx.scene.*;
import javafx.scene.transform.*;
public class CenterScalableNode extends CustomNode {
public var content: Node;
var s = 1.0;
var px: Number;
var py: Number;
function getP(s1: Number, s2: Number, p1: Number, p2: Number): Number {
((1 - s1) * s2 * p1 + (1 - s2) * p2) / (1 - s1 * s2)
}
public override function create(): Node {
Group {
content: content
transforms: Scale { x: bind s y: bind s pivotX: bind px pivotY: bind py }
onMouseWheelMoved: function(e): Void {
def ds = 1.0 + e.wheelRotation / 10.0;
px = getP(s, ds, px, e.sceneX);
py = getP(s, ds, py, e.sceneY);
s = s * ds;
}
}
}
}
Пример использования:
import javafx.stage.*;
import javafx.scene.*;
import javafx.scene.shape.*;
import javafx.scene.paint.*;
Stage {
title: "Application title"
scene: Scene {
width: 500
height: 500
content: CenterScalableNode{
content: Circle{
centerX: 250
centerY: 250
radius: 100
fill: Color.YELLOW
stroke: Color.ORANGE
}
}
}
}
PopupNode
Править
import javafx.stage.*;
import javafx.scene.*;
import javafx.scene.shape.*;
import javafx.scene.paint.*;
import javafx.scene.input.*;
import javafx.scene.text.*;
class PopupNode extends CustomNode {
public var x: Number;
public var y: Number;
public var content: Node;
public var popupScene: Scene;
public override function create(): Node {
insert this into popupScene.content;
Group {
content: content
translateX: x
translateY: y
onMouseExited: function (e) {
delete this from popupScene.content;
}
}
}
}
var scene: Scene;
Stage {
title: "Application title"
scene: scene = Scene {
content: Rectangle {
width: 200
height: 200
fill: Color.LIGHTBLUE
onMouseClicked: function (e) {
if (e.button == MouseButton.SECONDARY) {
PopupNode {
x: e.x
y: e.y
popupScene: scene
content: Text {content: "Hello World!"}
}
}
}
}
}
}
Вопросы и ответы
Править
Задайте интересующий вас вопрос по языку JavaFX Script
- на форуме
- на русском алиасе users-ru@openjfx.dev.java.net, на который можно подписаться со страницы openjfx.dev.java.net






































Добавил 



