THE JAVAFX
ECOSYSTEM
ANDRES ALMIRAY
@AALMIRAY
@aalmiray #JavaOneBrazil@aalmiray #JavaOneBrazil
@aalmiray #JavaOneBrazil@aalmiray #JavaOneBrazil
@aalmiray #JavaOneBrazil@aalmiray #JavaOneBrazil
LAYOUT
@aalmiray #JavaOneBrazil@aalmiray #JavaOneBrazil
MigLayout - http://miglayout.com/
<?xml	
  version="1.0"	
  encoding="UTF-­‐8"?>	
  
	
  
<?import	
  javafx.scene.control.*?>	
  
<?import	
  org.tbee.javafx.scene.layout.fxml.MigPane?>	
  
	
  
<MigLayoutPane	
  xmlns:fx="http://javafx.com/fxml"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  fx:controller="org.example.SampleController"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  layout="fill,	
  wrap	
  2"	
  	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  cols="[label,	
  left,	
  pref!][grow,	
  50::]">	
  
	
  	
  	
  	
  <Label	
  text="Username:"/>	
  
	
  	
  	
  	
  <TextField/>	
  
	
  	
  	
  	
  <Label	
  text="Password:"/>	
  
	
  	
  	
  	
  <PasswordField/>	
  
	
  	
  	
  	
  <Button	
  prefWidth="200.0"	
  text="Login"	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  MigLayoutPane.cc="span	
  2,	
  right"/>	
  
</MigLayoutPane>	
  
@aalmiray #JavaOneBrazil@aalmiray #JavaOneBrazil
WIDGETS
@aalmiray #JavaOneBrazil@aalmiray #JavaOneBrazil
Medusa - https://github.com/HanSolo/Medusa
@aalmiray #JavaOneBrazil@aalmiray #JavaOneBrazil
JideFX - https://github.com/jidesoft/jidefx-oss
Fields: FormattedTextField, NumericTextField, etc.
Decoration: apply decorators anywhere (like JXLayer).
Validation: custom validators; builds on top of decoration.
Common utilities for animations, tooltips, hints, search, etc.
@aalmiray #JavaOneBrazil@aalmiray #JavaOneBrazil
RichTextFX - https://github.com/TomasMikula/RichTextFX
https://github.com/JFormDesigner/markdown-writer-fx
@aalmiray #JavaOneBrazil@aalmiray #JavaOneBrazil
ControlsFX - http://fxexperience.com/controlsfx/
@aalmiray #JavaOneBrazil@aalmiray #JavaOneBrazil
LOOKS
@aalmiray #JavaOneBrazil@aalmiray #JavaOneBrazil
JFoenix - https://github.com/jfoenixadmin/JFoenix/
@aalmiray #JavaOneBrazil@aalmiray #JavaOneBrazil
BootstrapFX - https://github.com/aalmiray/bootstrapfx/
@aalmiray #JavaOneBrazil@aalmiray #JavaOneBrazil
FontawesomeFX - https://bitbucket.org/Jerady/fontawesomefx/
@aalmiray #JavaOneBrazil@aalmiray #JavaOneBrazil
Ikonli - http://aalmiray.github.io/ikonli/
@aalmiray #JavaOneBrazil@aalmiray #JavaOneBrazil
Undecorator - https://github.com/in-sideFX/UndecoratorBis
@aalmiray #JavaOneBrazil@aalmiray #JavaOneBrazil
TESTING
@aalmiray #JavaOneBrazil@aalmiray #JavaOneBrazil
TestFX - https://github.com/TestFX/TestFX
public	
  class	
  DesktopPaneTest	
  extends	
  ApplicationTest	
  {	
  
	
  	
  	
  	
  public	
  void	
  start(Stage	
  stage)	
  {	
  /*	
  init	
  */	
  }	
  
	
  
	
  	
  	
  	
  @Test	
  
	
  	
  	
  	
  public	
  void	
  should_drag_file_into_trashcan()	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  //	
  given:	
  
	
  	
  	
  	
  	
  	
  	
  	
  rightClickOn("#desktop").moveTo("New")	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  .clickOn("Text	
  Document");	
  
	
  	
  	
  	
  	
  	
  	
  	
  write("myTextfile.txt").push(ENTER);	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  //	
  when:	
  
	
  	
  	
  	
  	
  	
  	
  	
  drag(".file").dropTo("#trash-­‐can");	
  
	
  
	
  	
  	
  	
  	
  	
  	
  	
  //	
  then:	
  
	
  	
  	
  	
  	
  	
  	
  	
  verifyThat("#desktop",	
  hasChildren(0,	
  ".file"));	
  
	
  	
  	
  	
  }	
  
}	
  
