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

Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationMichael W. Hawkins
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxMalak Abu Hammad
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slidevu2urc
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
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
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
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
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfEnterprise Knowledge
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...gurkirankumar98700
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024The Digital Insurer
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationRadu Cotescu
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityPrincipled Technologies
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)Gabriella Davis
 

Recently uploaded (20)

Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
The Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptxThe Codex of Business Writing Software for Real-World Solutions 2.pptx
The Codex of Business Writing Software for Real-World Solutions 2.pptx
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
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
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
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
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
Neo4j - How KGs are shaping the future of Generative AI at AWS Summit London ...
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 

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