我刚刚开始学习java fx,我试图从两个文本字段获取用户输入。点击按钮后,它将显示在控制台上。 但是,我一直在收到错误,无法弄清楚原因。 我已经分配了'手柄'使用Scenebuilder的函数,错误指向方法。
主类:
package sample;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception{
Parent root = FXMLLoader.load(getClass().getResource("sample.fxml"));
primaryStage.setTitle("Hello World");
primaryStage.setScene(new Scene(root, 300, 275));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
控制器:
package sample;
import javafx.event.ActionEvent;
import javafx.scene.control.Button;
import javafx.scene.control.TextField;
public class Controller {
public TextField userField;
public TextField passField;
public Button logButton;
public void handle(ActionEvent event) {
String username = userField.getText();
String passw = passField.getText();
System.out.printf("Logged in as %s %s", username, passw);
}
}
答案 0 :(得分:1)
虽然您没有显示错误,但我认为这是因为您没有使用userField
注释对字段passwordField
和@FXML
进行注释
通过此注释,您可以将控制器中的字段与fxml
中的字段绑定所以要解决这个问题,让我们做以下简单的步骤
public class Controller implements Initializable{
@FXML
private TextField userField;
@FXML
private TextField passField;
@FXML
private Button logButton;
private void handle(ActionEvent event)
{
System.out.println(userField.getText());
}
@Override
public void initialize(URL url, ResourceBundle rb)
{
logButton.setOnAction(this::handle);
}}
试试这个,如果你还有问题,请发表评论(:
答案 1 :(得分:0)
在使用Scene Builder时,应使用样本控制器骨架:在“视图”下,选择“使用样本控制器骨架”。另外,为文本字段指定“On Action”。场景生成器将点缀我并为你穿越t。