@aalmiray #JavaOneBrazil@aalmiray #JavaOneBrazil
TestFX - https://github.com/TestFX/TestFX
clickOn("#showSettingsButton");	
  
	
  
JFXDrawer	
  settingsPanel	
  =	
  lookup("#drawer").query();	
  
waitUntil(settingsPanel,	
  isShown(),	
  defaultWaitTimeout());	
  
	
  
verifyThat("#username",	
  hasText(defaultUsernameValue));	
  
clickOn("#username").eraseText(defaultUsernameValue.length());	
  
clickOn("#username").write(usernameValue);	
  
verifyThat("#username",	
  hasText(usernameValue));	
  
@aalmiray #JavaOneBrazil@aalmiray #JavaOneBrazil
TestFX - https://github.com/aalmiray/testfx-dsl/
import	
  static	
  org.kordamp.testfx.QueryChain.$;	
  
	
  
$("#showSettingsButton")	
  
	
  	
  	
  	
  .click()	
  
.$$("#drawer")	
  
	
  	
  	
  	
  .waitUntil(isShown(),	
  defaultWaitTimeout())	
  
.$$("#username")	
  
	
  	
  	
  	
  .verifyThat(hasText(defaultUsernameValue))	
  
	
  	
  	
  	
  .click()	
  
	
  	
  	
  	
  .eraseText(defaultUsernameValue.length())	
  
	
  	
  	
  	
  .write(usernameValue)	
  
	
  	
  	
  	
  .verifyThat(hasText(usernameValue));	
  
@aalmiray #JavaOneBrazil@aalmiray #JavaOneBrazil
FRAMEWORKS
@aalmiray #JavaOneBrazil@aalmiray #JavaOneBrazil
Afterburner.fx - http://afterburner.adam-bien.com/
•  High productivity with WYSIWYG editor inclusion
•  No boilerplate code
•  Highest possible non-intrusion
•  No external libraries or dependencies
•  Maven 3 build support
@aalmiray #JavaOneBrazil@aalmiray #JavaOneBrazil
JacpFX - http://jacpfx.org/
•  Spring support
•  Maven support
•  Workbench and Perspective concepts borrowed from Eclipse
•  Messaging
•  Light-weight event bus
•  View templates
@aalmiray #JavaOneBrazil@aalmiray #JavaOneBrazil
JRebirth - http://www.jrebirth.org/
•  Simplify Thread Management
•  Avoid memory leak
•  Maintain a good SoC
•  Be the more convenient as possible for developers
•  Be lightweight (and modularizable)
•  Follow OSS spirit and Java Best Practices
•  Maven compatible
•  MVC
@aalmiray #JavaOneBrazil@aalmiray #JavaOneBrazil
MvvmFX - https://github.com/sialcasa/mvvmFX
Provides necessary components to implement the MVVM
pattern with JavaFX.
Maven compatible.
@aalmiray #JavaOneBrazil@aalmiray #JavaOneBrazil
Griffon - http://griffon-framework.org/
•  Application life cycle
•  Configuration
•  MVC artifacts
•  Localized resources (and injection)
•  Loosely coupled actions
•  Dependency injection
•  Event system
•  Centralized error management
•  Extension points via plugins
•  Maven and Gradle support
@aalmiray #JavaOneBrazil@aalmiray #JavaOneBrazil
PLATFORMS
@aalmiray #JavaOneBrazil@aalmiray #JavaOneBrazil
e(fx)clipse - http://efxclipse.bestsolution.at/
Eclipse RCP + JavaFX Views
eFX - https://bitbucket.org/sreimers/efx
NetBeans RCP + JavaFX Views
@aalmiray #JavaOneBrazil@aalmiray #JavaOneBrazil
LIBRARIES
@aalmiray #JavaOneBrazil@aalmiray #JavaOneBrazil
AnchorFX - https://github.com/aalmiray/AnchorFX
@aalmiray #JavaOneBrazil@aalmiray #JavaOneBrazil
VWorkflows - https://github.com/miho/VWorkflows
@aalmiray #JavaOneBrazil@aalmiray #JavaOneBrazil
ReactFX - https://github.com/TomasMikula/ReactFX
Flowless - https://github.com/TomasMikula/Flowless
UndoFX - https://github.com/TomasMikula/UndoFX
WellbehavedFX - https://github.com/TomasMikula/
WellBehavedFX
RxJavaFX - https://github.com/ReactiveX/RxJavaFX
@aalmiray #JavaOneBrazil@aalmiray #JavaOneBrazil
MISC
@aalmiray #JavaOneBrazil@aalmiray #JavaOneBrazil
GroovyFX - http://groovyfx.org/
application(title:	
  'Sample',	
  sizeToScene:	
  true,	
  
centerOnScreen:	
  true)	
  {	
  
	
  	
  	
  	
  scene(fill:	
  WHITE,	
  width:	
  300,	
  height:	
  120)	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  migLayoutPane(layoutConstraints:	
  'fill')	
  {	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  label	
  'Username:',	
  constraints:	
  'left'	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  textField	
  constraints:	
  'grow,	
  wrap')	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  label	
  'Password:',	
  constraints:	
  'left'	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  passwordField	
  constraints:	
  'grow,	
  wrap')	
  
	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  	
  button	
  loginAction,	
  constraints:	
  'span	
  2,	
  right'	
  
	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  }	
  
}	
  
