SlideShare a Scribd company logo
Programming with JavaFX
Tecniche di Programmazione – A.A. 2014/2015
Summary
A.A. 2014/2015Tecniche di programmazione2
1. About and History
2. Basic concepts
3. Minimal JavaFX Application
4. Application structure
5. The Scene Graph
6. Events
7. Model-View-Controller
8. The Controller in FXML
9. Properties and bindings
10. Resources
About and History
Introduction to JavaFX
GUI in Java
A.A. 2014/2015Tecniche di programmazione4
 Graphic framework available in Java
 Swing
 Extremely powerful, many extensions available
 Complex to master, requires low-level handling
 Hard to create visually pleasing applications
 Alternatives available
 Most notable: SWT (Eclipse)
 Still cumbersome to master
 On a different Universe, web-based user interfaces
became nicer and faster to create
JavaFX 1.0 – forget it
A.A. 2014/2015Tecniche di programmazione5
 JavaFX 1 and JavaFX 2 are completely different
 Version 1 relied on a “scripting language” to describe
scenes, with ‘hooks’ to activate Java code
 JavaFX 1.x is now deprecated
JavaFX 2.x
A.A. 2014/2015Tecniche di programmazione6
 Redesigned from scratch
 The JavaFX 2.x framework is entirely written in Java
 For visual layout, an XML file may also be used (called
FXML)
 Graphic appearance borrows from web-standard CSS
style sheets
 UI programming is based on easy to handle events and
bindings
 Oracle plans to deprecate Swing in favor of JavaFX 2
 Now called JavaFX 8 (after Java 8 – JDK 1.8)
Getting and running JavaFX
A.A. 2014/2015Tecniche di programmazione7
 JavaFX is already included in Oracle JDK 7 and JDK8
 Not in JDK 6.x
 Not in OpenJDK (beware, Linux users!)
 JDK 8 includes significant JavaFX improvements.
 Recommended:
 JavaFX Scene Builder
 Eclipse: e(fx)clipse plugin, available in the Eclipse Marketplace
 Download links are in the course webpage
Basic concepts
Introduction to JavaFX
Key concepts in JavaFX
A.A. 2014/2015Tecniche di programmazione9
 Stage: where the application will be displayed (e.g., a
Windows’ window)
 Scene: one container of Nodes that compose one “page”
of your application
 Node: an element in the Scene, with a visual appearance
and an interactive behavior. Nodes may be hierarchically
nested
My best friend is the JavaFX JavaDoc API
http://docs.oracle.com/javase/8/javafx/api/
Some ‘Leaf’ Nodes (Controls)
A.A. 2014/2015Tecniche di programmazione10
Some ‘Parent’ Nodes (Container ‘Panes’)
A.A. 2014/2015Tecniche di programmazione11
 BorderPane (5-areas)
 Hbox,Vbox (linear sequence)
 StackPane (overlay all children)
 GridPane (row x columns)
 FlowPane (flowing boxes, wrap around)
 TilePane (flowpane with equally sized boxes)
 AnchorPane (magnetically attach nodes at corners or
sides)
Some Nodes (Charts)
A.A. 2014/2015Tecniche di programmazione12
Nodes family
A.A. 2014/2015Tecniche di programmazione13
javafx.scene.Node
Parent
Control
ChoiceBox
ComboBoxBase
ColorPicker
ComboBox
Labeled
ButtonBase
Button
CheckBox
MenuButton
ToggleButton
Cell
Label
TitledPane
ListView
MenuBar
Separator
Slider
TabPane
TextInputControl
TextArea
TextField
ToolBar
TreeView
Group
Region
Axis
Chart
Pane
AnchorPane
BorderPane
FlowPane
GridPane
HBox
StackPane
TilePane
VBox
WebView
Shape
Arc
Circle
Line
Polygon
Polyline
Rectangle
Text
Canvas
Imageview
Focus on
Panes
and
Controls
And more coming…
A.A. 2014/2015Tecniche di programmazione14
http://jfxtras.org/
And more coming…
A.A. 2014/2015Tecniche di programmazione15
http://fxexperience.com/controlsfx/
Empty JavaFX window
A.A. 2014/2015Tecniche di programmazione16
public class Main extends Application {
@Override
public void start(Stage stage) {
Group root = new Group(); // the root is Group or Pane
Scene scene = new Scene(root, 500, 500, Color.BLACK);
stage.setTitle("JavaFX Demo");
stage.setScene(scene);
stage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Adding some shape
A.A. 2014/2015Tecniche di programmazione17
public class Main extends Application {
@Override
public void start(Stage stage) {
Group root = new Group();
Scene scene = new Scene(root, 500, 500, Color.BLACK);
stage.setTitle("JavaFX Demo");
Rectangle rect = new Rectangle(25,25,250,250);
r.setFill(Color.BLUE);
root.getChildren().add(rect);
stage.setScene(scene);
stage.show();
}
}
How to add scene content
A.A. 2014/2015Tecniche di programmazione18
 In Java code
 By creating and adding new Node subclasses
 Standard way, in Java (boring and error-prone)
 By using node Builder classes
 Programming pattern, later on…
 In FXML
 By writing XML directly
 By using the Scene Editor
 And loading the FXML into the application
JavaFX Scene Builder 2.0
A.A. 2014/2015Tecniche di programmazione19
FXML fragment
A.A. 2014/2015Tecniche di programmazione20
. . .
<HBox id="HBox" alignment="CENTER" spacing="15.0"
AnchorPane.rightAnchor="23.0" AnchorPane.topAnchor="22.0">
<children>
<Button id="button1" fx:id="newIssue" onAction="#newIssueFired"
text="New" />
<Button id="button2" fx:id="saveIssue" onAction="#saveIssueFired"
text="Save" />
<Button id="button3" fx:id="deleteIssue" onAction="#deleteIssueFired"
text="Delete" />
</children>
</HBox>
<ImageView id="IssueTrackingLite" layoutX="14.0" layoutY="20.0">
<image>
<Image url="@IssueTrackingLite.png" preserveRatio="true" smooth="true" />
</image>
</ImageView>
. . .
Building a scene from FXML
A.A. 2014/2015Tecniche di programmazione21
public void start(Stage stage) throws Exception {
Parent root = FXMLLoader.load(
getClass().getResource("circle.fxml"));
stage.setTitle("Circle Demo");
stage.setScene(new Scene(root, 500, 150));
stage.show();
}
Application structure
Introduction to JavaFX
Separation of concerns
A.A. 2014/2015Tecniche di programmazione23
Typical Class Diagram
A.A. 2014/2015Tecniche di programmazione25
General rules
A.A. 2014/2015Tecniche di programmazione26
 A JavaFX application extends
javafx.application.Application
 The main() method should call Application.launch()
 The start() method is the main entry point for all JavaFX
applications
 Called with a Stage connected to the Operating System’s
window
 The content of the scene is represented as a hierarchical
scene graph of nodes
 Stage is the top-level JavaFX container
 Scene is the container for all content
Minimal example
A.A. 2014/2015Tecniche di programmazione27
public class HelloWorld extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
primaryStage.setTitle("Hello World!");
StackPane root = new StackPane();
Button btn = new Button();
btn.setText("Say 'Hello World'");
root.getChildren().add(btn);
primaryStage.setScene(new Scene(root, 300, 250));
primaryStage.show();
}
}
Stage vs. Scene
javafx.stage.Stage javafx.scene.Scene
A.A. 2014/2015Tecniche di programmazione28
 The JavaFX Stage class is the
