對於JavaFX,我是一個新手,最近我遇到了一個讓我非常困惑的問題。我使用一個名爲「MainController」的類來控制包含TabPane的FXML文件。每個選項卡由另一個控制器控制。但是有一種情況需要刪除標籤,所以我需要訪問MainController實例以從窗格中刪除當前活動的標籤頁。FXMLLoader無法找到正在運行的控制器實例並創建新的控制器實例
無論何時我使用此代碼來獲取當前運行的MainController的實例,我都會獲得一個全新的實例,並將其所有組件設置爲其默認值。
的代碼是:
FXMLLoader loader = new FXMLLoader(getClass().getResource("Main.fxml"));
loader.load();
MainController controller = loader.getController();
controller.closeCurrentTab();
protected void closeCurrentTab() {
tabPane.getTabs().remove(tabPane.getSelectionModel().getSelectedIndex());
}
我目前使用的靜態引用控制器來訪問它,因爲它是對我的作品的唯一解決方案。但我知道這是非常不專業的,我真的想避免這種情況。
我希望有人知道這裏有什麼問題。
非常感謝!這對我的標籤非常有用。 我只是有一個問題,如果我想創建一個新的窗口時做同樣的事情。試圖訪問控制器總是會導致nullPointerException。一旦我明白這個錯誤會更好一點,我會添加一個新的回覆。 – Geta1992
如果答案解決了你的問題,你能接受並投票嗎?這將關閉這個問題 - 那麼你可以爲另一個問題創建另一個問題。這使問題清楚。謝謝:) – DVarga
原來的問題是我需要訪問initialize()方法中的控制器,但它仍然是空的,因爲只能在此之後添加引用。 編輯:解決那個我自己。謝謝 ;) – Geta1992