2014-09-09 4 views
0

J'essaye de manipuler le texte dans un TextField généré par Scene Builder. Mon contrôleur ressemble à ceci:Contrôleur JavaFX Scene Builder

@FXML 
private TextField textDescr; 

public void initialize(URL fxmlFileLocation, ResourceBundle resources) { 
    textDescr = new TextField(); 
    assert textDescr != null : "fx:id=\"textDescr\" was not injected: check your FXML file 'provingGroundsUI.fxml'."; 
    Game.mainFSM.enter(); 
} 
public void setText(String s) { 
    // TODO Auto-generated method stub 
    textDescr.setText(s); 
} 

Je reçois une exception NullPointerException. J'ai essayé bot avec et sans la partie textDescr = new TextField();. Je ne comprends pas très bien ... Je pensais que JavaFX initialisait toutes les variables de l'interface utilisateur au début du programme.

+0

Est-ce que le 'fx: id' du TextField dans le FXML correspondent au nom du champ dans le contrôleur? En d'autres termes, existe-t-il un

+0

Oui, il a le bon fx: id – pieAre5quare

+0

Assurez-vous @Override la méthode d'initialisation. – Wamasa

Répondre

1
  1. À quoi ressemble votre FXML?
  2. Pour manipuler le fichier textDescr dans la fonction setText, il y a beaucoup de risques. Il est préférable d'utiliser un binded StringProperty:


    @FXML 
    private Text textDescr; 

    private StringProperty textProperty = new SimpleStringProperty(); 

    @FXML 
    void initialize() { 
      assert textDescr != null : "fx:id=\"textDescr\" was not injected: check your FXML file 'TestView.fxml'."; 
      textDescr.textProperty().bind(textProperty); 
    } 

    public ReadOnlyStringProperty textProperty(){ 
      return textProperty; 
    } 

0

Votre classe contrôleur devrait mettre en œuvre Initializable

L'annotation @FXML montre que le champ sera initialisé par le JavaFX. Alors assurez-vous, vous supprimez la chose new TextField.

Etes-vous sûr d'avoir affecté ce contrôleur au FXML?

+0

Le contrôleur met en œuvre 'Initializable' et le contrôleur a été sauvegardé dans le FXML. – pieAre5quare

+0

Ensuite, quelle est l'importation de TextField? J'espère que ce n'est pas 'java.awt.TextField' – galovics

+0

' import javafx.scene.control.TextField; ' – pieAre5quare

Questions connexes