top level JavaFX container.
 The primary Stage is
constructed by the platform.
 Additional Stage objects may
be constructed by the
application.
 A stage can optionally have
an owner Window.
 The container for all content
in a scene graph
 The application must specify
the root Node for the scene
graph
 Root may be Group (clips),
Region, Control (resizes)
 If no initial size is specified, it
will automatically compute it
Nodes
A.A. 2014/2015Tecniche di programmazione29
 The Scene is populated with a tree of Nodes
 Layout components
 UI Controls
 Charts
 Shapes
 Nodes have Properties
 Visual (size, position, z-order, color, ...)
 Contents (text, value, data sets, ...)
 Programming (event handlers, controller)
 Nodes generate Events
 UI events
 Nodes can be styled with CSS
Events
A.A. 2014/2015Tecniche di programmazione30
 FX Event (javafx.event.Event):
 Event Source => a Node
 Event Target
 Event Type
 Usually generated after some user action
 ActionEvent,TreeModificationEvent, InputEvent, ListView.E
ditEvent, MediaErrorEvent,TableColumn.CellEditEvent,Tre
eItem.TreeModificationEvent,TreeView.EditEvent,WebEve
nt,WindowEvent,WorkerStateEvent
 You can define event handlers in your application
Properties
A.A. 2014/2015Tecniche di programmazione31
 Extension of the Java Beans convention
 May be used also outside JavaFX
 Encapsulate properties of an object
 Different types (string, number, object, collection, ...)
 Set/Get
 Observe changes
 Supports lazy evaluation
 Each Node has a
large set of Properties
Bindings
A.A. 2014/2015Tecniche di programmazione32
 Automatically connect («bind») one Property to another
Property
 Whenever the source property changes, the bound one is
automatically updated
 Multiple bindings are supported
 Lazy evaluation is supported
 Bindings may also involve computations (arithmetic operators,
if-then-else, string concatenation, ...) that are automatically
evaluated
 May be used to automate UI
 May be used to connect the Model with theView
The Scene graph
Introduction to JavaFX
Nodes
A.A. 2014/2015Tecniche di programmazione34
 Root node: top level container
 Intermediate nodes:
 Containers
 Layout managers
 UI Composite controls
 Leaf (terminal) nodes:
 Shapes
 UI Controls
 Organized as a Hierarchical tree
Nodes family
A.A. 2014/2015Tecniche di programmazione35
javafx.scene.Node
Parent
Control
ChoiceBox
ComboBoxBase
ColorPicker
ComboBox
Labeled
ButtonBase
Button
CheckBox
MenuButton
ToggleButton
Cell
Label
TitledPane
ListView
MenuBar
Slider
TabPane
TextInputControl
TextArea
TextField
ToolBar
TreeView
Group
Region
Axis
Chart
Pane
AnchorPane
BorderPane
FlowPane
GridPane
HBox
StackPane
TilePane
VBox
WebView
Shape
Arc
Circle
Line
Polygon
Rectangle
Text
Canvas
Imageview
JavaDoc
is your
friend
Focus on
Panes
and
Controls
Exploring Controls and Examples
A.A. 2014/2015Tecniche di programmazione36
 JavaFX Ensemble demo
application
 Download from Oracle
site: JavaFX Demos and
Samples Downloads
 Run Ensemble.jnlp
UI Form Controls
A.A. 2014/2015Tecniche di programmazione37
 Controls may be
combined to construct
«Forms»
 Control Nodes have a
value property
 May be linked to application
code
 Control Nodes generate
UI Events
 Button:ActionEvent
 Text: ActionEvent,
KeyTyped, KeyPressed,
MouseClicked, ...
A.A. 2014/2015Tecniche di programmazione38
Layout Class Hierarchy
A.A. 2014/2015Tecniche di programmazione39
 Group:
 Doesn’t perform any positioning of children.
 To statically assemble a collection of nodes in fixed positions
 To apply an effect or transform to that collection.
 Region:
 base class for all general purpose layout panes
 resizable and stylable via CSS
 Supports dynamic layout by sizing and positioning children
 Control:
 the base class for all skinnable controls
 resizable and subclasses are all stylable via CSS
 Controls delegate layout to their skins (which are Regions)
 Each layout Control subclass provides API for adding content in the
appropriate place within its skin
 you do not add children to a control directly.
A.A. 2014/2015Tecniche di programmazione40
A.A. 2014/2015Tecniche di programmazione41
A.A. 2014/2015Tecniche di programmazione42
A.A. 2014/2015Tecniche di programmazione43
A.A. 2014/2015Tecniche di programmazione44
A.A. 2014/2015Tecniche di programmazione45
A.A. 2014/2015Tecniche di programmazione46
A.A. 2014/2015Tecniche di programmazione47
Creating the Scene Graph
A.A. 2014/2015Tecniche di programmazione48
 The Java way
 Create Control Nodes
 Set properties to new nodes
 Add new nodes to parent node
 With Constructors and/or with Builders
 The FXML way
 Create a FXML file
 Define Nodes and Properties in FXML
 Load the FXML
 (Optionally, add new nodes/properties the Java way)
Example: one text input field
A.A. 2014/2015Tecniche di programmazione49
TextField text = new TextField("Text");
text.setMaxSize(140, 20);
root.getChildren().add(text);
TextField text = TextFieldBuilder().create()
.maxHeight(20).maxWidth(140)
.text("Text")
.build() ;
root.getChildren().add(text);
Constructors
Builders
A.A. 2014/2015Tecniche di programmazione50
public class HelloDevoxx extends Application {
public static void main(String[] args)
{
launch(args);
}
@Override
public void start(Stage primaryStage)
{
primaryStage.setTitle("Hello Devoxx");
Group root = new Group();
Scene scene = new Scene(root, 400, 250,
Color.ALICEBLUE);
Text text = new Text();
text.setX(105);
text.setY(120);
text.setFont(new Font(30));
text.setText("Hello Devoxx");
root.getChildren().add(text);
primaryStage.setScene(scene);
primaryStage.show();
}
}
A.A. 2014/2015Tecniche di programmazione51
public void start(Stage primaryStage)
{
primaryStage.setTitle("Hello Devoxx");
primaryStage.setScene(SceneBuilder.create()
.width(400).height(250).fill(Color.ALICEBLUE)
.root(GroupBuilder.create().children(
TextBuilder.create()
.x(105).y(120)
.text("Hello Devoxx")
.font(new Font(30)).build()
).build()
).build());
primaryStage.show();
}
The FXML way...
A.A. 2014/2015Tecniche di programmazione52
 XML-based format
 Nested tree of XML Elements, corresponding to Nodes
 XML Attributes corresponding to (initial) properties of
