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.
The JavaFX Script programming language has the following distinctions:
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.
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:
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.
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
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 .