如何在JavaFX 8中管理多个屏幕

时间:2015-10-16 08:40:41

标签: javafx-8

我是JavaFX的新手并且遇到了一些问题。

假设我有两个fxml文件,带有相应的控制器类。 每个fxml上都有一个按钮,它应该打开另一个屏幕并传递一个参数。

有人可以提供一个如何完成此操作的示例,谷歌没有任何帮助。

2 个答案:

答案 0 :(得分:1)

“屏幕”是指JavaFX Stage实例,对吧?如果是这样,那很简单:

  1. 加载第二个fxml文件
  2. 通过FXML加载程序获取控制器实例
  3. 通过调用控制器上的setter方法传递“参数”。
  4. 唯一有点不寻常的是获取控制器参考。您需要创建FXMLoader的实例。它不适用于通常调用的静态方法:

    (应用程序的主要类别)

    public class MyFXMLApp extends Application {
    
      @Override
      public void start(Stage stage) throws Exception {
    
        FXMLLoader loader = new FXMLLoader();
        loader.setLocation(getClass().getResource("MainForm.fxml"));
    
        Parent root = (Parent) loader.load();
    
        // as soon as the load() method has been invoked, the scene graph and the 
        // controller instance are availlable:
        MainFormController controller = loader.getController();
        controller.setText("Ready.");
    
        Scene scene = new Scene(root);
        stage.setScene(scene);
        stage.show();
    
      // ...
    

    (控制器)

      public class MainFormController implements Initializable {
    
        // some ui control:
        @FXML
        private Label label;
    
        // JavaFX property for values that shall be accessible from outside:
        private final StringProperty text = new SimpleStringProperty();
    
        public String getText() {
          return text.get();
        }
    
        public void setText(String value) {
          text.set(value);
        }
    
        public StringProperty textProperty() {
          return text;
        }
    
        @Override
        public void initialize(URL url, ResourceBundle rb) {
          System.out.println("MainFormController.initialize");
          this.label.textProperty().bind(this.text);
        }
    
      // ...
    

    该示例使用JavaFX属性在控制器中保存“参数” - 因此,值和它的更改很容易被观察,并且属性可能绑定到任何其他字符串属性。

答案 1 :(得分:0)

this.myUsers = us.getUsers();