nodes
 JavaFX Scene Builder is a GUI for creating FXML files
 The FXMLLoader class reads a FXML file and creates all
the Nodes
Example
A.A. 2014/2015Tecniche di programmazione53
JavaFX Scene Builder
A.A. 2014/2015Tecniche di programmazione54
FXMLLoader
A.A. 2014/2015Tecniche di programmazione55
@Override
public void start(Stage stage) throws Exception {
Parent root = FXMLLoader.load(
getClass().getResource("fxml_example.fxml"));
stage.setTitle("FXML Welcome");
stage.setScene(new Scene(root, 300, 275));
stage.show();
}
Linking FXML and Java
A.A. 2014/2015Tecniche di programmazione56
 FXML element may have an associated attribute fx:id
 Nodes may be later retrieved by
 public Node lookup(java.lang.String selector)
 Finds a node with a specified ID in the current sub-tree
 Example:
 scene.lookup("#myId");
 Node references can also be «injected» using the
@FXML annotation (see later)
Events
Introduction to JavaFX
Interacting with Nodes
A.A. 2014/2015Tecniche di programmazione58
 In JavaFX applications, events are notifications that
something has happened.
 An event represents an occurrence of something of interest to
the application
 As a user clicks a button, presses a key, moves a mouse, or
performs other actions, events are dispatched.
 Registered event filters and event handlers within the
application
 receive the event and
 provide a response.
What is an event?
A.A. 2014/2015Tecniche di programmazione59
Event propagation
A.A. 2014/2015Tecniche di programmazione60
 Events are generated on the source node
 Events propagated in the scene graph hierarchy («dispatch
chain»), in two phases
 Dispatching: downwards, from root to source node
 Processes Event Filters registered in the nodes
 Bubbling: upwards, from source node to root
 Processes Event Handlers registered in the nodes
 If you want an application to be notified
when an event occurs, register a filter
or a handler for the event
 Handlers may “consume” the event
Event Handlers
A.A. 2014/2015Tecniche di programmazione61
 Implements the EventHandler interface
 Executed during the event bubbling phase.
 If does not consume the event, it is propagated to the
parent.
 A node can register more than one handler.
 Handlers for a specific event type are executed before
handlers for generic event types.
 For example, a handler for the KeyEvent.KEY_TYPED event is
called before the handler for the InputEvent.ANY event.
 To consume an event, call the consume() method
Registering Event Handlers
A.A. 2014/2015Tecniche di programmazione62
 setOnEvent-type(
EventHandler<? super event-class> value )
 Event-Type
 The type of event that the handler processes (e.g. setOnKeyTyped,
setOnMouseClicked, ...)
 Event-class
 The class that defines the event type (e.g., KeyEvent , MouseEvent, ...)
 Value
 The event handler for event-class (or for one of its super classes)
 Must implement: public void handle(ActionEvent event)
 May be a regular class or an anonymous inline class
Example
A.A. 2014/2015Tecniche di programmazione63
class ButtonActionHandler implements
javafx.event.EventHandler<ActionEvent> {
public ButtonActionHandler (/*params*/) {
// constructor - if needed
}
@Override
public void handle(ActionEvent event) {
Button b = (Button)event.getSource() ;
//...do something
String buttonText = b.getText() ;
// ...
}
}
Button btn = new Button() ;
btn.setOnAction(new ButtonActionHandler()) ;
Event Handler
Registration
Example (inline definition)
A.A. 2014/2015Tecniche di programmazione64
btn.setOnAction(new EventHandler<ActionEvent>() {
public void handle(ActionEvent event) {
System.out.println("Hello World");
}
});
Registration &
Anonymous event handler
Model-View-Controller
JavaFX programming
Application complexity and MVC
A.A. 2014/2015Tecniche di programmazione66
 Interactive, graphical applications exhibit complex
interaction patterns
 Flow of control is in the hand of the user
 Actions are mainly asynchronous
 How to organize the program?
 Where to store data?
 How to decouple application logic from interface details?
 How to keep in sync the inner data with the visibile
interface?
Media Player example
A.A. 2014/2015Tecniche di programmazione67
MVC pattern defined
A.A. 2014/2015Tecniche di programmazione68
Normal life-cycle of interaction
A.A. 2014/2015Tecniche di programmazione69
Mapping concepts to JavaFX
A.A. 2014/2015Tecniche di programmazione70
 View: presenting the UI
 FXML
 The Nodes in the Scene Graph
 Controller: reacting to user actions
 Set of event handlers
 Model: handling the data
 Class(es) including data
 Persistent data in Data Bases
Design Exercise
A.A. 2014/2015Tecniche di programmazione71
 Imagine an application managing a list of items (e.g.,
names)
 Different items in the user interface should manage the
same set of data, with different criteria and actions
 Where do you declare the data class?
 Which class should have access to which?
 Who creates what objects?
A.A. 2014/2015Tecniche di programmazione72
A possible
solution
The Controller in FXML
JavaFX programming
The Controller in FXML
A.A. 2014/2015Tecniche di programmazione74
 Several attributes in FXML help in the definition of the
Controller behavior associated to a scene
 Identification of the Controller class
 Injection of Node identifiers (references)
 Registration of event handlers
 Additionally, the JavaFX Scene Builder may generate a
«controller skeleton» for inclusion in the project
Defining the Controller class
A.A. 2014/2015Tecniche di programmazione75
 The Root element of the scene
graph may specify a fx:
controller attribute
 <BorderPane
id="BorderPane"
xmlns:fx="http://javafx.com
/fxml"
fx:controller="it.polito.te
cnprogr.RuzzleController">
fx:controller attribute
A.A. 2014/2015Tecniche di programmazione76
 Associate a "controller" class with an FXML document
 Automatically create the instance when FXML is loaded
 Should include event handler methods
 May include an initialize() method
 public void initialize();
 called once when the contents of its associated document have
been completely loaded
 any necessary post-processing on the content
Accessing the controller instance
A.A. 2014/2015Tecniche di programmazione77
 The Application often needs to communicate with the
controller object
 E.g., to call setModel()
 FXMLLoader provides this information
URL location = getClass().getResource("example.fxml");
FXMLLoader fxmlLoader = new FXMLLoader(location);
Pane root = (Pane)fxmlLoader.load();
MyController controller =
(MyController)fxmlLoader.getController();
Injection of Node references
A.A. 2014/2015Tecniche di programmazione78
 The controller code may directly access various Nodes in
the associated scene graph
 The attribute @FXML associates a Node variable with
the corresponding node, with the same fx:id value as the
variable name
 No more error-prone «lookup» calls...
 Local variables in the controller instance
 Try:View | Show Sample Controller Skeleton on the
Scene Builder!
@FXML // fx:id="theTitle"
private Label theTitle;
Registration of Event Handlers
A.A. 2014/2015Tecniche di programmazione79
 In FXML, you may set a event handler
