2017-10-18 1 views
0

Editer: Pour toute personne lisant ceci, vous devez ajouter parameters à la méthode que j'ai montré dans la publication. Au lieu de faire + textview +, vous faites +with parameter+ puis dans le controller, vous faites integers/strings pour le parameters et les mettre = à textview.getText(), alors vous mettez les integers/strings à l'intérieur du method parameters de la méthode que vous obtenez de l'instance dans la classe controller.JavaFX récupère la valeur de TextView en dehors du contrôleur

Original Post Comment puis-je obtenir la valeur d'un TextView dans une méthode dans une autre classe en dehors de la classe Controller? Je ne peux pas utiliser textview.getText(); en dehors de la classe Controller ou il me donnera juste NullPointerException.

Voici ma méthode de mon autre classe:

Controller c; 
public void createRecipes() throws SQLException { 
    openDB(); 
    if (connectionDB != null) { 
     Statement st = this.connectionDB.createStatement(); 
     String insert = "INSERT INTO recipes " 
       + " (ID, name, temperature, fan, redlight, bluelight, addwater) " + " VALUES " 
       + " (" + c.createID.getText() + ", " + c.createName.getText() + ", " +c. createTemperature.getText() + ", " + c.createFan.getText() + ", " + c.createRedLight.getText() + ", " + c.createBlueLight.getText() + ", " + c.createWaterLevel.getText() + ") ;"; 

     st.executeUpdate(insert); 
    } else { 
     System.out.println("No connection established to the database."); 
    } 
    closeDB(); 
} 

C'est le champ de texte que je reçois de ma classe de contrôleur:

c.createBlueLight.getText() 
+0

Veuillez fournir un [MCVE] (https://stackoverflow.com/help/mcve) avec l'exception complète. – devpuh

+0

Veuillez écrire le code pertinent dans la question sous forme de texte. https://stackoverflow.com/help/how-to-ask –

+1

Comment initialiser le contrôleur? votre question est plutôt comment accéder au contrôleur. –

Répondre

0

Vous ne devriez pas utiliser des composants fx en dehors de vous contrôleur ! Vous devriez toujours séparer la logique et l'interface utilisateur. Il suffit donc de passer le contenu du texte à la méthode.

+0

Même si le code contient du SQL? J'utilise JDBC et en utilisant des instructions INSERT dans la méthode, ne devrait pas être dans une classe SQL? –

+0

Oui, c'est tout à fait correct d'utiliser une autre classe pour cela, vous devriez en effet le faire! Mais quand vous appelez votre méthode, vous passez juste le contenu comme ceci: method (textview.getText()); –

+0

mais le problème est que je dois utiliser les valeurs TextView pour insérer les données, donc ils doivent être dans la même méthode. J'ai posté ma méthode. –

-1

Voici un exemple de la bonne façon d'accéder aux contrôleurs qui sont générés par l'analyse des fichiers de FXML de FXMLLoader

public class Controller { 

    @FXML 
    private TextField textField; 

    public TextField getTextField() { 
     return textField; 
    } 

    public String getTextFieldValue() { 
     return textField.getText(); 
    } 

} 

public class Main extends Application { 

    @Override 
    public void start(Stage primaryStage) throws Exception{ 
     FXMLLoader loader = new FXMLLoader(getClass().getResource("sample.fxml")); 
     Parent root = loader.load(); 
     Controller controller = loader.getController(); 

     primaryStage.setTitle("Hello World"); 
     primaryStage.setScene(new Scene(root, 300, 275)); 
     primaryStage.show(); 
    } 


    public static void main(String[] args) { 
     launch(args); 
    } 

} 

Ainsi, le contrôleur est initialisé correctement (le champ textField est non nul) et nous pouvons l'utiliser sans problème, par exemple

TextField textField = controller.getTextField(); 

ou

String value = controller.getTextFieldValue(); 
+0

N'exposez pas les composants de l'interface utilisateur à l'extérieur du contrôleur. Aussi, quel est le but de la première ligne dans votre dernier bloc de code? –

+0

Je réponds à la question de l'OP et c'est comment utiliser un contrôleur qui est généré automatiquement. si elle va utiliser des éléments d'interface utilisateur en dehors du contrôleur ou utilisera autre chose (les deux exemples illustrent cela) n'est pas mon problème. –

+0

Cela ne fonctionne pas, il retournera toujours Null. La bonne façon de le faire est avec des paramètres comme "Aaron Stein 1" indiqué ci-dessus. –