带有Scene Builder的javafx无法从textField获取getText

时间:2017-05-04 17:34:19

标签: javafx fxml scenebuilder

我是javafx的首发。我正在尝试创建一个可以通过单击按钮存储输入的表单。但是,它有错误,我无法继续。 这是我的代码:

在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> 

在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
    }
}

错误说:

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

我试图实现另一个功能:

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

但它仍然表明:

error: cannot find symbol

有什么方法可以解决这个问题吗?如果我不必实现功能界面会更好!

1 个答案:

答案 0 :(得分:2)

正确的语法是

String t = Input.getText();

(在Java中,所有对象都是通过引用访问的,因此不需要使用不同的解除引用操作符.->来区分引用和指针,如您可以使用reference.member访问对象的成员.Java中的->运算符用于定义“lambda表达式”,可以将其分配给作为功能接口的类型(接口)使用单个抽象方法),这就是为什么编译器抱怨你将它分配给不是功能接口的东西。)