2017-10-18 23 views
0

编辑:对于任何未来的人阅读此内容,您需要将parameters添加到我在帖子中显示的方法。 而不是做+ textview +的,你做+with parameter+然后在controller,你让integers/stringsparameters并将它们设置=到textview.getText(),那么你就把那些integers/strings你是从实例中获得的controller类中的方法的method parameters内。JavaFX检索外部控制器的TextView值

原贴 我如何从TextView值在控制器类外的其他类中的方法? 我不能在Controller课外使用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() 
+0

请提供完整例外的[MCVE](https://stackoverflow.com/help/mcve)。 – devpuh

+0

请将问题内的相关代码作为文本发布。 https://stackoverflow.com/help/how-to-ask –

+1

你如何初始化控制器?你的问题是如何访问控制器。 –

回答

0

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

+0

即使代码包含SQL?我正在使用JDBC并在方法内使用INSERT语句,不应该在SQL类中? –

+0

是的,这是非常好的使用另一个班,因为你应该这样做!但是当你调用你的方法时,你只需传递这样的内容:method(textview.getText()); –

+0

但问题是我需要使用TextView值来插入数据,所以他们需要使用相同的方法。我发布了我的方法。 –

-1

这是正确的方式为例来访问由解析FXML文件生成从FXMLLoader

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(); 
+0

不要将UI组件暴露在控制器之外。另外,最后一个代码块中第一行的目的是什么? –

+0

我回答OP的问题,它是如何使用自动生成的控制器。 是否会使用控制器外部的UI元素或将使用其他内容(这两个示例说明了这一点)不是我的问题。 –

+0

这不起作用,它仍然会返回Null。正确的做法是使用上述“Aaron Stein 1”的参数。 –