Controller.java文件中的Javafx 2.0操作方法Application.getParameters()

考虑以下样本。

如何访问控制器中应用程序的参数/参数?

谢谢。


注意:我曾尝试将App.java和MyController.java混合在一个Class文件中,但没有帮助。


App.java(简化):

public class App extends Application { public static void main(String[] args) { Application.launch(App.class, args); } @Override public void start(Stage primaryStage) throws Exception { // output arguments in console System.out.println(getParameters().getNamed().toString()); Parent root = FXMLLoader.load(getClass().getResource("MyView.fxml")); final Scene scene = new javafx.scene.Scene(root); primaryStage.setScene(scene); primaryStage.show(); } } 

MyController.java(简化):

 public class MyController implements Initializable { @Override public void initialize(URL url, ResourceBundle rb) { // HOW TO getParameters() HERE ? } @FXML private Button myButton; @FXML private void my_Action(ActionEvent event) { // HOW TO getParameters() HERE ? } } 

MyView.fxml(简化):

   

1.最简单的方法 – 将它们保存在应用程序中:

 public class App extends Application { public static void main(String[] args) { launch(); } public static String parameters; @Override public void start(Stage primaryStage) throws Exception { parameters = getParameters().getNamed().toString(); Parent root = FXMLLoader.load(getClass().getResource("MyView.fxml")); final Scene scene = new javafx.scene.Scene(root); primaryStage.setScene(scene); primaryStage.show(); } } 

并在控制器中读取它们:

 public class MyController implements Initializable { @Override public void initialize(URL url, ResourceBundle rb) { System.out.println(App.parameters); } 

2.在下一个主题中描述了更复杂(但更好的一般)方法:

  • 传递参数JavaFX FXML
  • 带控制器的多个FXML,共享对象
  public static  T load(String resource, final P parameter) throws MoisException { try { logger.debug("resource: {}; parameter: {}", resource, parameter); FXMLLoader loader = new FXMLLoader(getResource(resource)); // pass parameter into Controller,before invoke the initialize() loader.setControllerFactory(new Callback, Object>() { @Override public Object call(Class param) { Object controller = null; try { controller = ReflectUtil.newInstance(param); } catch (InstantiationException e) { throw new MoisException("can't new instance for: " + param.getName(), e); } catch (IllegalAccessException e) { throw new MoisException("can't new instance for: " + param.getName(), e); } if (controller instanceof ParameterAware) { ((ParameterAware

) controller).setParameter(parameter); } return controller; } }); T node = (T) loader.load(); // pass parameter to node node.setUserData(parameter); return node; } catch (IOException e) { throw new MoisException("can't load the file: " + resource, e); } }

和ParameterAware:

 public interface ParameterAware { void setParameter(T param); }