@aalmiray #JavaOneBrazil@aalmiray #JavaOneBrazil
AsciidocFX - http://asciidocfx.com/
@aalmiray #JavaOneBrazil@aalmiray #JavaOneBrazil
THANK YOU!
ANDRES ALMIRAY
@AALMIRAY

More Related Content

PDF
JavaFX – 10 things I love about you
PDF
JavaOne - The JavaFX Community and Ecosystem
PDF
JavaFX Pitfalls
PDF
Play vs Rails
PDF
vJUG - The JavaFX Ecosystem
PDF
Node.js vs Play Framework (with Japanese subtitles)
KEY
Single Page Web Applications with CoffeeScript, Backbone and Jasmine
PDF
Vuejs testing
JavaFX – 10 things I love about you
JavaOne - The JavaFX Community and Ecosystem
JavaFX Pitfalls
Play vs Rails
vJUG - The JavaFX Ecosystem
Node.js vs Play Framework (with Japanese subtitles)
Single Page Web Applications with CoffeeScript, Backbone and Jasmine
Vuejs testing

What's hot (20)

PDF
Java Libraries You Can’t Afford to Miss
PDF
Unit Testing Express and Koa Middleware in ES2015
PDF
Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...
PPTX
Javascript Testing with Jasmine 101
PDF
Oleksandr Tolstykh
PDF
Unit Testing Express Middleware
PDF
Advanced Jasmine - Front-End JavaScript Unit Testing
PDF
Jasmine BDD for Javascript
PDF
node.js practical guide to serverside javascript
PDF
Composable and streamable Play apps
PDF
JavaScript TDD with Jasmine and Karma
PPTX
Full Stack Unit Testing
PPTX
Spring Boot
PPTX
Good karma: UX Patterns and Unit Testing in Angular with Karma
PDF
Intro to testing Javascript with jasmine
PPTX
A few good JavaScript development tools
PDF
Django Rest Framework and React and Redux, Oh My!
PDF
Keeping the frontend under control with Symfony and Webpack
PDF
Containers & Dependency in Ember.js
PDF
AngularJS Unit Test
Java Libraries You Can’t Afford to Miss
Unit Testing Express and Koa Middleware in ES2015
Finally, Professional Frontend Dev with ReactJS, WebPack & Symfony (Symfony C...
Javascript Testing with Jasmine 101
Oleksandr Tolstykh
Unit Testing Express Middleware
Advanced Jasmine - Front-End JavaScript Unit Testing
Jasmine BDD for Javascript
node.js practical guide to serverside javascript
Composable and streamable Play apps
JavaScript TDD with Jasmine and Karma
Full Stack Unit Testing
Spring Boot
Good karma: UX Patterns and Unit Testing in Angular with Karma
Intro to testing Javascript with jasmine
A few good JavaScript development tools
Django Rest Framework and React and Redux, Oh My!
Keeping the frontend under control with Symfony and Webpack
Containers & Dependency in Ember.js
AngularJS Unit Test
Ad

Viewers also liked (20)

PDF
Java fx ap is
PDF
DataFX 8 (JavaOne 2014)
PDF
JavaFX Layout Secrets with Amy Fowler
PPTX
JavaFX Presentation
PDF
JavaFX Your Way: Building JavaFX Applications with Alternative Languages
ODP
JavaFX in Action Part I
PDF
JavaFX Overview
PDF
8 True Stories about JavaFX
PDF
JavaFX 8 - GUI by Illusion
PDF
Rocket Propelled Java - Devoxx12
PPTX
Java fx
PDF
Welches Webframework passt zu mir? (WJAX)
PDF
JavaFX Enterprise (JavaOne 2014)
PPTX
JavaFX - Straight from the trenches
PDF
From Swing to JavaFX
KEY
Java Fx - Return of client Java
PPT
Cleaner APIs, Cleaner UIs with Visage (33rd Degrees)
PPTX
A Tour of PostgREST
PDF
Building Java Desktop Apps with JavaFX 8 and Java EE 7
PDF
Desktop|Embedded Application API JSR
Java fx ap is
DataFX 8 (JavaOne 2014)
JavaFX Layout Secrets with Amy Fowler
JavaFX Presentation
JavaFX Your Way: Building JavaFX Applications with Alternative Languages
JavaFX in Action Part I
JavaFX Overview
8 True Stories about JavaFX
JavaFX 8 - GUI by Illusion
Rocket Propelled Java - Devoxx12
Java fx
Welches Webframework passt zu mir? (WJAX)
JavaFX Enterprise (JavaOne 2014)
JavaFX - Straight from the trenches
From Swing to JavaFX
Java Fx - Return of client Java
Cleaner APIs, Cleaner UIs with Visage (33rd Degrees)
A Tour of PostgREST
Building Java Desktop Apps with JavaFX 8 and Java EE 7
Desktop|Embedded Application API JSR
Ad

Similar to The JavaFX Ecosystem (20)

PDF
The JavaFX Ecosystem
PDF
The JavaFX Ecosystem
PDF
Rich Portlet Development in uPortal
PDF
The JavaFX Ecosystem
PDF
Javascript MVC & Backbone Tips & Tricks
PDF
JavaDo#09 Spring boot入門ハンズオン
PPTX
Javatwo2012 java frameworkcomparison
PDF
자바 웹 개발 시작하기 (1주차 : 웹 어플리케이션 체험 실습)
KEY
[Coscup 2012] JavascriptMVC
PDF
The JavaFX Ecosystem
PPTX
jQuery for web development
PDF
Xitrum Web Framework Live Coding Demos / Xitrum Web Framework ライブコーディング
PDF
Xitrum @ Scala Matsuri Tokyo 2014
PDF
Java Server Faces
PPTX
Spine.js
PDF
Primefaces Nextgen Lju
PDF
Primefaces Nextgen Lju
KEY
Taking your Web App for a walk
PDF
HTML5, The Open Web, and what it means for you - MDN Hack Day, Sao Paulo
PDF
Learning jQuery made exciting in an interactive session by one of our team me...
The JavaFX Ecosystem
The JavaFX Ecosystem
Rich Portlet Development in uPortal
The JavaFX Ecosystem
Javascript MVC & Backbone Tips & Tricks
JavaDo#09 Spring boot入門ハンズオン
Javatwo2012 java frameworkcomparison
자바 웹 개발 시작하기 (1주차 : 웹 어플리케이션 체험 실습)
[Coscup 2012] JavascriptMVC
The JavaFX Ecosystem
jQuery for web development
Xitrum Web Framework Live Coding Demos / Xitrum Web Framework ライブコーディング
Xitrum @ Scala Matsuri Tokyo 2014
Java Server Faces
Spine.js
Primefaces Nextgen Lju
Primefaces Nextgen Lju
Taking your Web App for a walk
HTML5, The Open Web, and what it means for you - MDN Hack Day, Sao Paulo
Learning jQuery made exciting in an interactive session by one of our team me...

More from Andres Almiray (20)

PDF
Dealing with JSON in the relational world
PDF
Deploying to production with confidence 🚀
PDF
Going beyond ORMs with JSON Relational Duality Views
PDF
Setting up data driven tests with Java tools
PDF
Creando, creciendo, y manteniendo una comunidad de codigo abierto
PDF
Liberando a produccion con confianza
PDF
Liberando a produccion con confidencia
PDF
OracleDB Ecosystem for Java Developers
PDF
Softcon.ph - Maven Puzzlers
PDF
Maven Puzzlers
PDF
Oracle Database Ecosystem for Java Developers
PDF
JReleaser - Releasing at the speed of light
PDF
Building modular applications with the Java Platform Module System and Layrry
PDF
Going Reactive with g rpc
PDF
Building modular applications with JPMS and Layrry
PDF
Taking Micronaut out for a spin
PDF
Apache Groovy's Metaprogramming Options and You
PDF
What I wish I knew about Maven years ago
PDF
What I wish I knew about maven years ago
PDF
The impact of sci fi in tech
Dealing with JSON in the relational world
Deploying to production with confidence 🚀
Going beyond ORMs with JSON Relational Duality Views
Setting up data driven tests with Java tools
Creando, creciendo, y manteniendo una comunidad de codigo abierto
Liberando a produccion con confianza
Liberando a produccion con confidencia
OracleDB Ecosystem for Java Developers
Softcon.ph - Maven Puzzlers
Maven Puzzlers
Oracle Database Ecosystem for Java Developers
JReleaser - Releasing at the speed of light
Building modular applications with the Java Platform Module System and Layrry
Going Reactive with g rpc
Building modular applications with JPMS and Layrry
Taking Micronaut out for a spin
Apache Groovy's Metaprogramming Options and You
What I wish I knew about Maven years ago
What I wish I knew about maven years ago
The impact of sci fi in tech

Recently uploaded (20)

PDF
Microsoft Solutions Partner Drive Digital Transformation with D365.pdf
PDF
Hybrid horned lizard optimization algorithm-aquila optimizer for DC motor
PDF
Architecture types and enterprise applications.pdf
PDF
Assigned Numbers - 2025 - Bluetooth® Document
PDF
A review of recent deep learning applications in wood surface defect identifi...
PDF
Five Habits of High-Impact Board Members
PDF
Getting Started with Data Integration: FME Form 101
PPTX
Final SEM Unit 1 for mit wpu at pune .pptx
PPTX
Tartificialntelligence_presentation.pptx
PDF
How ambidextrous entrepreneurial leaders react to the artificial intelligence...
PPT
Module 1.ppt Iot fundamentals and Architecture
PDF
Developing a website for English-speaking practice to English as a foreign la...
PDF
August Patch Tuesday
PDF
ENT215_Completing-a-large-scale-migration-and-modernization-with-AWS.pdf
PDF
Univ-Connecticut-ChatGPT-Presentaion.pdf
PDF
NewMind AI Weekly Chronicles – August ’25 Week III
PDF
Hindi spoken digit analysis for native and non-native speakers
PDF
DASA ADMISSION 2024_FirstRound_FirstRank_LastRank.pdf
PDF
1 - Historical Antecedents, Social Consideration.pdf
PDF
A Late Bloomer's Guide to GenAI: Ethics, Bias, and Effective Prompting - Boha...
Microsoft Solutions Partner Drive Digital Transformation with D365.pdf
Hybrid horned lizard optimization algorithm-aquila optimizer for DC motor
Architecture types and enterprise applications.pdf
Assigned Numbers - 2025 - Bluetooth® Document
A review of recent deep learning applications in wood surface defect identifi...
Five Habits of High-Impact Board Members
Getting Started with Data Integration: FME Form 101
Final SEM Unit 1 for mit wpu at pune .pptx
Tartificialntelligence_presentation.pptx
How ambidextrous entrepreneurial leaders react to the artificial intelligence...
Module 1.ppt Iot fundamentals and Architecture
Developing a website for English-speaking practice to English as a foreign la...
August Patch Tuesday
ENT215_Completing-a-large-scale-migration-and-modernization-with-AWS.pdf
Univ-Connecticut-ChatGPT-Presentaion.pdf
NewMind AI Weekly Chronicles – August ’25 Week III
Hindi spoken digit analysis for native and non-native speakers
DASA ADMISSION 2024_FirstRound_FirstRank_LastRank.pdf
1 - Historical Antecedents, Social Consideration.pdf
A Late Bloomer's Guide to GenAI: Ethics, Bias, and Effective Prompting - Boha...

The JavaFX Ecosystem