Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

The JavaFX Ecosystem

454 views

Published on

The JavaFX Ecosystem - Montreal JUG

Published in: Technology
  • Be the first to comment

The JavaFX Ecosystem

  1. 1. THE JAVAFX ECOSYSTEM ANDRES ALMIRAY @AALMIRAY ANDRESALMIRAY.COM
  2. 2. JCP Executive Committee Associate Seat Committer Committer JSR377 Specification Lead
  3. 3. DISCLAIMER
  4. 4. 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.
  5. 5. LAYOUT
  6. 6. 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>
  7. 7. WIDGETS
  8. 8. Medusa - https://github.com/HanSolo/Medusa
  9. 9. TilesFX - https://github.com/HanSolo/tilesfx
  10. 10. JSilhouette - https://github.com/aalmiray/jsilhouette
  11. 11. 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.
  12. 12. RichTextFX - https://github.com/TomasMikula/RichTextFX https://github.com/JFormDesigner/markdown-writer-fx
  13. 13. CalendarFX - https://github.com/dlemmermann/CalendarFX
  14. 14. Charts - https://github.com/HanSolo/charts
  15. 15. JFXtras - http://jfxtras.org/
  16. 16. ControlsFX - http://fxexperience.com/controlsfx/
  17. 17. Gluon Maps- https://github.com/gluonhq/maps
  18. 18. OrsonCharts - http://www.object-refinery.com/orsoncharts/
  19. 19. LOOKS
  20. 20. JFoenix - https://github.com/jfoenixadmin/JFoenix/
  21. 21. BootstrapFX - https://github.com/aalmiray/bootstrapfx/
  22. 22. FontawesomeFX - https://bitbucket.org/Jerady/fontawesomefx/
  23. 23. Ikonli - https://github.com/aalmiray/ikonli/
  24. 24. Undecorator - https://github.com/in-sideFX/UndecoratorBis
  25. 25. TESTING
  26. 26. 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")); } }
  27. 27. 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));
  28. 28. 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));
  29. 29. LIBRARIES
  30. 30. AnchorFX - https://github.com/alexbodogit/AnchorFX
  31. 31. VWorkflows - https://github.com/miho/VWorkflows
  32. 32. ReactFX - https://github.com/TomasMikula/ReactFX Flowless - https://github.com/TomasMikula/Flowless UndoFX - https://github.com/TomasMikula/UndoFX WellbehavedFX - https://github.com/TomasMikula/ WellBehavedFX
  33. 33. RxJavaFX - https://github.com/ReactiveX/RxJavaFX
  34. 34. FRAMEWORKS
  35. 35. 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
  36. 36. JacpFX - http://jacpfx.org/ •  Spring support •  Maven support •  Workbench and Perspective concepts borrowed from Eclipse •  Messaging •  Light-weight event bus •  View templates
  37. 37. 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
  38. 38. MvvmFX - https://github.com/sialcasa/mvvmFX •  Provides necessary components to implement the MVVM pattern with JavaFX. •  Maven compatible.
  39. 39. 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
  40. 40. 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
  41. 41. Basilisk - https://github.com/basilisk-fw/basilisk •  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 •  Targets Desktop and Mobile platforms
  42. 42. PLATFORMS
  43. 43. e(fx)clipse - http://efxclipse.bestsolution.at/ Eclipse RCP + JavaFX Views eFX - https://bitbucket.org/sreimers/efx NetBeans RCP + JavaFX Views
  44. 44. MISC
  45. 45. 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' } } }
  46. 46. AsciidocFX - http://asciidocfx.com/
  47. 47. HTTPS://GITHUB.COM/MHRIMAZ/AWESOMEJAVAFX
  48. 48. JSR 377
  49. 49. FRAMEWORKS Many of the listed frameworks offer the following capabilities implemented in different ways: application life cycle localized resources (and injection) persisted session state loosely coupled actions dependency injection event system centralized error management extension points via plugins
  50. 50. GOALS OF JSR 377 Target Desktop and Embedded environments Support several toolkits Be an standalone JSR, i.e, no need to include it in the JDK Leverage existing JSRs: JSR 330 – Dependency Injection JSR 382 – JavaConfig (?)
  51. 51. CORE FEATURES application life cycle localized resources (and injection) configuration (*) loosely coupled actions dependency injection event system centralized error management extension points via plugins
  52. 52. RESOURCES Desktop|Embedded Application API https://jcp.org/en/jsr/detail?id=377 https://github.com/jsr377/ http://jsr377.github.io/site/
  53. 53. HTTP://ANDRESALMIRAY.COM/NEWSLETTER HTTP://ANDRESALMIRAY.COM/EDITORIAL
  54. 54. THANK YOU! ANDRES ALMIRAY @AALMIRAY ANDRESALMIRAY.COM

×