DGL
https://delphigl.com/forum/

sbt-fxml
https://delphigl.com/forum/viewtopic.php?f=13&t=10797
Seite 1 von 1

Autor:  Frase [ Fr Mär 29, 2013 13:45 ]
Betreff des Beitrags:  sbt-fxml

Hi!

ich habe mal wieder ein Projekt aus dem Ärmel gezaubert - dieses Mal jedoch mit einem wichtigen Unterschied: Es ist bereits fast fertig :) Es hat sogar etwas mit OpenGL zu tun :p

sbt-fxml ist der Name und es ist ein Plugin für das Build-Tool SBT. Es ist in einem Mercurial-Repository auf Bitbucket gehosted und die Binaries liegen im offiziellen Repository von SBT.

Was tut es?
Es generiert Sourcecode für FXML Dateien für JavaFX. Das ist vom Prinzip her so ähnlich wie Delphi und die .dfm Dateien, die die Definition für die Forms beinhalten (IIRC). FXML tritt dabei an die Stelle dieser .dfm Dateien und mein Plugin erzeugt den passenden Code. Dadurch kann man die Komponenten aus der FXML ohne Umwege (und vor allem ohne, dass man langweiligen Code dafür schreiben müsste) im Quellcode verwenden.

Pics or it didn't happen!
Das ist zwar jetzt kein Bild, aber tut's hoffentlich genau so:
Code:
  1. // Auto generated by sbt-fxml, changes will be overwritten
  2.  
  3. package com.example
  4.  
  5. import javafx.fxml.FXML
  6. import javafx.scene.control.Button
  7.  
  8. object Controller {
  9.   @FXML
  10.   var meep: Button = ???
  11. }

Das entstand aus diesem FXML:
Code:
  1. <?xml version="1.0" encoding="UTF-8"?>
  2.  
  3. <?import java.lang.*?>
  4. <?import java.util.*?>
  5. <?import javafx.scene.control.*?>
  6. <?import javafx.scene.layout.*?>
  7. <?import javafx.scene.paint.*?>
  8.  
  9. <AnchorPane id="AnchorPane" prefHeight="400.0" prefWidth="600.0" xmlns:fx="http://javafx.com/fxml" fx:controller="com.example.Controller">
  10.   <children>
  11.     <Button fx:id="meep" layoutX="89.0" layoutY="33.0" text="Button" />
  12.   </children>
  13. </AnchorPane>

Und das FXML entstand mit dem GUI-Builder SceneBuilder.

Das heißt: Man kann sich das komplette GUI-Code schreiben nun sparen in Java / Scala :)

Features
  • Compile-Time Checks für FXML files
  • Wunderschöner generierter Code, sieht fast aus wie von Hand geschrieben (wäre da nicht der Kommentar am Dateianfang)
  • Liest den Package-Namen und den Klassennamen der Controller-Klasse direkt aus der FXML-Datei
  • Vermeidet unnötige imports
  • Kann auch mit Default-Packages
  • Erzeugt automatisch die Verzeichnisstruktur für das erkannte Package
  • Nimmt die jfxrt.jar, um den Komponenten ihre Klasse zu zu ordnen, sodass es automatisch mit allen vergangenen und zukünftigen Releases von JavaFX zusammenarbeitet
  • Erzeugt die Klassen nur dann neu, wenn es Änderungen im FXML gab
  • Unterstützt SBTs continuous compile und generiert dadurch automatisch neu, sobald sich ein FXML ändert

Publicity
Ich habe das Plugin auf Twitter angekündigt - dort aber noch mit seinem alten Namen "sbt-fx". Nach der Ankündigung habe ich relativ bald gemerkt, dass es bereits ein SBT-Plugin gibt, was auf den Namen "sbt-javafx" hört und habe meines deswegen umbenannt. Leider etwas zu spät, denn meine Ankündigung wurde binnen weniger Minuten an 5655 Leute ge-retweet-et.

Lizenz
Das ganze Projekt ist Open Source und steht unter der Eclipse Public License v1.0. Die ist grob vergleichbar mit der Apache License 2 und damit ein klein wenig liberaler als die LGPL.

Autor:  Frase [ Mi Apr 03, 2013 23:39 ]
Betreff des Beitrags:  Re: sbt-fxml

Ich wurde mittlerweile um einen Gastpost auf guigarage.com gebeten und auch schon von mehreren Seiten gefragt (u.A. von jemandem von Oracle), ob es denn einen Blogpost zu meinem Plugin geben wird. Und jaa..... den wird es geben :)

P.S.: Feedback ist was tolles

Autor:  Frase [ So Apr 07, 2013 21:40 ]
Betreff des Beitrags:  Re: sbt-fxml

Ahoi,

ich habe mittlerweile angefangen Tests zu schreiben, nachdem das Plugin mittlerweile einen gewissen Grad an Features erreicht hat.

Außerdem wurde mein Plugin in den JavaFX Links Of The Week vom Controls Lead Developer Jonathan Giles erwähnt ^.~

Seite 1 von 1 Alle Zeiten sind UTC + 1 Stunde
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/