JavaFX 8 est disponible depuis mars 2014 et apporte son lot de nouveautés. Gradle est en version 2 depuis juillet 2014. Deux technologies plus que prometteuses: JavaFX donne un coup de jeune au développement d’applications desktop en Java en apportant un navigateur web intégré, le support des WebSockets, de la 3D, et bien d’autres. Gradle est l’outil de d’automatisation de build à la mode, apportant de superbes possibilités par rapport rapport à maven, outil vieillissant, grâce à l’engouement de la communauté vis à vis de cet outil mais aussi par le fait de la technologie utilisée en son sein: groovy. Venez découvrir comment il est possible de réaliser rapidement une application à la mode en JavaFX avec un outil à la mode également. Bref venez à une session trendy.
8. Les types
8
IntegerProperty intP = new SimpleIntegerProperty();
DoubleProperty doubleP = new SimpleDoubleProperty();
// ...
BooleanProperty booleanP = new SimpleBooleanProperty();
StringProperty stringP = new SimpleStringProperty();
ObjectProperty<SoftShake> objectP = new SimpleObjectProperty();
9. Le binding
IntegerProperty intP1 = new SimpleIntegerProperty();
IntegerProperty intP2 = new SimpleIntegerProperty();
intP1.bind(intP2);
intP2.set(10);
System.out.println("Et P1? " + intP1.get());
9
10. Le binding
IntegerProperty intP1 = new SimpleIntegerProperty();
IntegerProperty intP2 = new SimpleIntegerProperty();
intP1.bindBidirectional(intP2);
intP2.set(10);
System.out.println("Et P1? " + intP1.get());
intP1.set(20);
System.out.println("Et P2? " + intP2.get());
10
11. Les événements
IntegerProperty intP1 = new SimpleIntegerProperty();
intP1.addListener((valueInt, oldInt, newInt) -> {
System.out.println("Change");
});
intP1.set(10);
11
12. POJO 2.0
public class Conference {
private StringProperty name = new SimpleStringProperty();
12
public StringProperty nameProperty() { return this.name; }
public String getName() { return this.name.get(); }
public void setName(String name) { this.name.set(name); }
}
final Conference softShake = new Conference();
tf.textProperty().bindBidirectional(softShake.nameProperty());
32. Objets prédéfinis
Box b = new Box(width, height, depth);
Cylinder c = new Cylinder(radius, height);
Sphere s = new Sphere(radius);
TriangleMesh tm = new TriangleMesh();
Les plus basiques
32
33. Camera & Light
Camera camera = new PerspectiveCamera(true);
scene.setCamera(camera);
PointLight point = new PointLight(Color.RED);
AmbientLight ambient = new AmbientLight(Color.WHITE);
scene.getRoot().getChildren().addAll(point, ambient);
Ne pas oublier de positionner les objets
33
48. TestFX
public class DesktopTest extends GuiTest {
public Parent getRootNode() { return new Desktop(); }
@Test public void testMe() {
// Given
rightClick("#desktop").move("New").click("Text Document")
.type("myTextfile.txt").push(ENTER);
// When
drag(".file").to("#trash-can");
// Then
verifyThat("#desktop", contains(0, ".file"));
48