the javafx ecosystem
TRANSCRIPT
![Page 1: The JavaFX Ecosystem](https://reader034.vdocuments.us/reader034/viewer/2022050614/58a5f6d21a28aba5728b6a9b/html5/thumbnails/1.jpg)
THE JAVAFX ECOSYSTEM
ANDRES ALMIRAY @AALMIRAY
![Page 2: The JavaFX Ecosystem](https://reader034.vdocuments.us/reader034/viewer/2022050614/58a5f6d21a28aba5728b6a9b/html5/thumbnails/2.jpg)
@aalmiray #JavaOneBrazil @aalmiray #JavaOneBrazil
![Page 3: The JavaFX Ecosystem](https://reader034.vdocuments.us/reader034/viewer/2022050614/58a5f6d21a28aba5728b6a9b/html5/thumbnails/3.jpg)
@aalmiray #JavaOneBrazil @aalmiray #JavaOneBrazil
![Page 4: The JavaFX Ecosystem](https://reader034.vdocuments.us/reader034/viewer/2022050614/58a5f6d21a28aba5728b6a9b/html5/thumbnails/4.jpg)
@aalmiray #JavaOneBrazil @aalmiray #JavaOneBrazil
LAYOUT
![Page 5: The JavaFX Ecosystem](https://reader034.vdocuments.us/reader034/viewer/2022050614/58a5f6d21a28aba5728b6a9b/html5/thumbnails/5.jpg)
@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>
![Page 6: The JavaFX Ecosystem](https://reader034.vdocuments.us/reader034/viewer/2022050614/58a5f6d21a28aba5728b6a9b/html5/thumbnails/6.jpg)
@aalmiray #JavaOneBrazil @aalmiray #JavaOneBrazil
WIDGETS
![Page 7: The JavaFX Ecosystem](https://reader034.vdocuments.us/reader034/viewer/2022050614/58a5f6d21a28aba5728b6a9b/html5/thumbnails/7.jpg)
@aalmiray #JavaOneBrazil @aalmiray #JavaOneBrazil
Medusa - https://github.com/HanSolo/Medusa
![Page 8: The JavaFX Ecosystem](https://reader034.vdocuments.us/reader034/viewer/2022050614/58a5f6d21a28aba5728b6a9b/html5/thumbnails/8.jpg)
@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.
![Page 9: The JavaFX Ecosystem](https://reader034.vdocuments.us/reader034/viewer/2022050614/58a5f6d21a28aba5728b6a9b/html5/thumbnails/9.jpg)
@aalmiray #JavaOneBrazil @aalmiray #JavaOneBrazil
RichTextFX - https://github.com/TomasMikula/RichTextFX
https://github.com/JFormDesigner/markdown-writer-fx
![Page 10: The JavaFX Ecosystem](https://reader034.vdocuments.us/reader034/viewer/2022050614/58a5f6d21a28aba5728b6a9b/html5/thumbnails/10.jpg)
@aalmiray #JavaOneBrazil @aalmiray #JavaOneBrazil
ControlsFX - http://fxexperience.com/controlsfx/
![Page 11: The JavaFX Ecosystem](https://reader034.vdocuments.us/reader034/viewer/2022050614/58a5f6d21a28aba5728b6a9b/html5/thumbnails/11.jpg)
@aalmiray #JavaOneBrazil @aalmiray #JavaOneBrazil
LOOKS
![Page 12: The JavaFX Ecosystem](https://reader034.vdocuments.us/reader034/viewer/2022050614/58a5f6d21a28aba5728b6a9b/html5/thumbnails/12.jpg)
@aalmiray #JavaOneBrazil @aalmiray #JavaOneBrazil
JFoenix - https://github.com/jfoenixadmin/JFoenix/
![Page 13: The JavaFX Ecosystem](https://reader034.vdocuments.us/reader034/viewer/2022050614/58a5f6d21a28aba5728b6a9b/html5/thumbnails/13.jpg)
@aalmiray #JavaOneBrazil @aalmiray #JavaOneBrazil
BootstrapFX - https://github.com/aalmiray/bootstrapfx/
![Page 14: The JavaFX Ecosystem](https://reader034.vdocuments.us/reader034/viewer/2022050614/58a5f6d21a28aba5728b6a9b/html5/thumbnails/14.jpg)
@aalmiray #JavaOneBrazil @aalmiray #JavaOneBrazil
FontawesomeFX - https://bitbucket.org/Jerady/fontawesomefx/
![Page 15: The JavaFX Ecosystem](https://reader034.vdocuments.us/reader034/viewer/2022050614/58a5f6d21a28aba5728b6a9b/html5/thumbnails/15.jpg)
@aalmiray #JavaOneBrazil @aalmiray #JavaOneBrazil
Ikonli - http://aalmiray.github.io/ikonli/
![Page 16: The JavaFX Ecosystem](https://reader034.vdocuments.us/reader034/viewer/2022050614/58a5f6d21a28aba5728b6a9b/html5/thumbnails/16.jpg)
@aalmiray #JavaOneBrazil @aalmiray #JavaOneBrazil
Undecorator - https://github.com/in-sideFX/UndecoratorBis
![Page 17: The JavaFX Ecosystem](https://reader034.vdocuments.us/reader034/viewer/2022050614/58a5f6d21a28aba5728b6a9b/html5/thumbnails/17.jpg)
@aalmiray #JavaOneBrazil @aalmiray #JavaOneBrazil
TESTING
![Page 18: The JavaFX Ecosystem](https://reader034.vdocuments.us/reader034/viewer/2022050614/58a5f6d21a28aba5728b6a9b/html5/thumbnails/18.jpg)
@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")); } }
![Page 19: The JavaFX Ecosystem](https://reader034.vdocuments.us/reader034/viewer/2022050614/58a5f6d21a28aba5728b6a9b/html5/thumbnails/19.jpg)
@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));
![Page 20: The JavaFX Ecosystem](https://reader034.vdocuments.us/reader034/viewer/2022050614/58a5f6d21a28aba5728b6a9b/html5/thumbnails/20.jpg)
@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));
![Page 21: The JavaFX Ecosystem](https://reader034.vdocuments.us/reader034/viewer/2022050614/58a5f6d21a28aba5728b6a9b/html5/thumbnails/21.jpg)
@aalmiray #JavaOneBrazil @aalmiray #JavaOneBrazil
FRAMEWORKS
![Page 22: The JavaFX Ecosystem](https://reader034.vdocuments.us/reader034/viewer/2022050614/58a5f6d21a28aba5728b6a9b/html5/thumbnails/22.jpg)
@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
![Page 23: The JavaFX Ecosystem](https://reader034.vdocuments.us/reader034/viewer/2022050614/58a5f6d21a28aba5728b6a9b/html5/thumbnails/23.jpg)
@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
![Page 24: The JavaFX Ecosystem](https://reader034.vdocuments.us/reader034/viewer/2022050614/58a5f6d21a28aba5728b6a9b/html5/thumbnails/24.jpg)
@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
![Page 25: The JavaFX Ecosystem](https://reader034.vdocuments.us/reader034/viewer/2022050614/58a5f6d21a28aba5728b6a9b/html5/thumbnails/25.jpg)
@aalmiray #JavaOneBrazil @aalmiray #JavaOneBrazil
MvvmFX - https://github.com/sialcasa/mvvmFX Provides necessary components to implement the MVVM pattern with JavaFX. Maven compatible.
![Page 26: The JavaFX Ecosystem](https://reader034.vdocuments.us/reader034/viewer/2022050614/58a5f6d21a28aba5728b6a9b/html5/thumbnails/26.jpg)
@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
![Page 27: The JavaFX Ecosystem](https://reader034.vdocuments.us/reader034/viewer/2022050614/58a5f6d21a28aba5728b6a9b/html5/thumbnails/27.jpg)
@aalmiray #JavaOneBrazil @aalmiray #JavaOneBrazil
PLATFORMS
![Page 28: The JavaFX Ecosystem](https://reader034.vdocuments.us/reader034/viewer/2022050614/58a5f6d21a28aba5728b6a9b/html5/thumbnails/28.jpg)
@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
![Page 29: The JavaFX Ecosystem](https://reader034.vdocuments.us/reader034/viewer/2022050614/58a5f6d21a28aba5728b6a9b/html5/thumbnails/29.jpg)
@aalmiray #JavaOneBrazil @aalmiray #JavaOneBrazil
LIBRARIES
![Page 30: The JavaFX Ecosystem](https://reader034.vdocuments.us/reader034/viewer/2022050614/58a5f6d21a28aba5728b6a9b/html5/thumbnails/30.jpg)
@aalmiray #JavaOneBrazil @aalmiray #JavaOneBrazil
AnchorFX - https://github.com/aalmiray/AnchorFX
![Page 31: The JavaFX Ecosystem](https://reader034.vdocuments.us/reader034/viewer/2022050614/58a5f6d21a28aba5728b6a9b/html5/thumbnails/31.jpg)
@aalmiray #JavaOneBrazil @aalmiray #JavaOneBrazil
VWorkflows - https://github.com/miho/VWorkflows
![Page 32: The JavaFX Ecosystem](https://reader034.vdocuments.us/reader034/viewer/2022050614/58a5f6d21a28aba5728b6a9b/html5/thumbnails/32.jpg)
@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
![Page 33: The JavaFX Ecosystem](https://reader034.vdocuments.us/reader034/viewer/2022050614/58a5f6d21a28aba5728b6a9b/html5/thumbnails/33.jpg)
@aalmiray #JavaOneBrazil @aalmiray #JavaOneBrazil
MISC
![Page 34: The JavaFX Ecosystem](https://reader034.vdocuments.us/reader034/viewer/2022050614/58a5f6d21a28aba5728b6a9b/html5/thumbnails/34.jpg)
@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' } } }
![Page 35: The JavaFX Ecosystem](https://reader034.vdocuments.us/reader034/viewer/2022050614/58a5f6d21a28aba5728b6a9b/html5/thumbnails/35.jpg)
@aalmiray #JavaOneBrazil @aalmiray #JavaOneBrazil
AsciidocFX - http://asciidocfx.com/
![Page 36: The JavaFX Ecosystem](https://reader034.vdocuments.us/reader034/viewer/2022050614/58a5f6d21a28aba5728b6a9b/html5/thumbnails/36.jpg)
@aalmiray #JavaOneBrazil @aalmiray #JavaOneBrazil
![Page 37: The JavaFX Ecosystem](https://reader034.vdocuments.us/reader034/viewer/2022050614/58a5f6d21a28aba5728b6a9b/html5/thumbnails/37.jpg)
THANK YOU!
ANDRES ALMIRAY @AALMIRAY