2016-05-30 70 views
0

目標是打印標籤的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; 
    } 
} 
+0

我想在這裏你只是省略了地方'root'(從FXML文件加載)在場景圖中的代碼並僅爲了簡化問題中的代碼而顯示它。否則,您的'getController'方法似乎無法做任何有用的事情:它只能返回一個連接到從不顯示的UI的控制器。 –

+0

@James_D沒有那個實際的代碼。它的目的不是爲了顯示舞臺,而是僅僅返回fxml文件控制器的控制器而不是它的一個實例,這樣我就可以得到正確的數據。至於包含在函數中的根,如果我把它拿出來,它就給了我一個錯誤,所以我只是把它留下了。對於Javafx來說很新穎,所以從那時起,iive就研究了更多從控制器到控制器的官方數據返回方式。 – JSextonn

+0

但它返回的是控制器的另一個實例,而不是與顯示的UI鏈接的實例。不知道這可能會做什麼有用的。 –

回答

0

這是屬性會派上用場的地方。您的代碼目前僅檢索initilised值,使用性能監控,當標籤文本的變化:

label.textProperty().addListener(new ChangeListener<String>() { 
     @Override 
     public void changed(ObservableValue<? extends String> observable, String oldValue, String newValue) { 
      System.out.println(newValue); 
     } 
}); 
+0

從控制器內部很好地工作,但是我如何在主控制器外部實現此控制器? – JSextonn

+0

沒關係,解決了它:D謝謝 – JSextonn

+0

總是善於爲自己制定最後的步驟,這意味着你會更好地理解它。 – Kerry