早上好,親愛板創建匿名控制器的實例,並使用它的方法
有Java中的方法,使匿名類的實例:
Class<?> c = Class.forName("class name");
Method method = c.getDeclaredMethod ("method name", parameterTypes)
method.invoke (objectToInvokeOn, params)
如果我願意做的JavaFX控制器的新實例我只想做:
FXMLLoader loader = new FXMLLoader(getClass().getResource(
"MyClass.fxml"));
MyClassCtrl ctrl = loader.getController();
Parent root = (Parent) loader.load();
ctrl.methodNameOfMyClassCtrl();
但現在我有一個例子,我需要做的控制器的情況下用自己的法,而編碼這是不知道的。它們通過運行時知道,取決於用戶點擊了哪個按鈕。
所以我需要的是上面描述的兩種技術的組合。現在我做了以下,但它不會工作。
String methodName = "myMethod";
String className = "MyController";
FXMLLoader loader = new FXMLLoader(getClass().getResource(className + ".fxml"));
Class c = Class.forName(className);
loader.setController(c);
Parent root = (Parent) loader.load();
Method m = c.getDeclaredMethod(methodName, null);
m.invoke(null, null);
我懷疑,我是第一個嘗試這樣的事情 - 所以你們是我的最後一次機會。
感謝和問候 埃尼斯
我不明白你爲什麼這樣做。您可以在控制器中放置一個'fx:controller'屬性,FXML加載器將自動爲FXML創建控制器,並在控制器上調用'initialize'方法。因此,您可以動態加載您的FXML,並且JavaFX系統爲您處理所有其他事情 - 您無需將控制器設置爲Java代碼中的加載器,也不需要使用反射來調用方法。 – jewelsea 2015-03-31 09:51:07
「不起作用」是什麼意思?是否有一些錯誤跟蹤或什麼? – jewelsea 2015-03-31 09:54:51