目標是打印標籤的CURRENT文本。標籤在整個程序中不斷變化,並且使用我目前的方法,我只能檢索標籤的初始化值。返回已更新的Javafx控制器
我使用檢索控制器實例什麼:
public class ShowWindow {
public static <T> T getController(String path){
try {
FXMLLoader fxmlLoader = new FXMLLoader(ShowWindow.class.getResource(path));
Parent root = fxmlLoader.load();
return fxmlLoader.getController();
}catch(IOException ex){
ex.printStackTrace();
}
return null;
}
}
這是調用從主功能塊:
private void close(Stage stage) {
String name = ShowWindow.<MainController>getController(fxmlFile).nameLabel.getText();
System.out.println(name);
stage.close();
}
主控制器
public class MainController implements Initializable {
// Label.
// Code that changes label.
}
什麼幫助,並提前感謝。
編輯: 另一個窗口函數似乎在返回fxml文件的控制器時工作,但在這種情況下,它顯示文件,然後返回控制器。
public class ShowWindow {
public static <T> T showWindow(String path){
try {
FXMLLoader fxmlLoader = new FXMLLoader(ShowWindow.class.getResource(path));
Parent root = fxmlLoader.load();
Stage stage = new Stage();
stage.initModality(Modality.APPLICATION_MODAL);
stage.setScene(new Scene(root));
stage.showAndWait();
return fxmlLoader.getController();
}catch(IOException ex){
ex.printStackTrace();
}
return null;
}
}
我想在這裏你只是省略了地方'root'(從FXML文件加載)在場景圖中的代碼並僅爲了簡化問題中的代碼而顯示它。否則,您的'getController'方法似乎無法做任何有用的事情:它只能返回一個連接到從不顯示的UI的控制器。 –
@James_D沒有那個實際的代碼。它的目的不是爲了顯示舞臺,而是僅僅返回fxml文件控制器的控制器而不是它的一個實例,這樣我就可以得到正確的數據。至於包含在函數中的根,如果我把它拿出來,它就給了我一個錯誤,所以我只是把它留下了。對於Javafx來說很新穎,所以從那時起,iive就研究了更多從控制器到控制器的官方數據返回方式。 – JSextonn
但它返回的是控制器的另一個實例,而不是與顯示的UI鏈接的實例。不知道這可能會做什麼有用的。 –