JavaOne 2011 Progressive JavaFX 2.0 Custom Components

72
Peter Pilgrim Oracle Java Champion 10/15/2011 XeNoNiQUe.co.uk (c) 2011 1

Transcript of JavaOne 2011 Progressive JavaFX 2.0 Custom Components

Page 1: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

Peter Pilgrim Oracle Java Champion

10/15/2011 XeNoNiQUe.co.uk (c) 2011 1

Page 2: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

10/15/2011 XeNoNiQUe.co.uk (c) 2011 2

Blog: www.XeNoNiQUe.co.uk/blog/

Industry: Financial Services, London, UK

Education: London South Bank University

Languages: Scala, Java, Groovy, Clojure

Conferences: JavaOne, ACCU, QCon, Devoxx

Page 3: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

10/15/2011 XeNoNiQUe.co.uk (c) 2011 3

“At the end of the day, on the one

hand we have computer systems,

and on the other, people. Connecting

them together, and allowing people

to interact with computer systems in

a compelling way, requires graphical

user interfaces Chris Oliver, Creator of F3

http://blogs.oracle.com/chrisoliver/entry/epitaph

Page 4: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

Headline News

“Something that no one has mentioned and surprises me very much is that JavaFX 2.0 will only be supported on Windows...” - Max Katz, March 2011

“The major difference in the new version is that it provides Java APIs for JavaFX, allowing you to use JavaFX from within your normal Java applications” - James Sugrue, JavaLobby, May 2011

“You can write Pivot applications in Java or any other JVM language (you are not limited to JavaFX Script). ” – Greg Brown, Apache Pivot, Mailing List, Sept 2010

10/15/2011 XeNoNiQUe.co.uk (c) 2011 4

Page 5: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

10/15/2011 XeNoNiQUe.co.uk (c) 2011 5

Demo

Page 6: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

The Plan

What is a component?

What types of component?

How does binding work?

Design Adaptive Process

Future Work

10/15/2011 XeNoNiQUe.co.uk (c) 2011 6

Page 7: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

JavaFX

2.0

10/15/2011 XeNoNiQUe.co.uk (c) 2011 7

Page 8: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

10/15/2011 XeNoNiQUe.co.uk (c) 2011 8

The Basics

Page 9: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

The Scene-graph is King.

10/15/2011 XeNoNiQUe.co.uk (c) 2011 9

Page 10: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

Customers want applications

that work like today’s popular

mobile devices.

10/15/2011 XeNoNiQUe.co.uk (c) 2011 10

Page 11: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

JavaFX forms, controls and

layouts provide reinvestment .

10/15/2011 XeNoNiQUe.co.uk (c) 2011 11

Page 12: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

The Java platform is proven

10/15/2011 XeNoNiQUe.co.uk (c) 2011 12

Page 13: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

We know how to make Java

run fast and it will get faster.

10/15/2011 XeNoNiQUe.co.uk (c) 2011 13

Page 14: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

10/15/2011 XeNoNiQUe.co.uk (c) 2011 14

Demo

Page 15: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

How much work must we do

to reinvigorate a platform?

10/15/2011 XeNoNiQUe.co.uk (c) 2011 15

Page 16: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

Java Virtual Machine is the

crown jewels

10/15/2011 XeNoNiQUe.co.uk (c) 2011 16

Page 17: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

JavaFX is written in Java,

Java runs on the JVM

10/15/2011 XeNoNiQUe.co.uk (c) 2011 17

Page 18: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

Every Node …

Every Node can have a clip node

Effectively generate a bitmap mask

Easy to create a “PortHole” widget

Invert the selection of the clip node, you

can create a “Punch” out widget

10/15/2011 XeNoNiQUe.co.uk (c) 2011 18

Page 19: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

10/15/2011 XeNoNiQUe.co.uk (c) 2011 19

Media

Image View

1

Image View

2

Image View

3

Image View

4

Page 20: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

10/15/2011 XeNoNiQUe.co.uk (c) 2011 20

Media Player

Media View

1

Media View

2

Media View

3

Media View

4

Media

Page 21: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

Breaking Glass

1. Divide a bounded area into four

triangles

2. Are we there yet?

3. For each triangle

