2017-05-04 2 views
-1

Je suis un démarreur de javafx. J'essaye de créer un formulaire qui peut stocker l'entrée en cliquant sur un bouton. Cependant, il a une erreur et je ne peux pas continuer. Voici mon code:javafx avec Scene Builder impossible d'obtenirText depuis textField

Dans le fichier FXML:

<VBox prefHeight="300.0" prefWidth="400.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="ass.InputDataController"> 
    <children> 
     <Label text=" Input" /> 
     <TextField id="Input" fx:id="Input" onAction="#handleButtonAction" /> 
     <Button fx:id="enter" onAction="#handleButtonAction" prefHeight="57.0" prefWidth="707.0" text="Enter" /> 
    </children> 
</VBox> 

En InputDataController.java:

public class InputDataController implements Initializable { 
    @FXML 
    private TextField Input; 
    @FXML 
    private void handleButtonAction(ActionEvent event) { 
    String t = Input->getText(); 
    } 
    @Override 
    public void initialize(URL url, ResourceBundle rb) { 
    // TODO 
    } 
} 

L'erreur disent:

error: incompatible types: String is not a functional interface 
     String t = Input->getText(); 

J'ai essayé de mettre en œuvre une autre Fonction:

@FunctionalInterface 
    interface String { 
     String getText(TextField t); 
    } 

Mais il affirme encore que:

error: cannot find symbol 

est-il une méthode pour résoudre ce problème? Ce sera mieux si je n'ai pas à implémenter une interface fonctionnelle!

Répondre

2

La syntaxe correcte est

String t = Input.getText(); 

(En Java, tous objets sont accessibles via des références, donc il n'y a pas besoin de différents opérateurs déréférencement . et -> de distinguer entre les références et les pointeurs, comme dans d'autres L'opérateur -> en Java est utilisé pour définir une "expression lambda" qui peut être affectée à un type qui est une interface fonctionnelle pourquoi le compilateur s'est plaint que vous étiez en train de l'assigner à quelque chose qui n'était pas interface fonctionnelle.)