through attributes
 onAction, onKeyTyped, onMouseClicked,
... hundreds more ...
 The value should be the #name of a
method in the controller class
 With the right signature for the event
type
<Button fx:id="cercaBtn"
onAction="#doCercaParola"
text="Cerca" />
@FXML
void doCercaParola (
ActionEvent event ) {
Resources
Introduction to JavaFX
Resources
A.A. 2014/2015Tecniche di programmazione84
 Official
 http://www.oracle.com/us/technologies/java/fx/overview/index.
html
 http://www.oracle.com/technetwork/java/javafx/overview/index
.html
 Documents
 http://docs.oracle.com/javafx/
 http://docs.oracle.com/javafx/2/api/index.html
 Blogs
 http://fxexperience.com/
 http://www.learnjavafx.typepad.com/weblog/
 http://community.java.net/community/javafx
Resources
A.A. 2014/2015Tecniche di programmazione85
 API
 http://docs.oracle.com/javafx/2/api/index.html
 Slides/Tips
 http://www.slideshare.net/steveonjava/java-fx-20-a-developers-guide
 http://refcardz.dzone.com/refcardz/getting-started-javafx
 Tutorials/Articles
 http://docs.oracle.com/javafx/2/events/jfxpub-events.htm
 http://amyfowlersblog.wordpress.com/2011/06/02/javafx2-0-layout-a-
class-tour/
 Examples (Downloads)
 JavaFX Demos and Samples, at
http://www.oracle.com/technetwork/java/javase/downloads/jdk7-
downloads-1880260.html
Resources
A.A. 2014/2015Tecniche di programmazione86
 FXML Controller
 http://docs.oracle.com/javafx/2/api/javafx/fxml/doc-
files/introduction_to_fxml.html#controllers
 Charts
 Using JavaFX Charts tutorial:
http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm
 Books
 Head First Design Patterns, chapter 12
Resources
A.A. 2014/2015Tecniche di programmazione87
 Properties and Bindings
 http://docs.oracle.com/javafx/2/binding/jfxpub-binding.htm
 http://thierrywasyl.wordpress.com/2012/07/29/properties-and-
bindings-in-javafx/
Licenza d’uso
A.A. 2014/2015Tecniche di programmazione88
 Queste diapositive sono distribuite con licenza Creative Commons
“Attribuzione - Non commerciale - Condividi allo stesso modo (CC
BY-NC-SA)”
 Sei libero:
 di riprodurre, distribuire, comunicare al pubblico, esporre in pubblico,
rappresentare, eseguire e recitare quest'opera
 di modificare quest'opera
 Alle seguenti condizioni:
 Attribuzione — Devi attribuire la paternità dell'opera agli autori
originali e in modo tale da non suggerire che essi avallino te o il modo in
cui tu usi l'opera.
 Non commerciale — Non puoi usare quest'opera per fini
commerciali.
 Condividi allo stesso modo — Se alteri o trasformi quest'opera, o se
la usi per crearne un'altra, puoi distribuire l'opera risultante solo con una
licenza identica o equivalente a questa.
 http://creativecommons.org/licenses/by-nc-sa/3.0/

More Related Content

PDF
Programming with JavaFX
PDF
JavaFX in Action (devoxx'16)
PPTX
Jsf presentation
PDF
Securing JSF Applications Against the OWASP Top Ten
PDF
What You Need To Build Cool Enterprise Applications With JSF
PDF
Modernize Your Real-World Application with Eclipse 4 and JavaFX
PDF
Java server faces
ODP
A Complete Tour of JSF 2
Programming with JavaFX
JavaFX in Action (devoxx'16)
Jsf presentation
Securing JSF Applications Against the OWASP Top Ten
What You Need To Build Cool Enterprise Applications With JSF
Modernize Your Real-World Application with Eclipse 4 and JavaFX
Java server faces
A Complete Tour of JSF 2

What's hot (19)

PPT
JSF basics
PDF
Ctools presentation
PPT
Spring MVC
PPTX
Introduction to jsf 2
PDF
Web internship Yii Framework
PDF
From Backbone to Ember and Back(bone) Again
PPT
2 Day - WPF Training by Adil Mughal
PDF
Vaadin Components
PDF
Refactor Large applications with Backbone
PPT
Introduction to XAML and WPF
KEY
Jarv.us Showcase — SenchaCon 2011
PDF
當ZK遇見Front-End
PDF
DataFX 8 (JavaOne 2014)
PPTX
Svg, canvas e animations in angular (3 maggio 2019)
PDF
Angular JS blog tutorial
PPTX
Extend sdk
PDF
JSF 2.0 Preview
PDF
From Swing to JavaFX
JSF basics
Ctools presentation
Spring MVC
Introduction to jsf 2
Web internship Yii Framework
From Backbone to Ember and Back(bone) Again
2 Day - WPF Training by Adil Mughal
Vaadin Components
Refactor Large applications with Backbone
Introduction to XAML and WPF
Jarv.us Showcase — SenchaCon 2011
當ZK遇見Front-End
DataFX 8 (JavaOne 2014)
Svg, canvas e animations in angular (3 maggio 2019)
Angular JS blog tutorial
Extend sdk
JSF 2.0 Preview
From Swing to JavaFX
Ad

Viewers also liked (17)

PDF
Indicatori quantitativi per la valutazione dei processi
PDF
AmI 2015 - Design Process
PDF
AmI 2015 - Databases in Python
PDF
Definition of Ambient Intelligence
PDF
Gli anelli mancanti per l’Ambient Intelligence
PDF
Introduzione al Corso - Tecnologie per la Disabilità 2014/2015
PDF
Ausili: definizioni e normative - Tecnologie per la Disabilità 2014/2015
PDF
Ambient Intelligence Design Process
PDF
Ambient Intelligence - Course Introduction
PDF
Introduzione al Corso - Tecniche di Programmazione 2015
PDF
Accessibilità dei siti web
PDF
Ingegneri e disabilità: abbattere il muro
PDF
Ambient Intelligence: Theme of the Year 2016
PDF
A Healthcare Support System for Assisted Living Facilities: an IoT Solution
PDF
Ambient intelligence - an overview
PDF
Dates and Times in Java 7 and Java 8
PDF
Internet of Things - Cos'è e cosa ci posso fare?
Indicatori quantitativi per la valutazione dei processi
AmI 2015 - Design Process
AmI 2015 - Databases in Python
Definition of Ambient Intelligence
Gli anelli mancanti per l’Ambient Intelligence
Introduzione al Corso - Tecnologie per la Disabilità 2014/2015
Ausili: definizioni e normative - Tecnologie per la Disabilità 2014/2015
Ambient Intelligence Design Process
Ambient Intelligence - Course Introduction
Introduzione al Corso - Tecniche di Programmazione 2015
Accessibilità dei siti web
Ingegneri e disabilità: abbattere il muro
Ambient Intelligence: Theme of the Year 2016
A Healthcare Support System for Assisted Living Facilities: an IoT Solution
Ambient intelligence - an overview
Dates and Times in Java 7 and Java 8
Internet of Things - Cos'è e cosa ci posso fare?
Ad

Similar to Programming with JavaFX (20)

PDF
JavaFX programming
PDF
JavaFx Introduction, Basic JavaFx Architecture
PDF
JavaFXaeurwstkiryikryiuyoyiloyuikygi.pdf
PDF
Demo on JavaFX
PDF
Domain Driven Design
PPT
Unit 1 informatica en ingles
PPT
Unit i informatica en ingles
PDF
UNIT 5-JavaFX Event Handling, Controls and Components.pdf
PPT
GUI design using JAVAFX.ppt
PDF
JavaFX for Java Developers
PPTX
Introduction to JavaFX
PDF
The Brainify App - JavaFx
PPTX
JavaFX Presentation
PDF
Javafxpressentation 140524053934-phpapp01 (1)
PPTX
OpenJFX on Android and Devices
PDF
Introduction to JavaFX
PDF
Javafx tutorial
PDF
Javafx tutorial
PDF
Javafx tutorial
PDF
JavaOne - The JavaFX Community and Ecosystem
JavaFX programming
JavaFx Introduction, Basic JavaFx Architecture
JavaFXaeurwstkiryikryiuyoyiloyuikygi.pdf
Demo on JavaFX
Domain Driven Design
Unit 1 informatica en ingles
Unit i informatica en ingles
UNIT 5-JavaFX Event Handling, Controls and Components.pdf
GUI design using JAVAFX.ppt
JavaFX for Java Developers
Introduction to JavaFX
The Brainify App - JavaFx
JavaFX Presentation
Javafxpressentation 140524053934-phpapp01 (1)
OpenJFX on Android and Devices
Introduction to JavaFX
Javafx tutorial
Javafx tutorial
Javafx tutorial
JavaOne - The JavaFX Community and Ecosystem

Recently uploaded (20)

PPTX
Pharmacology of Heart Failure /Pharmacotherapy of CHF
PPTX
IMMUNITY IMMUNITY refers to protection against infection, and the immune syst...
PPTX
school management -TNTEU- B.Ed., Semester II Unit 1.pptx
PPTX
PPT- ENG7_QUARTER1_LESSON1_WEEK1. IMAGERY -DESCRIPTIONS pptx.pptx
PPTX
Final Presentation General Medicine 03-08-2024.pptx
PDF
O5-L3 Freight Transport Ops (International) V1.pdf
PPTX
Introduction-to-Literarature-and-Literary-Studies-week-Prelim-coverage.pptx
PDF
grade 11-chemistry_fetena_net_5883.pdf teacher guide for all student
PPTX
Cell Structure & Organelles in detailed.
PDF
Chinmaya Tiranga quiz Grand Finale.pdf
PDF
3rd Neelam Sanjeevareddy Memorial Lecture.pdf
PDF
Microbial disease of the cardiovascular and lymphatic systems
PPTX
Cell Types and Its function , kingdom of life
PDF
Classroom Observation Tools for Teachers
PPTX
human mycosis Human fungal infections are called human mycosis..pptx
PDF
OBE - B.A.(HON'S) IN INTERIOR ARCHITECTURE -Ar.MOHIUDDIN.pdf
PDF
Computing-Curriculum for Schools in Ghana
PPTX
202450812 BayCHI UCSC-SV 20250812 v17.pptx
PDF
Abdominal Access Techniques with Prof. Dr. R K Mishra
PDF
Complications of Minimal Access Surgery at WLH
Pharmacology of Heart Failure /Pharmacotherapy of CHF
IMMUNITY IMMUNITY refers to protection against infection, and the immune syst...
school management -TNTEU- B.Ed., Semester II Unit 1.pptx
PPT- ENG7_QUARTER1_LESSON1_WEEK1. IMAGERY -DESCRIPTIONS pptx.pptx
Final Presentation General Medicine 03-08-2024.pptx
O5-L3 Freight Transport Ops (International) V1.pdf
Introduction-to-Literarature-and-Literary-Studies-week-Prelim-coverage.pptx
grade 11-chemistry_fetena_net_5883.pdf teacher guide for all student
Cell Structure & Organelles in detailed.
Chinmaya Tiranga quiz Grand Finale.pdf
3rd Neelam Sanjeevareddy Memorial Lecture.pdf
Microbial disease of the cardiovascular and lymphatic systems
Cell Types and Its function , kingdom of life
Classroom Observation Tools for Teachers
human mycosis Human fungal infections are called human mycosis..pptx
OBE - B.A.(HON'S) IN INTERIOR ARCHITECTURE -Ar.MOHIUDDIN.pdf
Computing-Curriculum for Schools in Ghana
202450812 BayCHI UCSC-SV 20250812 v17.pptx
Abdominal Access Techniques with Prof. Dr. R K Mishra
Complications of Minimal Access Surgery at WLH

Programming with JavaFX

  • 1. Programming with JavaFX Tecniche di Programmazione – A.A. 2014/2015
  • 2. Summary A.A. 2014/2015Tecniche di programmazione2 1. About and History 2. Basic concepts 3. Minimal JavaFX Application 4. Application structure 5. The Scene Graph 6. Events 7. Model-View-Controller 8. The Controller in FXML 9. Properties and bindings 10. Resources
  • 4. GUI in Java A.A. 2014/2015Tecniche di programmazione4  Graphic framework available in Java  Swing  Extremely powerful, many extensions available  Complex to master, requires low-level handling  Hard to create visually pleasing applications  Alternatives available  Most notable: SWT (Eclipse)  Still cumbersome to master  On a different Universe, web-based user interfaces became nicer and faster to create
  • 5. JavaFX 1.0 – forget it A.A. 2014/2015Tecniche di programmazione5  JavaFX 1 and JavaFX 2 are completely different  Version 1 relied on a “scripting language” to describe scenes, with ‘hooks’ to activate Java code  JavaFX 1.x is now deprecated
  • 6. JavaFX 2.x A.A. 2014/2015Tecniche di programmazione6  Redesigned from scratch  The JavaFX 2.x framework is entirely written in Java  For visual layout, an XML file may also be used (called FXML)  Graphic appearance borrows from web-standard CSS style sheets  UI programming is based on easy to handle events and bindings  Oracle plans to deprecate Swing in favor of JavaFX 2  Now called JavaFX 8 (after Java 8 – JDK 1.8)
  • 7. Getting and running JavaFX A.A. 2014/2015Tecniche di programmazione7  JavaFX is already included in Oracle JDK 7 and JDK8  Not in JDK 6.x  Not in OpenJDK (beware, Linux users!)  JDK 8 includes significant JavaFX improvements.  Recommended:  JavaFX Scene Builder  Eclipse: e(fx)clipse plugin, available in the Eclipse Marketplace  Download links are in the course webpage
  • 9. Key concepts in JavaFX A.A. 2014/2015Tecniche di programmazione9  Stage: where the application will be displayed (e.g., a Windows’ window)  Scene: one container of Nodes that compose one “page” of your application  Node: an element in the Scene, with a visual appearance and an interactive behavior. Nodes may be hierarchically nested My best friend is the JavaFX JavaDoc API http://docs.oracle.com/javase/8/javafx/api/
  • 10. Some ‘Leaf’ Nodes (Controls) A.A. 2014/2015Tecniche di programmazione10
  • 11. Some ‘Parent’ Nodes (Container ‘Panes’) A.A. 2014/2015Tecniche di programmazione11  BorderPane (5-areas)  Hbox,Vbox (linear sequence)  StackPane (overlay all children)  GridPane (row x columns)  FlowPane (flowing boxes, wrap around)  TilePane (flowpane with equally sized boxes)  AnchorPane (magnetically attach nodes at corners or sides)
  • 12. Some Nodes (Charts) A.A. 2014/2015Tecniche di programmazione12
  • 13. Nodes family A.A. 2014/2015Tecniche di programmazione13 javafx.scene.Node Parent Control ChoiceBox ComboBoxBase ColorPicker ComboBox Labeled ButtonBase Button CheckBox MenuButton ToggleButton Cell Label TitledPane ListView MenuBar Separator Slider TabPane TextInputControl TextArea TextField ToolBar TreeView Group Region Axis Chart Pane AnchorPane BorderPane FlowPane GridPane HBox StackPane TilePane VBox WebView Shape Arc Circle Line Polygon Polyline Rectangle Text Canvas Imageview Focus on Panes and Controls
  • 14. And more coming… A.A. 2014/2015Tecniche di programmazione14 http://jfxtras.org/
  • 15. And more coming… A.A. 2014/2015Tecniche di programmazione15 http://fxexperience.com/controlsfx/
  • 16. Empty JavaFX window A.A. 2014/2015Tecniche di programmazione16 public class Main extends Application { @Override public void start(Stage stage) { Group root = new Group(); // the root is Group or Pane Scene scene = new Scene(root, 500, 500, Color.BLACK); stage.setTitle("JavaFX Demo"); stage.setScene(scene); stage.show(); } public static void main(String[] args) { launch(args); } }
  • 17. Adding some shape A.A. 2014/2015Tecniche di programmazione17 public class Main extends Application { @Override public void start(Stage stage) { Group root = new Group(); Scene scene = new Scene(root, 500, 500, Color.BLACK); stage.setTitle("JavaFX Demo"); Rectangle rect = new Rectangle(25,25,250,250); r.setFill(Color.BLUE); root.getChildren().add(rect); stage.setScene(scene); stage.show(); } }
  • 18. How to add scene content A.A. 2014/2015Tecniche di programmazione18  In Java code  By creating and adding new Node subclasses  Standard way, in Java (boring and error-prone)  By using node Builder classes  Programming pattern, later on…  In FXML  By writing XML directly  By using the Scene Editor  And loading the FXML into the application
  • 19. JavaFX Scene Builder 2.0 A.A. 2014/2015Tecniche di programmazione19
  • 20. FXML fragment A.A. 2014/2015Tecniche di programmazione20 . . . <HBox id="HBox" alignment="CENTER" spacing="15.0" AnchorPane.rightAnchor="23.0" AnchorPane.topAnchor="22.0"> <children> <Button id="button1" fx:id="newIssue" onAction="#newIssueFired" text="New" /> <Button id="button2" fx:id="saveIssue" onAction="#saveIssueFired" text="Save" /> <Button id="button3" fx:id="deleteIssue" onAction="#deleteIssueFired" text="Delete" /> </children> </HBox> <ImageView id="IssueTrackingLite" layoutX="14.0" layoutY="20.0"> <image> <Image url="@IssueTrackingLite.png" preserveRatio="true" smooth="true" /> </image> </ImageView> . . .
  • 21. Building a scene from FXML A.A. 2014/2015Tecniche di programmazione21 public void start(Stage stage) throws Exception { Parent root = FXMLLoader.load( getClass().getResource("circle.fxml")); stage.setTitle("Circle Demo"); stage.setScene(new Scene(root, 500, 150)); stage.show(); }
  • 23. Separation of concerns A.A. 2014/2015Tecniche di programmazione23
  • 24. Typical Class Diagram A.A. 2014/2015Tecniche di programmazione25
  • 25. General rules A.A. 2014/2015Tecniche di programmazione26  A JavaFX application extends javafx.application.Application  The main() method should call Application.launch()  The start() method is the main entry point for all JavaFX applications  Called with a Stage connected to the Operating System’s window  The content of the scene is represented as a hierarchical scene graph of nodes  Stage is the top-level JavaFX container  Scene is the container for all content
  • 26. Minimal example A.A. 2014/2015Tecniche di programmazione27 public class HelloWorld extends Application { public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) { primaryStage.setTitle("Hello World!"); StackPane root = new StackPane(); Button btn = new Button(); btn.setText("Say 'Hello World'"); root.getChildren().add(btn); primaryStage.setScene(new Scene(root, 300, 250)); primaryStage.show(); } }
  • 27. Stage vs. Scene javafx.stage.Stage javafx.scene.Scene A.A. 2014/2015Tecniche di programmazione28  The JavaFX Stage class is the top level JavaFX container.  The primary Stage is constructed by the platform.  Additional Stage objects may be constructed by the application.  A stage can optionally have an owner Window.  The container for all content in a scene graph  The application must specify the root Node for the scene graph  Root may be Group (clips), Region, Control (resizes)  If no initial size is specified, it will automatically compute it
  • 28. Nodes A.A. 2014/2015Tecniche di programmazione29  The Scene is populated with a tree of Nodes  Layout components  UI Controls  Charts  Shapes  Nodes have Properties  Visual (size, position, z-order, color, ...)  Contents (text, value, data sets, ...)  Programming (event handlers, controller)  Nodes generate Events  UI events  Nodes can be styled with CSS
  • 29. Events A.A. 2014/2015Tecniche di programmazione30  FX Event (javafx.event.Event):  Event Source => a Node  Event Target  Event Type  Usually generated after some user action  ActionEvent,TreeModificationEvent, InputEvent, ListView.E ditEvent, MediaErrorEvent,TableColumn.CellEditEvent,Tre eItem.TreeModificationEvent,TreeView.EditEvent,WebEve nt,WindowEvent,WorkerStateEvent  You can define event handlers in your application
  • 30. Properties A.A. 2014/2015Tecniche di programmazione31  Extension of the Java Beans convention  May be used also outside JavaFX  Encapsulate properties of an object  Different types (string, number, object, collection, ...)  Set/Get  Observe changes  Supports lazy evaluation  Each Node has a large set of Properties
  • 31. Bindings A.A. 2014/2015Tecniche di programmazione32  Automatically connect («bind») one Property to another Property  Whenever the source property changes, the bound one is automatically updated  Multiple bindings are supported  Lazy evaluation is supported  Bindings may also involve computations (arithmetic operators, if-then-else, string concatenation, ...) that are automatically evaluated  May be used to automate UI  May be used to connect the Model with theView
  • 33. Nodes A.A. 2014/2015Tecniche di programmazione34  Root node: top level container  Intermediate nodes:  Containers  Layout managers  UI Composite controls  Leaf (terminal) nodes:  Shapes  UI Controls  Organized as a Hierarchical tree
  • 34. Nodes family A.A. 2014/2015Tecniche di programmazione35 javafx.scene.Node Parent Control ChoiceBox ComboBoxBase ColorPicker ComboBox Labeled ButtonBase Button CheckBox MenuButton ToggleButton Cell Label TitledPane ListView MenuBar Slider TabPane TextInputControl TextArea TextField ToolBar TreeView Group Region Axis Chart Pane AnchorPane BorderPane FlowPane GridPane HBox StackPane TilePane VBox WebView Shape Arc Circle Line Polygon Rectangle Text Canvas Imageview JavaDoc is your friend Focus on Panes and Controls
  • 35. Exploring Controls and Examples A.A. 2014/2015Tecniche di programmazione36  JavaFX Ensemble demo application  Download from Oracle site: JavaFX Demos and Samples Downloads  Run Ensemble.jnlp
  • 36. UI Form Controls A.A. 2014/2015Tecniche di programmazione37  Controls may be combined to construct «Forms»  Control Nodes have a value property  May be linked to application code  Control Nodes generate UI Events  Button:ActionEvent  Text: ActionEvent, KeyTyped, KeyPressed, MouseClicked, ...
  • 37. A.A. 2014/2015Tecniche di programmazione38
  • 38. Layout Class Hierarchy A.A. 2014/2015Tecniche di programmazione39  Group:  Doesn’t perform any positioning of children.  To statically assemble a collection of nodes in fixed positions  To apply an effect or transform to that collection.  Region:  base class for all general purpose layout panes  resizable and stylable via CSS  Supports dynamic layout by sizing and positioning children  Control:  the base class for all skinnable controls  resizable and subclasses are all stylable via CSS  Controls delegate layout to their skins (which are Regions)  Each layout Control subclass provides API for adding content in the appropriate place within its skin  you do not add children to a control directly.
  • 39. A.A. 2014/2015Tecniche di programmazione40
  • 40. A.A. 2014/2015Tecniche di programmazione41
  • 41. A.A. 2014/2015Tecniche di programmazione42
  • 42. A.A. 2014/2015Tecniche di programmazione43
  • 43. A.A. 2014/2015Tecniche di programmazione44
  • 44. A.A. 2014/2015Tecniche di programmazione45
  • 45. A.A. 2014/2015Tecniche di programmazione46
  • 46. A.A. 2014/2015Tecniche di programmazione47
  • 47. Creating the Scene Graph A.A. 2014/2015Tecniche di programmazione48  The Java way  Create Control Nodes  Set properties to new nodes  Add new nodes to parent node  With Constructors and/or with Builders  The FXML way  Create a FXML file  Define Nodes and Properties in FXML  Load the FXML  (Optionally, add new nodes/properties the Java way)
  • 48. Example: one text input field A.A. 2014/2015Tecniche di programmazione49 TextField text = new TextField("Text"); text.setMaxSize(140, 20); root.getChildren().add(text); TextField text = TextFieldBuilder().create() .maxHeight(20).maxWidth(140) .text("Text") .build() ; root.getChildren().add(text); Constructors Builders
  • 49. A.A. 2014/2015Tecniche di programmazione50 public class HelloDevoxx extends Application { public static void main(String[] args) { launch(args); } @Override public void start(Stage primaryStage) { primaryStage.setTitle("Hello Devoxx"); Group root = new Group(); Scene scene = new Scene(root, 400, 250, Color.ALICEBLUE); Text text = new Text(); text.setX(105); text.setY(120); text.setFont(new Font(30)); text.setText("Hello Devoxx"); root.getChildren().add(text); primaryStage.setScene(scene); primaryStage.show(); } }
  • 50. A.A. 2014/2015Tecniche di programmazione51 public void start(Stage primaryStage) { primaryStage.setTitle("Hello Devoxx"); primaryStage.setScene(SceneBuilder.create() .width(400).height(250).fill(Color.ALICEBLUE) .root(GroupBuilder.create().children( TextBuilder.create() .x(105).y(120) .text("Hello Devoxx") .font(new Font(30)).build() ).build() ).build()); primaryStage.show(); }
  • 51. The FXML way... A.A. 2014/2015Tecniche di programmazione52  XML-based format  Nested tree of XML Elements, corresponding to Nodes  XML Attributes corresponding to (initial) properties of nodes  JavaFX Scene Builder is a GUI for creating FXML files  The FXMLLoader class reads a FXML file and creates all the Nodes
  • 53. JavaFX Scene Builder A.A. 2014/2015Tecniche di programmazione54
  • 54. FXMLLoader A.A. 2014/2015Tecniche di programmazione55 @Override public void start(Stage stage) throws Exception { Parent root = FXMLLoader.load( getClass().getResource("fxml_example.fxml")); stage.setTitle("FXML Welcome"); stage.setScene(new Scene(root, 300, 275)); stage.show(); }
  • 55. Linking FXML and Java A.A. 2014/2015Tecniche di programmazione56  FXML element may have an associated attribute fx:id  Nodes may be later retrieved by  public Node lookup(java.lang.String selector)  Finds a node with a specified ID in the current sub-tree  Example:  scene.lookup("#myId");  Node references can also be «injected» using the @FXML annotation (see later)
  • 57. Interacting with Nodes A.A. 2014/2015Tecniche di programmazione58  In JavaFX applications, events are notifications that something has happened.  An event represents an occurrence of something of interest to the application  As a user clicks a button, presses a key, moves a mouse, or performs other actions, events are dispatched.  Registered event filters and event handlers within the application  receive the event and  provide a response.
  • 58. What is an event? A.A. 2014/2015Tecniche di programmazione59
  • 59. Event propagation A.A. 2014/2015Tecniche di programmazione60  Events are generated on the source node  Events propagated in the scene graph hierarchy («dispatch chain»), in two phases  Dispatching: downwards, from root to source node  Processes Event Filters registered in the nodes  Bubbling: upwards, from source node to root  Processes Event Handlers registered in the nodes  If you want an application to be notified when an event occurs, register a filter or a handler for the event  Handlers may “consume” the event
  • 60. Event Handlers A.A. 2014/2015Tecniche di programmazione61  Implements the EventHandler interface  Executed during the event bubbling phase.  If does not consume the event, it is propagated to the parent.  A node can register more than one handler.  Handlers for a specific event type are executed before handlers for generic event types.  For example, a handler for the KeyEvent.KEY_TYPED event is called before the handler for the InputEvent.ANY event.  To consume an event, call the consume() method
  • 61. Registering Event Handlers A.A. 2014/2015Tecniche di programmazione62  setOnEvent-type( EventHandler<? super event-class> value )  Event-Type  The type of event that the handler processes (e.g. setOnKeyTyped, setOnMouseClicked, ...)  Event-class  The class that defines the event type (e.g., KeyEvent , MouseEvent, ...)  Value  The event handler for event-class (or for one of its super classes)  Must implement: public void handle(ActionEvent event)  May be a regular class or an anonymous inline class
  • 62. Example A.A. 2014/2015Tecniche di programmazione63 class ButtonActionHandler implements javafx.event.EventHandler<ActionEvent> { public ButtonActionHandler (/*params*/) { // constructor - if needed } @Override public void handle(ActionEvent event) { Button b = (Button)event.getSource() ; //...do something String buttonText = b.getText() ; // ... } } Button btn = new Button() ; btn.setOnAction(new ButtonActionHandler()) ; Event Handler Registration
  • 63. Example (inline definition) A.A. 2014/2015Tecniche di programmazione64 btn.setOnAction(new EventHandler<ActionEvent>() { public void handle(ActionEvent event) { System.out.println("Hello World"); } }); Registration & Anonymous event handler
  • 65. Application complexity and MVC A.A. 2014/2015Tecniche di programmazione66  Interactive, graphical applications exhibit complex interaction patterns  Flow of control is in the hand of the user  Actions are mainly asynchronous  How to organize the program?  Where to store data?  How to decouple application logic from interface details?  How to keep in sync the inner data with the visibile interface?
  • 66. Media Player example A.A. 2014/2015Tecniche di programmazione67
  • 67. MVC pattern defined A.A. 2014/2015Tecniche di programmazione68
  • 68. Normal life-cycle of interaction A.A. 2014/2015Tecniche di programmazione69
  • 69. Mapping concepts to JavaFX A.A. 2014/2015Tecniche di programmazione70  View: presenting the UI  FXML  The Nodes in the Scene Graph  Controller: reacting to user actions  Set of event handlers  Model: handling the data  Class(es) including data  Persistent data in Data Bases
  • 70. Design Exercise A.A. 2014/2015Tecniche di programmazione71  Imagine an application managing a list of items (e.g., names)  Different items in the user interface should manage the same set of data, with different criteria and actions  Where do you declare the data class?  Which class should have access to which?  Who creates what objects?
  • 71. A.A. 2014/2015Tecniche di programmazione72 A possible solution
  • 72. The Controller in FXML JavaFX programming
  • 73. The Controller in FXML A.A. 2014/2015Tecniche di programmazione74  Several attributes in FXML help in the definition of the Controller behavior associated to a scene  Identification of the Controller class  Injection of Node identifiers (references)  Registration of event handlers  Additionally, the JavaFX Scene Builder may generate a «controller skeleton» for inclusion in the project
  • 74. Defining the Controller class A.A. 2014/2015Tecniche di programmazione75  The Root element of the scene graph may specify a fx: controller attribute  <BorderPane id="BorderPane" xmlns:fx="http://javafx.com /fxml" fx:controller="it.polito.te cnprogr.RuzzleController">
  • 75. fx:controller attribute A.A. 2014/2015Tecniche di programmazione76  Associate a "controller" class with an FXML document  Automatically create the instance when FXML is loaded  Should include event handler methods  May include an initialize() method  public void initialize();  called once when the contents of its associated document have been completely loaded  any necessary post-processing on the content
  • 76. Accessing the controller instance A.A. 2014/2015Tecniche di programmazione77  The Application often needs to communicate with the controller object  E.g., to call setModel()  FXMLLoader provides this information URL location = getClass().getResource("example.fxml"); FXMLLoader fxmlLoader = new FXMLLoader(location); Pane root = (Pane)fxmlLoader.load(); MyController controller = (MyController)fxmlLoader.getController();
  • 77. Injection of Node references A.A. 2014/2015Tecniche di programmazione78  The controller code may directly access various Nodes in the associated scene graph  The attribute @FXML associates a Node variable with the corresponding node, with the same fx:id value as the variable name  No more error-prone «lookup» calls...  Local variables in the controller instance  Try:View | Show Sample Controller Skeleton on the Scene Builder! @FXML // fx:id="theTitle" private Label theTitle;
  • 78. Registration of Event Handlers A.A. 2014/2015Tecniche di programmazione79  In FXML, you may set a event handler through attributes  onAction, onKeyTyped, onMouseClicked, ... hundreds more ...  The value should be the #name of a method in the controller class  With the right signature for the event type <Button fx:id="cercaBtn" onAction="#doCercaParola" text="Cerca" /> @FXML void doCercaParola ( ActionEvent event ) {
  • 80. Resources A.A. 2014/2015Tecniche di programmazione84  Official  http://www.oracle.com/us/technologies/java/fx/overview/index. html  http://www.oracle.com/technetwork/java/javafx/overview/index .html  Documents  http://docs.oracle.com/javafx/  http://docs.oracle.com/javafx/2/api/index.html  Blogs  http://fxexperience.com/  http://www.learnjavafx.typepad.com/weblog/  http://community.java.net/community/javafx
  • 81. Resources A.A. 2014/2015Tecniche di programmazione85  API  http://docs.oracle.com/javafx/2/api/index.html  Slides/Tips  http://www.slideshare.net/steveonjava/java-fx-20-a-developers-guide  http://refcardz.dzone.com/refcardz/getting-started-javafx  Tutorials/Articles  http://docs.oracle.com/javafx/2/events/jfxpub-events.htm  http://amyfowlersblog.wordpress.com/2011/06/02/javafx2-0-layout-a- class-tour/  Examples (Downloads)  JavaFX Demos and Samples, at http://www.oracle.com/technetwork/java/javase/downloads/jdk7- downloads-1880260.html
  • 82. Resources A.A. 2014/2015Tecniche di programmazione86  FXML Controller  http://docs.oracle.com/javafx/2/api/javafx/fxml/doc- files/introduction_to_fxml.html#controllers  Charts  Using JavaFX Charts tutorial: http://docs.oracle.com/javafx/2/charts/jfxpub-charts.htm  Books  Head First Design Patterns, chapter 12
  • 83. Resources A.A. 2014/2015Tecniche di programmazione87  Properties and Bindings  http://docs.oracle.com/javafx/2/binding/jfxpub-binding.htm  http://thierrywasyl.wordpress.com/2012/07/29/properties-and- bindings-in-javafx/
  • 84. Licenza d’uso A.A. 2014/2015Tecniche di programmazione88  Queste diapositive sono distribuite con licenza Creative Commons “Attribuzione - Non commerciale - Condividi allo stesso modo (CC BY-NC-SA)”  Sei libero:  di riprodurre, distribuire, comunicare al pubblico, esporre in pubblico, rappresentare, eseguire e recitare quest'opera  di modificare quest'opera  Alle seguenti condizioni:  Attribuzione — Devi attribuire la paternità dell'opera agli autori originali e in modo tale da non suggerire che essi avallino te o il modo in cui tu usi l'opera.  Non commerciale — Non puoi usare quest'opera per fini commerciali.  Condividi allo stesso modo — Se alteri o trasformi quest'opera, o se la usi per crearne un'altra, puoi distribuire l'opera risultante solo con una licenza identica o equivalente a questa.  http://creativecommons.org/licenses/by-nc-sa/3.0/