KEMBAR78
vJUG - The JavaFX Ecosystem | PDF
THE JAVAFX
ECOSYSTEM
ANDRES ALMIRAY
@AALMIRAY
DISCLAIMER
THE JAVAFX ECOSYSTEM IS COMPRISED OF
OPEN SOURCE AND COMMERCIAL
OFFERINGS.
ALL PROJECTS LISTED IN THIS
PRESENTATION ARE OPEN SOURCE.
WE’LL ONLY COVER LIBRARIES AND
FRAMEWORKS.
THE JAVAFX ECOSYSTEM IS SO BIG YOU
CAN’T COVER IT ALL IN 1 HOUR.
LAYOUT
MigLayout - http://miglayout.com
<?xml	
  version="1.0"	
  encoding="UTF-­‐8"?>	
  
	
  
<?import	
  javafx.scene.control.*?>	
  
<?import	
  org.tbee.javafx.scene.layout.fxml.MigPane?>	
  
	
  
<MigPane	
  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"/>	
  
</MigPane>	
  
WIDGETS
Medusa - https://github.com/HanSolo/Medusa
TilesFX - https://github.com/HanSolo/tilesfx
JSilhouette - https://github.com/aalmiray/jsilhouette
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.
RichTextFX - https://github.com/TomasMikula/RichTextFX
https://github.com/JFormDesigner/markdown-writer-fx
JFXtras - http://jfxtras.org/
ControlsFX - http://fxexperience.com/controlsfx/
Gluon Maps- https://github.com/gluonhq/maps
OrsonCharts - http://www.object-refinery.com/orsoncharts/
LOOKS
JFoenix - https://github.com/jfoenixadmin/JFoenix/
BootstrapFX - https://github.com/aalmiray/bootstrapfx/
FontawesomeFX - https://bitbucket.org/Jerady/fontawesomefx/
Ikonli - https://github.com/aalmiray/ikonli/
Undecorator - https://github.com/in-sideFX/UndecoratorBis
TESTING
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"));	
  
	
  	
  	
  	
  }	
  
}	
  
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));	
  
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));	
  
FRAMEWORKS
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
JacpFX - http://jacpfx.org/
•  Spring support
•  Maven support
•  Workbench and Perspective concepts borrowed from Eclipse
•  Messaging
•  Light-weight event bus
•  View templates
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
MvvmFX - https://github.com/sialcasa/mvvmFX
•  Provides necessary components to implement the MVVM
pattern with JavaFX.
•  Maven compatible.
TornadoFX - https://github.com/edvin/tornadofx
•  Supports both MVC, MVP and their derivatives
•  Dependency injection
•  Type safe GUI builders
•  Type safe CSS builders
•  First class FXML support
•  Async task execution
•  EventBus with thread targeting
•  Hot reload of Views and Stylesheets
•  OSGi support
•  REST client with automatic JSON conversion
•  Zero config, no XML, no annotations
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
Basilisk - https://github.com/basilisk-fw/basilisk
•  Targets Desktop and Mobile platforms
•  Application life cycle
•  Configuration
•  MVC artifacts
•  Localized resources (and injection)
•  Loosely coupled actions
•  Dependency injection
•  Event system
•  Centralized error management
•  Extension points via plugins
•  Gradle support
PLATFORMS
e(fx)clipse - http://efxclipse.bestsolution.at/
Eclipse RCP + JavaFX Views
eFX - https://bitbucket.org/sreimers/efx
NetBeans RCP + JavaFX Views
LIBRARIES
AnchorFX - https://github.com/alexbodogit/AnchorFX
VWorkflows - https://github.com/miho/VWorkflows
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
MISC
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'	
  
	
  	
  	
  	
  	
  	
  	
  	
  }	
  
	
  	
  	
  	
  }	
  
}	
  
AsciidocFX - http://asciidocfx.com/
THANK YOU!
ANDRES ALMIRAY
@AALMIRAY

vJUG - The JavaFX Ecosystem