JavaFX在控制器外部检索TextView值
编辑:对于任何未来阅读本文的人,您需要将JavaFX在控制器外部检索TextView值,java,javafx,Java,Javafx,编辑:对于任何未来阅读本文的人,您需要将参数添加到我在帖子中展示的方法中。 您不必使用参数+执行+文本视图+,而是使用参数+执行+,然后在控制器中,为参数创建整数/字符串,并将它们设置为文本视图.getText(),然后将这些整数/字符串放入从控制器类中的实例获取的方法的方法参数中 原创帖子 如何从控制器类之外的另一个类中的方法中的TextView获取值? 我不能使用textview.getText()在控制器类之外,否则它只会给我NullPointerException 这是我的另一个班级的方
参数
添加到我在帖子中展示的方法中。
您不必使用参数+执行+文本视图+
,而是使用参数+执行+,然后在控制器中,为参数
创建整数/字符串
,并将它们设置为文本视图.getText()
,然后将这些整数/字符串
放入从控制器
类中的实例获取的方法的方法参数
中
原创帖子
如何从控制器类之外的另一个类中的方法中的TextView
获取值?
我不能使用textview.getText()
在控制器
类之外,否则它只会给我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()
您不应该在控制器之外使用fx组件!您应该始终将逻辑和ui分开。因此,只需将文本内容传递给该方法。这是一个通过解析来自fxmloader的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();
或
请提供完整的例外情况。请在问题内以文本形式发布相关代码。如何初始化控制器?你的问题是如何访问控制器,我不使用任何初始值设定项,我只是创建一个控制器类的实例,如上图所示,控制器c;这是错误的!你需要得到一个FXMLLoader的实例(或者给它一个,但它更像是一个用户组件)?我在方法中使用JDBC和INSERT语句,它们不应该在SQL类中吗?是的,使用另一个类就可以了,你确实应该这样做!但是,当调用方法时,只需像这样传递内容:方法(textview.getText());但问题是我需要使用TextView值来插入数据,所以它们需要使用相同的方法。我已经发布了我的方法。但是您正在从控制器调用该方法,对吗?为什么不更改方法的参数来传递文本内容呢?不要使用c.createID.getText(),只需使用传递的参数!这确实有效!我只需要一些参数,谢谢!你是个英雄!不要将UI组件暴露在控制器之外。另外,最后一个代码块中第一行的用途是什么?我回答了OP的问题,它是如何使用自动生成的控制器。它是在控制器之外使用UI元素还是使用其他元素(这两个示例说明了这一点)不是我的问题。这不起作用,它仍然会返回Null。正确的方法是使用上面提到的参数“Aaron Stein 1”。如果没有正确创建fxml文件或控制器(如果不同类型或名称/id不同),则会得到null。
String value = controller.getTextFieldValue();