A. Choose a random side and split it to two

rectangles

B. Recursive descend the two triangles (step

2)

10/15/2011 XeNoNiQUe.co.uk (c) 2011 21

Page 22: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

Express Yourself

10/15/2011 XeNoNiQUe.co.uk (c) 2011 22

Page 23: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

JavaFX Properties.

10/15/2011 XeNoNiQUe.co.uk (c) 2011 23

Page 24: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

Properties

Primitive Properties

Object Properties

FX List Collection Properties

10/15/2011 XeNoNiQUe.co.uk (c) 2011 24

Page 25: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

Listeners

Change Listener

Observable, old value, new value

Invalidation Listeners

Observable

10/15/2011 XeNoNiQUe.co.uk (c) 2011 25

Page 26: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

Property Listener Example

10/15/2011 XeNoNiQUe.co.uk (c) 2011 26

Page 27: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

Properties of Component

10/15/2011 XeNoNiQUe.co.uk (c) 2011 27

Page 28: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

Code Generate JavaFX

Properties

e.g. Groovy

10/15/2011 XeNoNiQUe.co.uk (c) 2011 28

Page 29: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

Hey Ho! This is all just to say:

var temparature: Integer = 23 on replace oldValue {

println(“temperature={temperarture},

oldValue={oldValue}”

}

// JavaFX Script 1.3

10/15/2011 XeNoNiQUe.co.uk (c) 2011 29

Page 30: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

JavaFX

Components

10/15/2011 XeNoNiQUe.co.uk (c) 2011 30

Page 31: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

A pad, a paper and a pen,

first!

10/15/2011 XeNoNiQUe.co.uk (c) 2011 31

Page 32: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

A JavaFX component is an

encapsulation that binds a

particular tree set of nodes with

the operations that act on those

nodes

10/15/2011 XeNoNiQUe.co.uk (c) 2011 32

Page 33: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

Component Types

Non-Resizable

javafx.scene.shape.Shape

javafx.scene.Group

Resizable

javafx.scene.layout.Pane

javafx.scene.layout.Region

javafx.scene.layout.Control

10/15/2011 XeNoNiQUe.co.uk (c) 2011 33

Page 34: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

Group based

Particularly using the JavaFX primitive

nodes under javafx.scene.shape.*;

Design is not meant to be resized

Layout is fixed at construction /

initialisation time

10/15/2011 XeNoNiQUe.co.uk (c) 2011 34

Page 35: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

Region based

Region is the sub class of

javafx.scene.Parent

Adds the ability to resize a node, layout

a particular set of children

10/15/2011 XeNoNiQUe.co.uk (c) 2011 35

Page 36: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

Control based

Allows particular subclass of Region that permits skinning of node with a stylesheet

You need 3 classes

The Control

java.scene.control.Control type

The Skinnable

java.scene.control.Skinnable

The Behaviour

com.sun.javafx.scene.control.BehaviorBase

10/15/2011 XeNoNiQUe.co.uk (c) 2011 36

Page 37: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

Control based

Allows particular subclass of Region that permits skinning of node with a stylesheet

Control is a direct type of Parent

You need 3 classes The Control

java.scene.control.Control type

The Skin

java.scene.control.Skin

java.scene.control.Skinnable

The Behaviour

com.sun.javafx.scene.control.Behavior

10/15/2011 XeNoNiQUe.co.uk (c) 2011 37

Page 38: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

Control based contd

See JFXtras.org for more examples of

skinnable components written for

JavaFX 2.0 beta 45

A Skin can be a Region (?)

com.sun.javafx.scene.control.BehaviorBase

com.sun.javafx.scene.control.SkinBase

10/15/2011 XeNoNiQUe.co.uk (c) 2011 38

Page 39: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

Layout Children Method

void layoutChildren()

Layout all of the children of a Region

based component

10/15/2011 XeNoNiQUe.co.uk (c) 2011 39

Page 40: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

Layout Children Method

void layoutChildren()

Layout all of the children of a Region based component

Compute the preferred width and height of the children (first)

May cache those values internally as part of the component or use Constraints

10/15/2011 XeNoNiQUe.co.uk (c) 2011 40

Page 41: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

Layout Boundaries

SDK will make a request to find out the

best width and height of your

component.

Your component must do the same for

its children

Implement at least compute pref width

and pref height methods!

10/15/2011 XeNoNiQUe.co.uk (c) 2011 41

Page 42: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

Layout Methods

10/15/2011 XeNoNiQUe.co.uk (c) 2011 42

Page 43: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

Pedantic Complete

Implement the other four methods too

computeMinWidth(v)

computeMinHeight(v)

computeMaxWidth(v)

computeMaxHeight(v)

10/15/2011 XeNoNiQUe.co.uk (c) 2011 43

Page 44: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

10/15/2011 XeNoNiQUe.co.uk (c) 2011 44

Demo

Page 45: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

10/15/2011 XeNoNiQUe.co.uk (c) 2011 45

Writing JavaFX

Containers

Page 46: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

Event Input on Node

Mouse Events fall under the pointer

iteraction (single)

Clicked, Entered, Exited, Pressed, Dragged,

Released, Wheel

Target Entered, Target Exited

Key Events

Clicked, Pressed, Released

10/15/2011 XeNoNiQUe.co.uk (c) 2011 46

Page 47: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

Event Input on Node

It is possible to consume an event and

stop it bubbling further down the

scenegraph hierarchy

You can block a component from event

interaction

Using clever tricks (opaque shape) you

can implement dialog / focus / modal

behaviour

10/15/2011 XeNoNiQUe.co.uk (c) 2011 47

Page 48: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

10/15/2011 XeNoNiQUe.co.uk (c) 2011 48

Layout Secrets

Page 49: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

Reuse SDK Methods

10/15/2011 XeNoNiQUe.co.uk (c) 2011 49

Page 50: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

Some SDK Methods

Region#layoutInArea()

Region#positionInArea()

Node#resize()

Node#resizeRelocate()

10/15/2011 XeNoNiQUe.co.uk (c) 2011 50

Page 51: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

10/15/2011 XeNoNiQUe.co.uk (c) 2011 51

Demo

Page 52: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

Tips

When Dragging a Node prefer to

translate (X,Y)

When Laying Out a Node prefer to set

the position with layoutX, layoutY

Given steady state conditions you can

swap layout (X,Y) for translation (X,Y)

10/15/2011 XeNoNiQUe.co.uk (c) 2011 52

Page 53: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

Tips 2

Use blocking boolean flags to prevent

conflict when you animating children in a

container

If you are unsure about MT concurrency

you can always use AtomicBoolean

Prefer JavaFX Properties

10/15/2011 XeNoNiQUe.co.uk (c) 2011 53

Page 54: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

Tools

10/15/2011 XeNoNiQUe.co.uk (c) 2011 54

Page 55: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

Tools

We badly need a JavaFX Property plug-

in for various IDE

Otherwise the Groovy script will do for

now

Scene Builder is coming

FXML is always

10/15/2011 XeNoNiQUe.co.uk (c) 2011 55

Page 56: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

Alternative JVM Languages

Still new to comment on the best

practice for writing component in other

languages other than Java

Consider using a Java interface

Prefer to use and expose JavaFX

Properties

Learn JavaFX against Java, First!

10/15/2011 XeNoNiQUe.co.uk (c) 2011 56

Page 57: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

Six Months, 2012 … Okay!

10/15/2011 XeNoNiQUe.co.uk (c) 2011 57

Page 58: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

Design

Think of JavaFX as a sophisticated

composition engine

á la PhotoShop without the pixel access

Learn U/I/X design from elsewhere

10/15/2011 XeNoNiQUe.co.uk (c) 2011 58

Page 59: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

Boagworld.com

10/15/2011 59 XeNoNiQUe.co.uk (c) 2011

Page 60: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

Books

10/15/2011 60 XeNoNiQUe.co.uk (c) 2011

Page 61: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

End Game

10/15/2011 XeNoNiQUe.co.uk (c) 2011 61

Page 62: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

Blow your toe off now!

10/15/2011 XeNoNiQUe.co.uk (c) 2011 62

Page 63: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

However, we are behind the

wave! Let us learn from the web

technologists and the mobile

app leaders and ran past them!

10/15/2011 XeNoNiQUe.co.uk (c) 2011 63

Page 64: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

Test JavaFX 2.0 User

Interface against your target

users BEFORE and AFTER

10/15/2011 XeNoNiQUe.co.uk (c) 2011 64

Page 65: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

Learn more

10/15/2011 XeNoNiQUe.co.uk (c) 2011 65

http://xenonique.co.uk/blog/

[email protected]

http://javafx.com/

twitter:peter_pilgrim

Page 66: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

Professional Services

10/15/2011 XeNoNiQUe.co.uk (c) 2011 66

[email protected]

JavaFX 2.0 in Enterprises

Contracting

Training with Consultancy

Technical Leadership

Page 67: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

Can I have a HIRES JavaFX logo

please?

A work in Progress

Source Code to be added

Demos to be completed in September

10/15/2011 XeNoNiQUe.co.uk (c) 2011 67

Page 68: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

Attributions

All images are Creative Commons (CC) License from Flickr.com

– “You must attribute the source and you cannot change the content”

Tim Ellis http://www.flickr.com/photos/tim_ellis/

Lego Basics http://www.flickr.com/photos/tim_ellis/338755101/sizes/l/

*PaysImaginaire* http://www.flickr.com/photos/nevrlndtink/

Variable Plastic Bag http://www.flickr.com/photos/nevrlndtink/232906118/sizes/m/

~Deiby http://www.flickr.com/photos/deiby/

Expression http://www.flickr.com/photos/deiby/5489382677/sizes/l/

Lisa Sinclair http://www.flickr.com/photos/plumandjello/

fruit http://www.flickr.com/photos/plumandjello/2333263539/sizes/l/

Nerovivo http://www.flickr.com/photos/dominik99/

http://www.flickr.com/photos/dominik99/407716865/sizes/z/in/photostream/

10/15/2011 XeNoNiQUe.co.uk (c) 2011 68

Page 69: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

Attributions

All images are Creative Commons (CC) License from Flickr.com

– “You must attribute the source and you cannot change the content”

.Guilty http://www.flickr.com/photos/roll_initiative/

Arbitrary Function Generator http://www.flickr.com/photos/roll_initiative/3278642272/

Loop Oh Rupert Grazer http://www.flickr.com/photos/loop_oh/

Pattern at the Senckenberg Museum in Frankfurt am Main / Germany.

http://www.flickr.com/photos/loop_oh/4571485915/

Lili Vieira de Carvalho, Vancouver, Canada http://www.flickr.com/people/lilivc/

Composition of Bowls http://www.flickr.com/photos/lilivc/367582911/sizes/l/

Mykl Roventine http://www.flickr.com/people/myklroventine/

19/365 Game Over http://www.flickr.com/photos/myklroventine/3210068573/sizes/l/

superciliousness / Bentley Smith http://www.flickr.com/people/superciliousness/

200510 carpenter's tools - inside the workman's shed - all his old tools

http://www.flickr.com/photos/superciliousness/57486288/

10/15/2011 XeNoNiQUe.co.uk (c) 2011 69

Page 70: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

Attributions

All images are Creative Commons (CC) License from Flickr.com

– “You must attribute the source and you cannot change the content”

You’ve got a fast car http://www.flickr.com/photos/coreforce/5910961411/

Core Force http://www.flickr.com/photos/coreforce/

GAME AT MARBLES http://www.flickr.com/photos/9619972@N08/928099769/sizes/l/in/photostream/

(Author unknown, from an antique children's boo

Lucs Game http://www.flickr.com/photos/9619972@N08/928099769/

just.Luc http://www.flickr.com/people/9619972@N08/

DIY Easel http://www.flickr.com/photos/68888883@N00/2744696593/in/photostream/

Judy of the Woods http://www.flickr.com/people/68888883@N00/

10/15/2011 XeNoNiQUe.co.uk (c) 2011 70

Page 71: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

Beyond Java Today

10/15/2011 71 XeNoNiQUe.co.uk (c) 2011

Page 72: JavaOne 2011 Progressive JavaFX 2.0 Custom Components

Beyond Java Future 2016?

10/15/2011 72 XeNoNiQUe.co.uk (c) 2011