JavaFX在Controller外部检索TextView值

时间:2017-10-18 11:15:46

标签: java javafx

修改:对于将来阅读本文的人,您需要将parameters添加到我在帖子中显示的方法中。 不是+ textview +,而是+with parameter+,然后在controller中,您为integers/strings制作parameters并将其设置为textview.getText() ,然后将integers/strings放在method parameters类中实例的controller内。

原帖 如何从Controller类之外的另一个类中的方法中获取TextView的值? 我无法在textview.getText();课程之外使用Controller,或者只会给我NullPointerException

以下是我其他班级的方法:

    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.createBlueLight.getText() 

2 个答案:

答案 0 :(得分:0)

您不应该在控制器之外使用fx组件!你应该总是把逻辑和ui分开。所以只需将文本内容传递给方法。

答案 1 :(得分:-1)

这是访问通过解析来自FXMLLoader

的FXML文件生成的控制器的正确方法的示例
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);
    }

}

因此控制器已正确初始化(textField字段不为空),我们可以毫无问题地使用它,例如

TextField textField = controller.getTextField();

String value = controller.getTextFieldValue();