2015-08-07 4 views
0

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!

+0

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? –

+0

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. –

Répondre

0

La solution est très simple, je viens négligé l'erreur dans le code FXML:

devrait être

<TextField fx:id="myInput" ... 

au lieu de

<TextField id="myInput" ...