2017-06-05 57 views
0

我想讓文本字段存儲一個人名稱,但它始終顯示爲空白,我現在擁有的是如下所示。設置文本字段中的文本不起作用

在我FXML文件我有這樣的標籤和文本框

<Label layoutX="156.0" layoutY="82.0" prefHeight="17.0" prefWidth="42.0" text="Name:" /> 

<TextField fx:id="nameTf" text="${controller.customer.name}" layoutX="204.0" layoutY="78.0" /> 

我的控制器內該FXML我有。

public class ServeController { 

@FXML private TextField nameTf; 
@FXML private TextField phoneTf; 

private String getName() { return nameTf.getText(); } 
private double getPhone() { return Double.parseDouble (phoneTf.getText()); 
} 

public void setName(String name) { 
    nameTf.setText(name); 
} 

private void setPhone(String phone) { 
    nameTf.setText(phone); 
} 

@FXML private void initialize() { 
} 

} 

和我從另一個控制器調用setter來設置名稱像這樣。

ServeController serve = new ServeController(); 

@FXML private void serveCustomer (ActionEvent event) throws Exception { 
    serve.setName(customers.get(namelistview.getSelectionModel().getSelectedIndex()).getName()); 

客戶是ObservableList,他們中的getName()函數返回的字符串名字(我已經測試這和它的作品)。

+0

1.我沒有在控制器中看到任何名爲'customer'的屬性。你期待FXML中的'text =「...」'做什麼? 2.您不在控制器上調用'setName(...)',您正在調用它作爲控制器類的另一個實例創建的對象。所以它不會改變文本字段中的文本。 –

+0

我期待FXML價值變成客戶名稱,目前客戶是公衆客戶(廚房廚房,串話機,字符串名稱),我將如何去解決第二個問題? – Dan

+0

但是控制器中沒有'customer'屬性?或者你是否忽略了它?要解決第二個問題,你需要在實際的控制器上調用'setName()'。當你加載相應的FXML並顯示它時,你可以從FXML Loader獲得控制器,但是你沒有解釋兩個控制器之間的關係,所以沒有人能告訴你如何做到這一點。 –

回答

1

的主要問題是詹姆斯指出,事實上,我在呼喚一個對象,而不是實際控制人的二傳手,通過插入下面的代碼

ServeController controller = fxmlLoader.getController(); 

,而不是

ServeController serve = new ServeController(); 

並通過引用控制器調用setters,一切似乎都正常工作。

感謝您的幫助James :)

相關問題