2017-10-18 26 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」的參數。 –