Hola,
Cuando JavaFX nació (no JavaFX script), se creaban las GUI's con código Java, como en el caso de Swing. Luego, con versiones posteriores de JavaFX, se creó un lenguaje basado en XML que se llama FXML. Ésta forma de crear GUI's es mucho más práctica y eficiente desde el punto de vista de delegación de actividades y la fácil implementación del patrón MVC.
Cuando creas una aplicación JavaFX con FXML, tienes en primera instancia 2 capas: Vista y Controlador. Por ejemplo:
<AnchorPane prefHeight="300.0" prefWidth="300.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="net.elhacker.javafxdemo.controllers.HelloWorldController">
Fíjate en el atributo
fx:controller. Aquí, debes de indicar la ruta del controlador de dicha vista. En el caso, anterior:
package net.elhacker.javafxdemo.controllers;
public class HelloWorldController { /* ... */ }
Ahora, la forma de referenciar los controles FXML en el controlador, se hace a base de identificadores y anotaciones. Por ejemplo, en el FXML tienes un botón:
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<StackPane prefHeight="300.0" prefWidth="300.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"
fx:controller="net.elhacker.javafxdemo.controllers.HelloWorldController">
<children>
<Button fx:id="btnHello" mnemonicParsing="false" text="Click me!" />
</children>
</StackPane>
Fíjate en el atributo
fx:id, su valor identifica al elemento. Por ello, podemos referenciarlo en nuestro controlador muy fácilmente:
public class HelloWorldController {
@FXML
private Button btnHello
;}
Para asignarle un método cuando se produzca un evento en el botón, solo debemos especificar el atributo
onAction="#nombremétodo":
<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.control.*?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<StackPane prefHeight="300.0" prefWidth="300.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1"
fx:controller="net.elhacker.javafxdemo.controllers.HelloWorldController">
<children>
<Button mnemonicParsing="false" text="Click me!" onAction="#btnHelloAction" />
</children>
</StackPane>
Y en nuestro controlador:
public class HelloWorldController {
@FXML
private Button btnHello
;
// hacer algo
}
}
Usar FXML es la mejor forma de trabajar con JavaFX. Además, es la forma recomendada por Oracle.
Saludos.