带有 Scene Builder 的 javafx 无法从 textField 获取文本
javafx with Scene Builder cannot getText from textField
我是 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
有什么方法可以解决这个问题吗?如果我不用实现函数式接口就更好了!
正确的语法是
String t = Input.getText();
(在Java中,所有对象都是通过引用访问的,所以不需要不同的解引用运算符.
和->
区分引用和指针,就像在其他语言中一样。您使用 reference.member
访问对象的成员。Java 中的 ->
运算符用于定义一个 "lambda expression",它可以分配给功能接口类型(具有单个抽象方法的接口),这就是编译器抱怨您将其分配给不是功能接口的东西的原因。)
我是 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
有什么方法可以解决这个问题吗?如果我不用实现函数式接口就更好了!
正确的语法是
String t = Input.getText();
(在Java中,所有对象都是通过引用访问的,所以不需要不同的解引用运算符.
和->
区分引用和指针,就像在其他语言中一样。您使用 reference.member
访问对象的成员。Java 中的 ->
运算符用于定义一个 "lambda expression",它可以分配给功能接口类型(具有单个抽象方法的接口),这就是编译器抱怨您将其分配给不是功能接口的东西的原因。)