J'ai un composant JavaFX personnalisé extension de la classe Tab:JavaFX @FXML de liaison à partir du code Java
public class MyTab extends Tab implements Initializable {
@FXML private TextField myInput;
private final MyDTO dto;
public MyTab(MyDTO dto) {
super();
this.dto = dto;
final FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/my-tab.xml"));
fxmlLoader.setResources(MSG.getResourceBundle());
fxmlLoader.setRoot(this);
fxmlLoader.setController(this);
try {
fxmlLoader.load();
}
catch (IOException exception) {
throw new RuntimeException(exception);
}
}
@Override
public void initialize(URL url, ResourceBundle res) {
setText("My Tab");
myInput.setText(dto.getValue()); // !!!
}
}
Avec le FXML:
<fx:root type="javafx.scene.control.Tab" xmlns:fx="http://javafx.com/fxml">
<content>
<AnchorPane minHeight="0.0" minWidth="0.0" prefHeight="180.0" prefWidth="200.0">
<children>
<Label id="myLabel" layoutX="14.0" layoutY="14.0" text="Text:" />
<TextField id="myInput" layoutX="162.0" layoutY="10.0" prefHeight="25.0" prefWidth="300.0" />
</children>
</AnchorPane>
</content>
</fx:root>
Je dois créer cette objets (onglets personnalisés) dynamiquement à partir du code java:
final MyTab myTab = new MyTab(new MyDTO(...));
tabPane.getTabs().add(myTab);
Quand je l'utilise comme celui-ci, la liaison @FXML ne fonctionne pas et la ligne
myInput.setText(dto.getValue());
throws NullPointerException. Lorsque la ligne avec le réglage du texte du code est commentée, l'entrée est affichée, donc le problème est seulement dans la liaison.
J'utilise JavaFX 2 pour Java 1.7
Merci pour toute idée!
Votre code que vous avez publié il n'a pas vraiment car l'élément FXML '' invoquerait un constructeur à zéro argument sur 'MyTab', qui n'existe pas. Cela dit, il semble que cela devrait fonctionner. Pouvez-vous créer et publier un [MCVE] (http://stackoverflow.com/help/mcve) qui produit l'exception du pointeur nul? –
Vous avez raison, j'ai mis le contructeur avec le paramètre que j'ai quitté la solution pure FXML, j'ai édité la question. –