SlideShare a Scribd company logo
1 of 42
Pro JavaFX – Developing Enterprise Applications Stephen Chin Inovis, Inc.
About the Presenter Director SWE, Inovis, Inc. Open-Source JavaFX Hacker MBA Belotti Award UberScrumMaster XP Coach Agile Evangelist WidgetFX JFXtras FEST-JavaFX Piccolo2D Java Champion JavaOneRockstar JUG Leader Pro JavaFX Author 2 Family Man Motorcyclist
LearnFX and Win at Devoxx Tweet to answer: @projavafxcourse your-answer-here 3
Enterprise JavaFX Agenda JFXtras Layouts and Controls Automated JavaFX Testing Sample Enterprise Applications 4 HttpRequest {   location: http://steveonjava.com/ onResponseMessage: function(m) { println(m); FX.exit() }}.start(); @projavafxcourse answer 4
5 JFXtras Layouts and Controls HttpRequest {   location: http://steveonjava.com/ onResponseMessage: function(m) { println(m); FX.exit() }}.start(); @projavafxcourse answer
JFXtras 0.6 Controls XCalendarPicker XMenu XMultiLineTextBox XPane XPasswordPane XPicker XScrollView XShelfView XSpinnerWheel XTableView XTreeView 6
XPicker Multiple Picker Types Side Scroll Drop Down Thumb Wheel Side/Thumb Nudge Supports All Events Mouse Clicks Mouse Wheel Keyboard 7
XCalendarPicker Configurable Locale Multiple Selection Modes Single Multiple Range Completely Skinnable 8
JFXtras Data Providers 9
XShelfView High Performance Features: Scrollbar Image Title Reflection Effect Aspect Ratio Infinite Repeat Integrates With JFXtras Data Providers Automatically Updates on Model Changes 10
XTreeView Hierarchical data representation Supports JFXtras Data Model Can add arbitrary nodes Vertical and horizontal scrollbars Mouse wheel navigation 11
XTableView Insanely Scalable Up to 16 million rows Extreme Performance Pools rendered nodes Caches images Optimized scene graph Features: Drag-and-Drop Column Reordering Dynamic Updating from Model Automatically Populates Column Headers Fully Styleablevia CSS 12
SpeedReaderFX Written by Jim Weaver Read News, Twitter, and RSS in one place! Showcases use of JFXtras Layouts and Controls XMenu XTableView XPicker Contributed back to the JFXtras Samples Project 13
JFXtras 0.6         Release Date: 11/23/2009 14 Open Source Project (BSD License) Join and help us out at: http://jfxtras.org/
15 Testing With FEST-JavaFX HttpRequest {   location: http://steveonjava.com/ onResponseMessage: function(m) { println(m); FX.exit() }}.start(); @projavafxcourse answer
16 Mike Cohn’s Testing Pyramid Robot (coming soon) BDD Fluent Assertions
Basic Test Format Test { say: "A sequence should initially be empty" do: function() { varsequence:String[];         return sequence.size();     } expect: equalTo(0) }.perform(); 17
Fluent Assertions lessThanOrCloseTo greaterThanOrCloseTo lessThanOrEqualTo greaterThanorEqualTo typeIs instanceOf anything is isNot equalTo closeTo greaterThan 18 Make sure to include this static import: ,[object Object],And then chain any of these assertions:
Fluent Assertion Examples isNot(null) isNot(closeTo(floor(i*1.5))) lessThanOrEqualTo(2.0) greaterThanOrCloseTo(123.10, 0.0100000) isNot(lessThanOrCloseTo(2.1435, 0.00011)) typeIs("org.jfxtras.test.UserXException") instanceOf(UserXException{}.getJFXClass()) 19
Testing Quiz: Which test will fail? 20 varseq = [1, 3, 5, 7, 9]; Test {     say: "ranges"     do: function() { seq[0..2]     }     expect: equalTo([1, 3, 5]) } Test {     say: "exclusive ends"     do: function() { seq[0..<2]     }     expect: equalTo([1, 3]) } Test {     say: "open ends"     do: function() { seq[2..]     }     expect: equalTo([5]) } Test {     say: "open exclusive ends"     do: function() { seq[2..<]     }     expect: equalTo([5, 7]) } 1 2 3 4
Parameterized Testing Test {     say: "A Calculator should" var calculator = Calculator {}     test: [         for (a in [0..9], b in [0..9]) {             Test {                 say: "add {a} + {b}"                 do: function() {calculator.add(a, b)}                 expect: equalTo("{a + b}")             }         }      ] }.perform(); 21
Parameterized Testing - Output test: A Calculator should add 0 + 0. test: A Calculator should add 0 + 1. test: A Calculator should add 0 + 2. test: A Calculator should add 0 + 3. test: A Calculator should add 0 + 4. test: A Calculator should add 0 + 5. test: A Calculator should add 0 + 6. test: A Calculator should add 0 + 7. test: A Calculator should add 0 + 8. test: A Calculator should add 0 + 9. test: A Calculator should add 1 + 0. ... Test Results: 100 passed, 0 failed, 0 skipped. Test run was successful! 22
Parameterized Testing with Assume Test {     say: "A Calculator should" var calculator = Calculator {}     test: [         for (aInt in [0..9], bInt in [1..9]) { var a = aInt as Number; var b = bInt as Number;             [                 Test { assume: that(a / b, closeTo(floor(a / b)))                     say: "divide {a} / {b} without a decimal"                     do: function() {calculator.divide(a, b)}                     expect: equalTo("{(a / b) as Integer}")                 },                 Test { assume: that(a / b, isNot(closeTo(floor(a / b))))                     say: "divide {a} / {b} with a decimal"                     do: function() {calculator.divide(a, b)}                     expect: equalTo("{a / b}")                 }             ]         }     ] }.perform(); 23
Parameterized Testing with Assume - Output test: A Calculator should divide 0.0 / 1.0 without a decimal. test: A Calculator should divide 0.0 / 2.0 without a decimal. test: A Calculator should divide 0.0 / 3.0 without a decimal. test: A Calculator should divide 0.0 / 4.0 without a decimal. test: A Calculator should divide 0.0 / 5.0 without a decimal. test: A Calculator should divide 0.0 / 6.0 without a decimal. test: A Calculator should divide 0.0 / 7.0 without a decimal. test: A Calculator should divide 0.0 / 8.0 without a decimal. test: A Calculator should divide 0.0 / 9.0 without a decimal. test: A Calculator should divide 1.0 / 1.0 without a decimal. test: A Calculator should divide 1.0 / 2.0 with a decimal. test: A Calculator should divide 1.0 / 3.0 with a decimal. test: A Calculator should divide 1.0 / 4.0 with a decimal. test: A Calculator should divide 1.0 / 5.0 with a decimal. test: A Calculator should divide 1.0 / 6.0 with a decimal. test: A Calculator should divide 1.0 / 7.0 with a decimal. test: A Calculator should divide 1.0 / 8.0 with a decimal. test: A Calculator should divide 1.0 / 9.0 with a decimal. ... Test Results: 90 passed, 0 failed, 90 skipped. Test run was successful! 24
Run Tests in JUnitPart 1: Extend Test public class BasicTest extends Test {} public function run() {     Test {         say: "A sequence should initially be empty"         do: function() { varsequence:String[];             return sequence.size();         }         expect: equalTo(0)     }.perform(); } 25
Run Tests in JUnitPart 2: Create Ant Target 26 Run off classes dir Exclude inner classes <junitdir="${work.dir}"fork="true"showoutput="true"> <batchtesttodir="${build.test.results.dir}">         <filesetdir="${build.classes.dir}"excludes="**/*$*.class" includes=" **/*?Test.class"/> </batchtest> <classpathrefid="test.classpath"/> <formattertype="brief"usefile="false"/> <formattertype="xml"/> </junit> Include class files ending in Test
Run Tests in JUnitPart 3: Execute Ant Script 27
REST or SOAP – Have it your way! 28 Sample Enterprise Applications Soap bars in Lille, Northern France.  http://www.flickr.com/photos/gpwarlow/ / CC BY 2.0
Calling a REST Service REST URL: http://api.meetup.com/rsvps.json/event_id={eventId}&key={apiKey} Output: { "results": [   {"zip":"94044","lon":"-122.48999786376953","photo_url":"http:photos1.meetupstatic.comphotosmember14bamember_5333306.jpeg","response":"no","name":"Andres Almiray","comment":"Can't make it :-("} ]} 29
JUG Spinner - JSONHandler in 3 Steps public class Member {     public varplace:Integer;     public varphotoUrl:String;     public varname:String;     public varcomment:String; } varmemberParser:JSONHandler = JSONHandler {   rootClass: "org.jfxtras.jugspinner.data.MemberSearch “   onDone: function(obj, isSequence): Void {     members = (obj as MemberSearch).results; }} req = HttpRequest {   location: rsvpQuery onInput: function(is: java.io.InputStream) { memberParser.parse(is); }} 30 1 POJfxO 2 JSONHandler 3 HttpRequest
JUG Prize Spinner Demo 31 Featured in: Enterprise Web 2.0 Fundamentals By Oswald Campesato& Kevin Nilson
32 Enterprise Widget Tutorial
Use Case: Tracking Agile Development 33
Architecture: WidgetFX Framework Reasons for choosing WidgetFX: Supports Widgets in JavaFX and Java Commercial Friendly Open-Source Robust Security Model Cross-platform Support 34
Design: Using the Production Suite 1 35
Design: Using the Production Suite 2 36
Develop: Binding the Code to Graphics Add the FXZ to your project Right click and Generate UI stub Choose a filename and generate Construct a UI Node and add it to the Scene: varrallyWidgetUI:RallyWidgetUI = RallyWidgetUI{} 37
Develop: Calling SOAP From JavaFX Generate SOAP Stubs off WSDL: WSDL2Java -uriRally.wsdl-o src-p rallyws.api Create a new Service: rallyService= new RallyServiceServiceLocator().getRallyService(); Invoke the Service from Java or JavaFX: QueryResult result = rallyService.query(null, "Iteration", queryString, "Name", true, 0, 100); or JavaFX code: 38
RallyWidget Demo 39
JavaFXpert RIA Exemplar Challenge "Create an application in JavaFX that exemplifies the appearance and behavior of a next-generation enterprise RIA (rich internet application)". Grand Prize: $2,000 USD (split between a two-man graphics artist and application developer team) Deadline: 10 January, 2010 For more info: http://learnjavafx.typepad.com/ 40
LearnFX and Win at Devoxx 41
42 Thank You Stephen Chin http://steveonjava.com/ Tweet: steveonjava

More Related Content

What's hot

ZIO: Powerful and Principled Functional Programming in Scala
ZIO: Powerful and Principled Functional Programming in ScalaZIO: Powerful and Principled Functional Programming in Scala
ZIO: Powerful and Principled Functional Programming in ScalaWiem Zine Elabidine
 
Testing My Patience
Testing My PatienceTesting My Patience
Testing My PatienceAdam Lowry
 
Java_practical_handbook
Java_practical_handbookJava_practical_handbook
Java_practical_handbookManusha Dilan
 
Asynchronous JS in Odoo
Asynchronous JS in OdooAsynchronous JS in Odoo
Asynchronous JS in OdooOdoo
 
Creating Lazy stream in CSharp
Creating Lazy stream in CSharpCreating Lazy stream in CSharp
Creating Lazy stream in CSharpDhaval Dalal
 
Java PRACTICAL file
Java PRACTICAL fileJava PRACTICAL file
Java PRACTICAL fileRACHIT_GUPTA
 
Beginning PHPUnit
Beginning PHPUnitBeginning PHPUnit
Beginning PHPUnitJace Ju
 
Meck at erlang factory, london 2011
Meck at erlang factory, london 2011Meck at erlang factory, london 2011
Meck at erlang factory, london 2011Adam Lindberg
 
Concurrency, Scalability & Fault-tolerance 2.0 with Akka Actors & STM
Concurrency, Scalability & Fault-tolerance 2.0 with Akka Actors & STMConcurrency, Scalability & Fault-tolerance 2.0 with Akka Actors & STM
Concurrency, Scalability & Fault-tolerance 2.0 with Akka Actors & STMMario Fusco
 
jframe, jtextarea and jscrollpane
  jframe, jtextarea and jscrollpane  jframe, jtextarea and jscrollpane
jframe, jtextarea and jscrollpaneMr. Akaash
 
Chat application in java using swing and socket programming.
Chat application in java using swing and socket programming.Chat application in java using swing and socket programming.
Chat application in java using swing and socket programming.Kuldeep Jain
 
Advanced PHPUnit Testing
Advanced PHPUnit TestingAdvanced PHPUnit Testing
Advanced PHPUnit TestingMike Lively
 
Advanced Java - Praticals
Advanced Java - PraticalsAdvanced Java - Praticals
Advanced Java - PraticalsFahad Shaikh
 
Finagle and Java Service Framework at Pinterest
Finagle and Java Service Framework at PinterestFinagle and Java Service Framework at Pinterest
Finagle and Java Service Framework at PinterestPavan Chitumalla
 

What's hot (20)

How to fake_properly
How to fake_properlyHow to fake_properly
How to fake_properly
 
ZIO: Powerful and Principled Functional Programming in Scala
ZIO: Powerful and Principled Functional Programming in ScalaZIO: Powerful and Principled Functional Programming in Scala
ZIO: Powerful and Principled Functional Programming in Scala
 
Testing My Patience
Testing My PatienceTesting My Patience
Testing My Patience
 
Java_practical_handbook
Java_practical_handbookJava_practical_handbook
Java_practical_handbook
 
Spring hibernate jsf_primefaces_intergration
Spring hibernate jsf_primefaces_intergrationSpring hibernate jsf_primefaces_intergration
Spring hibernate jsf_primefaces_intergration
 
Asynchronous JS in Odoo
Asynchronous JS in OdooAsynchronous JS in Odoo
Asynchronous JS in Odoo
 
Creating Lazy stream in CSharp
Creating Lazy stream in CSharpCreating Lazy stream in CSharp
Creating Lazy stream in CSharp
 
Java PRACTICAL file
Java PRACTICAL fileJava PRACTICAL file
Java PRACTICAL file
 
Beginning PHPUnit
Beginning PHPUnitBeginning PHPUnit
Beginning PHPUnit
 
Spock framework
Spock frameworkSpock framework
Spock framework
 
Meck at erlang factory, london 2011
Meck at erlang factory, london 2011Meck at erlang factory, london 2011
Meck at erlang factory, london 2011
 
Concurrency, Scalability & Fault-tolerance 2.0 with Akka Actors & STM
Concurrency, Scalability & Fault-tolerance 2.0 with Akka Actors & STMConcurrency, Scalability & Fault-tolerance 2.0 with Akka Actors & STM
Concurrency, Scalability & Fault-tolerance 2.0 with Akka Actors & STM
 
Ad java prac sol set
Ad java prac sol setAd java prac sol set
Ad java prac sol set
 
inception.docx
inception.docxinception.docx
inception.docx
 
jframe, jtextarea and jscrollpane
  jframe, jtextarea and jscrollpane  jframe, jtextarea and jscrollpane
jframe, jtextarea and jscrollpane
 
Chat application in java using swing and socket programming.
Chat application in java using swing and socket programming.Chat application in java using swing and socket programming.
Chat application in java using swing and socket programming.
 
Zio from Home
Zio from Home Zio from Home
Zio from Home
 
Advanced PHPUnit Testing
Advanced PHPUnit TestingAdvanced PHPUnit Testing
Advanced PHPUnit Testing
 
Advanced Java - Praticals
Advanced Java - PraticalsAdvanced Java - Praticals
Advanced Java - Praticals
 
Finagle and Java Service Framework at Pinterest
Finagle and Java Service Framework at PinterestFinagle and Java Service Framework at Pinterest
Finagle and Java Service Framework at Pinterest
 

Viewers also liked

Raspberry Pi Gaming 4 Kids (Devoxx4Kids)
Raspberry Pi Gaming 4 Kids (Devoxx4Kids)Raspberry Pi Gaming 4 Kids (Devoxx4Kids)
Raspberry Pi Gaming 4 Kids (Devoxx4Kids)Stephen Chin
 
Confessions of a Former Agile Methodologist (JFrog Edition)
Confessions of a Former Agile Methodologist (JFrog Edition)Confessions of a Former Agile Methodologist (JFrog Edition)
Confessions of a Former Agile Methodologist (JFrog Edition)Stephen Chin
 
Oracle IoT Kids Workshop
Oracle IoT Kids WorkshopOracle IoT Kids Workshop
Oracle IoT Kids WorkshopStephen Chin
 
Devoxx4Kids NAO Workshop
Devoxx4Kids NAO WorkshopDevoxx4Kids NAO Workshop
Devoxx4Kids NAO WorkshopStephen Chin
 
Devoxx4Kids Lego Workshop
Devoxx4Kids Lego WorkshopDevoxx4Kids Lego Workshop
Devoxx4Kids Lego WorkshopStephen Chin
 
JavaFX and WidgetFX at SVCodeCamp
JavaFX and WidgetFX at SVCodeCampJavaFX and WidgetFX at SVCodeCamp
JavaFX and WidgetFX at SVCodeCampStephen Chin
 
JFXtras - JavaFX Controls, Layout, Services, and More
JFXtras - JavaFX Controls, Layout, Services, and MoreJFXtras - JavaFX Controls, Layout, Services, and More
JFXtras - JavaFX Controls, Layout, Services, and MoreStephen Chin
 

Viewers also liked (7)

Raspberry Pi Gaming 4 Kids (Devoxx4Kids)
Raspberry Pi Gaming 4 Kids (Devoxx4Kids)Raspberry Pi Gaming 4 Kids (Devoxx4Kids)
Raspberry Pi Gaming 4 Kids (Devoxx4Kids)
 
Confessions of a Former Agile Methodologist (JFrog Edition)
Confessions of a Former Agile Methodologist (JFrog Edition)Confessions of a Former Agile Methodologist (JFrog Edition)
Confessions of a Former Agile Methodologist (JFrog Edition)
 
Oracle IoT Kids Workshop
Oracle IoT Kids WorkshopOracle IoT Kids Workshop
Oracle IoT Kids Workshop
 
Devoxx4Kids NAO Workshop
Devoxx4Kids NAO WorkshopDevoxx4Kids NAO Workshop
Devoxx4Kids NAO Workshop
 
Devoxx4Kids Lego Workshop
Devoxx4Kids Lego WorkshopDevoxx4Kids Lego Workshop
Devoxx4Kids Lego Workshop
 
JavaFX and WidgetFX at SVCodeCamp
JavaFX and WidgetFX at SVCodeCampJavaFX and WidgetFX at SVCodeCamp
JavaFX and WidgetFX at SVCodeCamp
 
JFXtras - JavaFX Controls, Layout, Services, and More
JFXtras - JavaFX Controls, Layout, Services, and MoreJFXtras - JavaFX Controls, Layout, Services, and More
JFXtras - JavaFX Controls, Layout, Services, and More
 

Similar to Pro Java Fx – Developing Enterprise Applications

Tdd for BT E2E test community
Tdd for BT E2E test communityTdd for BT E2E test community
Tdd for BT E2E test communityKerry Buckley
 
Pi j1.3 operators
Pi j1.3 operatorsPi j1.3 operators
Pi j1.3 operatorsmcollison
 
Developer Tests - Things to Know (Vilnius JUG)
Developer Tests - Things to Know (Vilnius JUG)Developer Tests - Things to Know (Vilnius JUG)
Developer Tests - Things to Know (Vilnius JUG)vilniusjug
 
GeeCON 2012 Bad Tests, Good Tests
GeeCON 2012 Bad Tests, Good TestsGeeCON 2012 Bad Tests, Good Tests
GeeCON 2012 Bad Tests, Good TestsTomek Kaczanowski
 
Java căn bản - Chapter5
Java căn bản - Chapter5Java căn bản - Chapter5
Java căn bản - Chapter5Vince Vo
 
Confitura 2012 Bad Tests, Good Tests
Confitura 2012 Bad Tests, Good TestsConfitura 2012 Bad Tests, Good Tests
Confitura 2012 Bad Tests, Good TestsTomek Kaczanowski
 
How to write clean tests
How to write clean testsHow to write clean tests
How to write clean testsDanylenko Max
 
C-Sharp Arithmatic Expression Calculator
C-Sharp Arithmatic Expression CalculatorC-Sharp Arithmatic Expression Calculator
C-Sharp Arithmatic Expression CalculatorNeeraj Kaushik
 
ParallelProgrammingBasics_v2.pdf
ParallelProgrammingBasics_v2.pdfParallelProgrammingBasics_v2.pdf
ParallelProgrammingBasics_v2.pdfChen-Hung Hu
 
Code igniter unittest-part1
Code igniter unittest-part1Code igniter unittest-part1
Code igniter unittest-part1Albert Rosa
 
From typing the test to testing the type
From typing the test to testing the typeFrom typing the test to testing the type
From typing the test to testing the typeWim Godden
 
Developer Test - Things to Know
Developer Test - Things to KnowDeveloper Test - Things to Know
Developer Test - Things to Knowvilniusjug
 
Test Infected Presentation
Test Infected PresentationTest Infected Presentation
Test Infected Presentationwillmation
 
Software Testing - Invited Lecture at UNSW Sydney
Software Testing - Invited Lecture at UNSW SydneySoftware Testing - Invited Lecture at UNSW Sydney
Software Testing - Invited Lecture at UNSW Sydneyjulien.ponge
 
J unit presentation
J unit presentationJ unit presentation
J unit presentationPriya Sharma
 
How To Test Everything
How To Test EverythingHow To Test Everything
How To Test Everythingnoelrap
 

Similar to Pro Java Fx – Developing Enterprise Applications (20)

J Unit
J UnitJ Unit
J Unit
 
Tdd for BT E2E test community
Tdd for BT E2E test communityTdd for BT E2E test community
Tdd for BT E2E test community
 
Pi j1.3 operators
Pi j1.3 operatorsPi j1.3 operators
Pi j1.3 operators
 
Developer Tests - Things to Know (Vilnius JUG)
Developer Tests - Things to Know (Vilnius JUG)Developer Tests - Things to Know (Vilnius JUG)
Developer Tests - Things to Know (Vilnius JUG)
 
GeeCON 2012 Bad Tests, Good Tests
GeeCON 2012 Bad Tests, Good TestsGeeCON 2012 Bad Tests, Good Tests
GeeCON 2012 Bad Tests, Good Tests
 
Java căn bản - Chapter5
Java căn bản - Chapter5Java căn bản - Chapter5
Java căn bản - Chapter5
 
Confitura 2012 Bad Tests, Good Tests
Confitura 2012 Bad Tests, Good TestsConfitura 2012 Bad Tests, Good Tests
Confitura 2012 Bad Tests, Good Tests
 
How to write clean tests
How to write clean testsHow to write clean tests
How to write clean tests
 
Simple Java Programs
Simple Java ProgramsSimple Java Programs
Simple Java Programs
 
Simple Java Programs
Simple Java ProgramsSimple Java Programs
Simple Java Programs
 
C-Sharp Arithmatic Expression Calculator
C-Sharp Arithmatic Expression CalculatorC-Sharp Arithmatic Expression Calculator
C-Sharp Arithmatic Expression Calculator
 
ParallelProgrammingBasics_v2.pdf
ParallelProgrammingBasics_v2.pdfParallelProgrammingBasics_v2.pdf
ParallelProgrammingBasics_v2.pdf
 
Code igniter unittest-part1
Code igniter unittest-part1Code igniter unittest-part1
Code igniter unittest-part1
 
From typing the test to testing the type
From typing the test to testing the typeFrom typing the test to testing the type
From typing the test to testing the type
 
Developer Test - Things to Know
Developer Test - Things to KnowDeveloper Test - Things to Know
Developer Test - Things to Know
 
Test Infected Presentation
Test Infected PresentationTest Infected Presentation
Test Infected Presentation
 
Software Testing - Invited Lecture at UNSW Sydney
Software Testing - Invited Lecture at UNSW SydneySoftware Testing - Invited Lecture at UNSW Sydney
Software Testing - Invited Lecture at UNSW Sydney
 
J unit presentation
J unit presentationJ unit presentation
J unit presentation
 
JUnit Presentation
JUnit PresentationJUnit Presentation
JUnit Presentation
 
How To Test Everything
How To Test EverythingHow To Test Everything
How To Test Everything
 

More from Stephen Chin

DevOps Tools for Java Developers v2
DevOps Tools for Java Developers v2DevOps Tools for Java Developers v2
DevOps Tools for Java Developers v2Stephen Chin
 
10 Ways Everyone Can Support the Java Community
10 Ways Everyone Can Support the Java Community10 Ways Everyone Can Support the Java Community
10 Ways Everyone Can Support the Java CommunityStephen Chin
 
Java Clients and JavaFX: The Definitive Guide
Java Clients and JavaFX: The Definitive GuideJava Clients and JavaFX: The Definitive Guide
Java Clients and JavaFX: The Definitive GuideStephen Chin
 
DevOps Tools for Java Developers
DevOps Tools for Java DevelopersDevOps Tools for Java Developers
DevOps Tools for Java DevelopersStephen Chin
 
Java Clients and JavaFX - Presented to LJC
Java Clients and JavaFX - Presented to LJCJava Clients and JavaFX - Presented to LJC
Java Clients and JavaFX - Presented to LJCStephen Chin
 
RetroPi Handheld Raspberry Pi Gaming Console
RetroPi Handheld Raspberry Pi Gaming ConsoleRetroPi Handheld Raspberry Pi Gaming Console
RetroPi Handheld Raspberry Pi Gaming ConsoleStephen Chin
 
JavaFX on Mobile (by Johan Vos)
JavaFX on Mobile (by Johan Vos)JavaFX on Mobile (by Johan Vos)
JavaFX on Mobile (by Johan Vos)Stephen Chin
 
Raspberry Pi with Java (JJUG)
Raspberry Pi with Java (JJUG)Raspberry Pi with Java (JJUG)
Raspberry Pi with Java (JJUG)Stephen Chin
 
Confessions of a Former Agile Methodologist
Confessions of a Former Agile MethodologistConfessions of a Former Agile Methodologist
Confessions of a Former Agile MethodologistStephen Chin
 
Internet of Things Magic Show
Internet of Things Magic ShowInternet of Things Magic Show
Internet of Things Magic ShowStephen Chin
 
Zombie Time - JSR 310 for the Undead
Zombie Time - JSR 310 for the UndeadZombie Time - JSR 310 for the Undead
Zombie Time - JSR 310 for the UndeadStephen Chin
 
JCrete Embedded Java Workshop
JCrete Embedded Java WorkshopJCrete Embedded Java Workshop
JCrete Embedded Java WorkshopStephen Chin
 
OpenJFX on Android and Devices
OpenJFX on Android and DevicesOpenJFX on Android and Devices
OpenJFX on Android and DevicesStephen Chin
 
Java on Raspberry Pi Lab
Java on Raspberry Pi LabJava on Raspberry Pi Lab
Java on Raspberry Pi LabStephen Chin
 
Java 8 for Tablets, Pis, and Legos
Java 8 for Tablets, Pis, and LegosJava 8 for Tablets, Pis, and Legos
Java 8 for Tablets, Pis, and LegosStephen Chin
 
Raspberry Pi Gaming 4 Kids - Dutch Version
Raspberry Pi Gaming 4 Kids - Dutch VersionRaspberry Pi Gaming 4 Kids - Dutch Version
Raspberry Pi Gaming 4 Kids - Dutch VersionStephen Chin
 
Raspberry pi gaming 4 kids
Raspberry pi gaming 4 kidsRaspberry pi gaming 4 kids
Raspberry pi gaming 4 kidsStephen Chin
 
Mary Had a Little λ (QCon)
Mary Had a Little λ (QCon)Mary Had a Little λ (QCon)
Mary Had a Little λ (QCon)Stephen Chin
 
Raspberry Pi à la GroovyFX
Raspberry Pi à la GroovyFXRaspberry Pi à la GroovyFX
Raspberry Pi à la GroovyFXStephen Chin
 

More from Stephen Chin (20)

DevOps Tools for Java Developers v2
DevOps Tools for Java Developers v2DevOps Tools for Java Developers v2
DevOps Tools for Java Developers v2
 
10 Ways Everyone Can Support the Java Community
10 Ways Everyone Can Support the Java Community10 Ways Everyone Can Support the Java Community
10 Ways Everyone Can Support the Java Community
 
Java Clients and JavaFX: The Definitive Guide
Java Clients and JavaFX: The Definitive GuideJava Clients and JavaFX: The Definitive Guide
Java Clients and JavaFX: The Definitive Guide
 
DevOps Tools for Java Developers
DevOps Tools for Java DevelopersDevOps Tools for Java Developers
DevOps Tools for Java Developers
 
Java Clients and JavaFX - Presented to LJC
Java Clients and JavaFX - Presented to LJCJava Clients and JavaFX - Presented to LJC
Java Clients and JavaFX - Presented to LJC
 
RetroPi Handheld Raspberry Pi Gaming Console
RetroPi Handheld Raspberry Pi Gaming ConsoleRetroPi Handheld Raspberry Pi Gaming Console
RetroPi Handheld Raspberry Pi Gaming Console
 
JavaFX on Mobile (by Johan Vos)
JavaFX on Mobile (by Johan Vos)JavaFX on Mobile (by Johan Vos)
JavaFX on Mobile (by Johan Vos)
 
Raspberry Pi with Java (JJUG)
Raspberry Pi with Java (JJUG)Raspberry Pi with Java (JJUG)
Raspberry Pi with Java (JJUG)
 
Confessions of a Former Agile Methodologist
Confessions of a Former Agile MethodologistConfessions of a Former Agile Methodologist
Confessions of a Former Agile Methodologist
 
Internet of Things Magic Show
Internet of Things Magic ShowInternet of Things Magic Show
Internet of Things Magic Show
 
Zombie Time - JSR 310 for the Undead
Zombie Time - JSR 310 for the UndeadZombie Time - JSR 310 for the Undead
Zombie Time - JSR 310 for the Undead
 
JCrete Embedded Java Workshop
JCrete Embedded Java WorkshopJCrete Embedded Java Workshop
JCrete Embedded Java Workshop
 
OpenJFX on Android and Devices
OpenJFX on Android and DevicesOpenJFX on Android and Devices
OpenJFX on Android and Devices
 
Java on Raspberry Pi Lab
Java on Raspberry Pi LabJava on Raspberry Pi Lab
Java on Raspberry Pi Lab
 
Java 8 for Tablets, Pis, and Legos
Java 8 for Tablets, Pis, and LegosJava 8 for Tablets, Pis, and Legos
Java 8 for Tablets, Pis, and Legos
 
DukeScript
DukeScriptDukeScript
DukeScript
 
Raspberry Pi Gaming 4 Kids - Dutch Version
Raspberry Pi Gaming 4 Kids - Dutch VersionRaspberry Pi Gaming 4 Kids - Dutch Version
Raspberry Pi Gaming 4 Kids - Dutch Version
 
Raspberry pi gaming 4 kids
Raspberry pi gaming 4 kidsRaspberry pi gaming 4 kids
Raspberry pi gaming 4 kids
 
Mary Had a Little λ (QCon)
Mary Had a Little λ (QCon)Mary Had a Little λ (QCon)
Mary Had a Little λ (QCon)
 
Raspberry Pi à la GroovyFX
Raspberry Pi à la GroovyFXRaspberry Pi à la GroovyFX
Raspberry Pi à la GroovyFX
 

Recently uploaded

Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptxLBM Solutions
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 3652toLead Limited
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAndikSusilo4
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksSoftradix Technologies
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 

Recently uploaded (20)

Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
Key Features Of Token Development (1).pptx
Key  Features Of Token  Development (1).pptxKey  Features Of Token  Development (1).pptx
Key Features Of Token Development (1).pptx
 
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptxVulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
 
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
Tech-Forward - Achieving Business Readiness For Copilot in Microsoft 365
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Azure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & ApplicationAzure Monitor & Application Insight to monitor Infrastructure & Application
Azure Monitor & Application Insight to monitor Infrastructure & Application
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Benefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other FrameworksBenefits Of Flutter Compared To Other Frameworks
Benefits Of Flutter Compared To Other Frameworks
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 

Pro Java Fx – Developing Enterprise Applications

  • 1. Pro JavaFX – Developing Enterprise Applications Stephen Chin Inovis, Inc.
  • 2. About the Presenter Director SWE, Inovis, Inc. Open-Source JavaFX Hacker MBA Belotti Award UberScrumMaster XP Coach Agile Evangelist WidgetFX JFXtras FEST-JavaFX Piccolo2D Java Champion JavaOneRockstar JUG Leader Pro JavaFX Author 2 Family Man Motorcyclist
  • 3. LearnFX and Win at Devoxx Tweet to answer: @projavafxcourse your-answer-here 3
  • 4. Enterprise JavaFX Agenda JFXtras Layouts and Controls Automated JavaFX Testing Sample Enterprise Applications 4 HttpRequest { location: http://steveonjava.com/ onResponseMessage: function(m) { println(m); FX.exit() }}.start(); @projavafxcourse answer 4
  • 5. 5 JFXtras Layouts and Controls HttpRequest { location: http://steveonjava.com/ onResponseMessage: function(m) { println(m); FX.exit() }}.start(); @projavafxcourse answer
  • 6. JFXtras 0.6 Controls XCalendarPicker XMenu XMultiLineTextBox XPane XPasswordPane XPicker XScrollView XShelfView XSpinnerWheel XTableView XTreeView 6
  • 7. XPicker Multiple Picker Types Side Scroll Drop Down Thumb Wheel Side/Thumb Nudge Supports All Events Mouse Clicks Mouse Wheel Keyboard 7
  • 8. XCalendarPicker Configurable Locale Multiple Selection Modes Single Multiple Range Completely Skinnable 8
  • 10. XShelfView High Performance Features: Scrollbar Image Title Reflection Effect Aspect Ratio Infinite Repeat Integrates With JFXtras Data Providers Automatically Updates on Model Changes 10
  • 11. XTreeView Hierarchical data representation Supports JFXtras Data Model Can add arbitrary nodes Vertical and horizontal scrollbars Mouse wheel navigation 11
  • 12. XTableView Insanely Scalable Up to 16 million rows Extreme Performance Pools rendered nodes Caches images Optimized scene graph Features: Drag-and-Drop Column Reordering Dynamic Updating from Model Automatically Populates Column Headers Fully Styleablevia CSS 12
  • 13. SpeedReaderFX Written by Jim Weaver Read News, Twitter, and RSS in one place! Showcases use of JFXtras Layouts and Controls XMenu XTableView XPicker Contributed back to the JFXtras Samples Project 13
  • 14. JFXtras 0.6 Release Date: 11/23/2009 14 Open Source Project (BSD License) Join and help us out at: http://jfxtras.org/
  • 15. 15 Testing With FEST-JavaFX HttpRequest { location: http://steveonjava.com/ onResponseMessage: function(m) { println(m); FX.exit() }}.start(); @projavafxcourse answer
  • 16. 16 Mike Cohn’s Testing Pyramid Robot (coming soon) BDD Fluent Assertions
  • 17. Basic Test Format Test { say: "A sequence should initially be empty" do: function() { varsequence:String[]; return sequence.size(); } expect: equalTo(0) }.perform(); 17
  • 18.
  • 19. Fluent Assertion Examples isNot(null) isNot(closeTo(floor(i*1.5))) lessThanOrEqualTo(2.0) greaterThanOrCloseTo(123.10, 0.0100000) isNot(lessThanOrCloseTo(2.1435, 0.00011)) typeIs("org.jfxtras.test.UserXException") instanceOf(UserXException{}.getJFXClass()) 19
  • 20. Testing Quiz: Which test will fail? 20 varseq = [1, 3, 5, 7, 9]; Test { say: "ranges" do: function() { seq[0..2] } expect: equalTo([1, 3, 5]) } Test { say: "exclusive ends" do: function() { seq[0..<2] } expect: equalTo([1, 3]) } Test { say: "open ends" do: function() { seq[2..] } expect: equalTo([5]) } Test { say: "open exclusive ends" do: function() { seq[2..<] } expect: equalTo([5, 7]) } 1 2 3 4
  • 21. Parameterized Testing Test { say: "A Calculator should" var calculator = Calculator {} test: [ for (a in [0..9], b in [0..9]) { Test { say: "add {a} + {b}" do: function() {calculator.add(a, b)} expect: equalTo("{a + b}") } } ] }.perform(); 21
  • 22. Parameterized Testing - Output test: A Calculator should add 0 + 0. test: A Calculator should add 0 + 1. test: A Calculator should add 0 + 2. test: A Calculator should add 0 + 3. test: A Calculator should add 0 + 4. test: A Calculator should add 0 + 5. test: A Calculator should add 0 + 6. test: A Calculator should add 0 + 7. test: A Calculator should add 0 + 8. test: A Calculator should add 0 + 9. test: A Calculator should add 1 + 0. ... Test Results: 100 passed, 0 failed, 0 skipped. Test run was successful! 22
  • 23. Parameterized Testing with Assume Test { say: "A Calculator should" var calculator = Calculator {} test: [ for (aInt in [0..9], bInt in [1..9]) { var a = aInt as Number; var b = bInt as Number; [ Test { assume: that(a / b, closeTo(floor(a / b))) say: "divide {a} / {b} without a decimal" do: function() {calculator.divide(a, b)} expect: equalTo("{(a / b) as Integer}") }, Test { assume: that(a / b, isNot(closeTo(floor(a / b)))) say: "divide {a} / {b} with a decimal" do: function() {calculator.divide(a, b)} expect: equalTo("{a / b}") } ] } ] }.perform(); 23
  • 24. Parameterized Testing with Assume - Output test: A Calculator should divide 0.0 / 1.0 without a decimal. test: A Calculator should divide 0.0 / 2.0 without a decimal. test: A Calculator should divide 0.0 / 3.0 without a decimal. test: A Calculator should divide 0.0 / 4.0 without a decimal. test: A Calculator should divide 0.0 / 5.0 without a decimal. test: A Calculator should divide 0.0 / 6.0 without a decimal. test: A Calculator should divide 0.0 / 7.0 without a decimal. test: A Calculator should divide 0.0 / 8.0 without a decimal. test: A Calculator should divide 0.0 / 9.0 without a decimal. test: A Calculator should divide 1.0 / 1.0 without a decimal. test: A Calculator should divide 1.0 / 2.0 with a decimal. test: A Calculator should divide 1.0 / 3.0 with a decimal. test: A Calculator should divide 1.0 / 4.0 with a decimal. test: A Calculator should divide 1.0 / 5.0 with a decimal. test: A Calculator should divide 1.0 / 6.0 with a decimal. test: A Calculator should divide 1.0 / 7.0 with a decimal. test: A Calculator should divide 1.0 / 8.0 with a decimal. test: A Calculator should divide 1.0 / 9.0 with a decimal. ... Test Results: 90 passed, 0 failed, 90 skipped. Test run was successful! 24
  • 25. Run Tests in JUnitPart 1: Extend Test public class BasicTest extends Test {} public function run() { Test { say: "A sequence should initially be empty" do: function() { varsequence:String[]; return sequence.size(); } expect: equalTo(0) }.perform(); } 25
  • 26. Run Tests in JUnitPart 2: Create Ant Target 26 Run off classes dir Exclude inner classes <junitdir="${work.dir}"fork="true"showoutput="true"> <batchtesttodir="${build.test.results.dir}"> <filesetdir="${build.classes.dir}"excludes="**/*$*.class" includes=" **/*?Test.class"/> </batchtest> <classpathrefid="test.classpath"/> <formattertype="brief"usefile="false"/> <formattertype="xml"/> </junit> Include class files ending in Test
  • 27. Run Tests in JUnitPart 3: Execute Ant Script 27
  • 28. REST or SOAP – Have it your way! 28 Sample Enterprise Applications Soap bars in Lille, Northern France.  http://www.flickr.com/photos/gpwarlow/ / CC BY 2.0
  • 29. Calling a REST Service REST URL: http://api.meetup.com/rsvps.json/event_id={eventId}&key={apiKey} Output: { "results": [ {"zip":"94044","lon":"-122.48999786376953","photo_url":"http:photos1.meetupstatic.comphotosmember14bamember_5333306.jpeg","response":"no","name":"Andres Almiray","comment":"Can't make it :-("} ]} 29
  • 30. JUG Spinner - JSONHandler in 3 Steps public class Member { public varplace:Integer; public varphotoUrl:String; public varname:String; public varcomment:String; } varmemberParser:JSONHandler = JSONHandler {   rootClass: "org.jfxtras.jugspinner.data.MemberSearch “   onDone: function(obj, isSequence): Void {     members = (obj as MemberSearch).results; }} req = HttpRequest { location: rsvpQuery onInput: function(is: java.io.InputStream) { memberParser.parse(is); }} 30 1 POJfxO 2 JSONHandler 3 HttpRequest
  • 31. JUG Prize Spinner Demo 31 Featured in: Enterprise Web 2.0 Fundamentals By Oswald Campesato& Kevin Nilson
  • 33. Use Case: Tracking Agile Development 33
  • 34. Architecture: WidgetFX Framework Reasons for choosing WidgetFX: Supports Widgets in JavaFX and Java Commercial Friendly Open-Source Robust Security Model Cross-platform Support 34
  • 35. Design: Using the Production Suite 1 35
  • 36. Design: Using the Production Suite 2 36
  • 37. Develop: Binding the Code to Graphics Add the FXZ to your project Right click and Generate UI stub Choose a filename and generate Construct a UI Node and add it to the Scene: varrallyWidgetUI:RallyWidgetUI = RallyWidgetUI{} 37
  • 38. Develop: Calling SOAP From JavaFX Generate SOAP Stubs off WSDL: WSDL2Java -uriRally.wsdl-o src-p rallyws.api Create a new Service: rallyService= new RallyServiceServiceLocator().getRallyService(); Invoke the Service from Java or JavaFX: QueryResult result = rallyService.query(null, "Iteration", queryString, "Name", true, 0, 100); or JavaFX code: 38
  • 40. JavaFXpert RIA Exemplar Challenge "Create an application in JavaFX that exemplifies the appearance and behavior of a next-generation enterprise RIA (rich internet application)". Grand Prize: $2,000 USD (split between a two-man graphics artist and application developer team) Deadline: 10 January, 2010 For more info: http://learnjavafx.typepad.com/ 40
  • 41. LearnFX and Win at Devoxx 41
  • 42. 42 Thank You Stephen Chin http://steveonjava.com/ Tweet: steveonjava