我試圖加載FXML和使用Java代碼(不與FXML標籤)設置控制器。我在FXML中有不同的字段。我試圖加載(例如文本框,按鈕...)。的JavaFX - 如何FXML控制器在設定值初始化
這裏是例子:
Tab tab = new Tab();
tab.setText("TesetTabAdd");
tabpane.getTabs().add(tab);
FXMLLoader loader = new FXMLLoader(getClass().getResource("tab.fxml"));
TabController tabCont = new TabController();
tabCont.setName("Sandro");
loader.setController(tabCont);
try {
tab.setContent((Node)loader.load(getClass().getResource("tab.fxml")));
} catch (IOException ex) {
System.out.println(ex);
}
正如你可以看到我創建一個新的選項卡,設置它,將它添加到tabpane,加載FXML,然後創建一個新的控制器和設置文本它作爲FXML的控制器。在此之後,我嘗試在初始化之前在fxml中設置一個值,以便我可以在控制器中使用它來更新文本字段或按鈕。
這裏是我的控制,我試圖設置:
public class TabController implements Initializable {
@FXML private TextField name;
private final StringProperty nameProp = new SimpleStringProperty();
public String getNameProp() {
return nameProp.get();
}
public void setNameProp(String value) {
nameProp.set(value);
}
public StringProperty namePropProperty() {
return nameProp;
}
public void setName(String name){
nameProp.setValue(name);
}
public String getName(){
return nameProp.get();
}
@Override
public void initialize(URL url, ResourceBundle rb) {
name.textProperty().bind(nameProp);
}
}
我結合嘗試過,但它不工作。
修改我的CREATETAB()方法LITTEL位。在這裏我設置控制器,然後使用setName方法。但我textfield不顯示任何東西。 System.out.println(tabCont.getName());
方法打印出「Sandro」!
public void createTab(){
try{
Tab tab = new Tab();
tab.setText("TesetTabAdd");
tabpane.getTabs().add(tab);
FXMLLoader loader = new FXMLLoader();
TabController tabCont = new TabController();
loader.setController(tabCont);
tabCont.setName("Sandro");
tab.setContent((Node)loader.load(getClass().getResource("tab.fxml")));
System.out.println(tabCont.getName());
} catch (IOException ex) {
System.out.println(ex);
}
}
謝謝。是的,這是完美的。你能告訴我你在哪裏找到這些信息嗎?在JavaFX API中?我覺得如此愚蠢以至於問一些這樣的簡單問題,而且我的自己並沒有得到正確的答案。 !; – Steinliiippp
@Steinliiippp,不幸的是我自己的經驗..) –
哦~~好:(感謝您的幫助 – Steinliiippp