This chapter provides an overview of the JavaFX™ Script programming language. At a high level, this chapter describes the programming language's main features, saving detailed coverage of specific constructs for subsequent chapters. This book is intended for designers and developers of rich Internet client applications and elements, that run in web pages, as Java™ Web Start software, or as traditional desktop applications. Its content assumes the reader is familiar with either the JavaScript or Java™ programming language, or both. While this document does not define a formal language specification, it can be considered a complete reference for all currently supported language features.
本章提供了JavaFx腳本編程語言的一個概覽。本章概述了這門編程語言的主要特性,后續章節將會詳細介紹這些特性的細節。本書適用于副Internet客戶端應用的設計者和開發者。這些應用可以作為Java Web Start軟件運行在網頁中或者作為傳統的桌面應用。本書假定讀者熟悉了javascript或java編程語言或者兩者都熟悉。但是本書并不是正式的語言規范,可僅僅做為當前JavaFx支持的語言特性的一個完整的參考。
The JavaFX Script programming language has the following distinctions:
JavaFX腳本編程語言有如下的語言特色:
- Uses a declarative syntax for specifying Graphical User Interface (GUI) components, enabling a developer's code to closely match the actual layout of the GUI.
- 可使用聲明式的語法編寫圖形界面組件,使得開發者的代碼非常接近于GUI的實際布局。
- Uses declarative data binding and incremental evaluation, enabling easy creation and configuration of individual components. Application data and GUI components are automatically synchronized.
- 使用聲明式的數據綁定和incremental evaluation(不知道如何翻譯), 使得創建和配置組件變得簡單。應用數據和GUI組件將自動同步。
- Is statically typed, having most of the same code structuring, reuse, and encapsulation features that enable creating and maintaining very large programs in the Java programming language.
- 它是一門靜態類型的、絕大部分代碼結構、復用和封裝特性跟Java編程語言一樣,可用來創建和維護大型應用。
- Works with all major IDEs, including the NetBeans IDE, the reference implementation IDE for software development with the Java programming language.
- 支持主流IDE,包括NetBeans IDE,NetBeans IDE是使用Java編程語言進行軟件開發的IDE參考實現。
- Is capable of supporting GUIs of any size or complexity.
- 能夠支持容易大小和復雜度的GUI。
- Makes it easier to use Swing.
- 它使Swing編程變得更容易
The following sections present a quick tour of the JavaFX Script programming language. These sections provide a general introduction to its core syntax and capabilities, comparing and contrasting to the Java programming language where appropriate. Each topic is then covered in greater detail in subsequent chapters.
接下來的小節是JavaFX腳本編程語言的一個快速指南,介紹了JavaFx的關鍵語法和能力,并且比較了它跟java編程語言之間的差異,每個主題將在后續的章節中詳細的介紹。
In the JavaFX Script programming language, a "script" is one or more declarations or expressions. Evaluating the script evaluates the declarations or expressions, in order:
在JavaFx中,“script”是一個以上的聲明活表達式。執行腳本就是順序執行腳本中的聲明或表達式:
var ten : Integer = 10;
java.lang.System.out.println("Twice {ten} is {2 * ten}.");
This prints out:
上面的語句會打印出:
Twice 10 is 20.
Unlike an application written in the Java programming language, a script need not contain any class definitions or functions.
不想用java寫的應用,腳本不需要包含class定義或者函數。
Class definitions share many similarities with the Java programming language, but some differences are notable. State, for example, is information stored in attributes, not fields. Behavior is exposed through functions, not methods. The following example defines a simple Rectangle
class that demonstrates the basic syntax of each.
class Rectangle {
attribute width: Integer;
attribute height: Integer;
function grow(): Void {
grow(1);
}
function grow(amount: Integer): Void {
width += amount;
height += amount;
}
}
The JavaFX Script programming language supports multiple inheritance, making it possible to inherit from more than one class.
Classes are covered in detail in Chapter 2
Attributes and Functions are covered in detail in Chapter 3
Object literals provide a simple syntax for class instantiation. The following code creates a single instance of the Rectangle
class defined previously, initializing its width
and height
attributes to 100
. (Note that new
is not needed.)
Rectangle {
width: 100
height: 100
}
To store a reference to this object, use the var
keyword:
var myRect = Rectangle {
width: 100
height: 100
}
Objects are covered in detail in Chapter 2 .
Variables and basic data types are covered in detail in Chapter 4
Expressions and Operators
Like other programming languages, the JavaFX Script programming language supports expressions and operators.
Chapter 5 discusses the expressions and operators available in the JavaFX Script programming language.
A sequence holds an ordered list of objects. This is roughly analogous to Java programming language arrays. Both hold multiple values and are accessed by index starting at 0.
var week = ["Monday","Tuesday","Wednesday","Thursday",
"Friday","Saturday","Sunday"];
var mon = week[0];
var wed = week[2];
var fri = week[4];
Sequence slices are also supported:
var week = ["Monday","Tuesday","Wednesday","Thursday",
"Friday","Saturday","Sunday"];
var weekdays = week[0..4]; // first slice
var weekend = week[5..6]; // second slice
Chapter 6 covers the basics of declaring sequences, while Chapter 7 focuses on using sequences.
Data binding provides a simple syntax for synchronizing the state of multiple objects. When two objects are bound to each other, the second object's value automatically changes whenever the first object is updated. A common use of data binding is to keep GUI components synchronized with their underlying data.
import javafx.application.Frame;
import javafx.application.Stage;
import javafx.scene.text.Text;
var myString = "Hello World!";
Frame {
width: 50
height: 50
visible: true
stage: Stage {
content: Text {
content: bind myString
}
}
}
// If some other part of code changes myString
// then the GUI's text will automatically change
// as well.
Data Binding is covered in detail in Chapter 8 .
Triggers are blocks of code that run when certain conditions are true. For example, you may want to be alerted if an attribute's value has been set to something that is inappropriate. The following example shows the basic trigger syntax:
import java.lang.System;
ReplaceDemo {
mySensitiveData: "Will anyone notice?"
}
class ReplaceDemo {
attribute mySensitiveData: String
on replace {
System.out.println("I noticed a change!");
};
// application-specific safeguarding code would go here
}
Triggers are covered in detail in Chapter 9 .