相关疑难解决方法(0)

传递参数JavaFX FXML

如何将参数传递给javafx中的辅助窗口?有没有办法与相应的控制器通信?

例如:用户从a中选择一个客户,TableView并打开一个新窗口,显示客户的信息.

Stage newStage = new Stage();
try 
{
    AnchorPane page = (AnchorPane) FXMLLoader.load(HectorGestion.class.getResource(fxmlResource));
    Scene scene = new Scene(page);
    newStage.setScene(scene);
    newStage.setTitle(windowTitle);
    newStage.setResizable(isResizable);
    if(showRightAway) 
    {
        newStage.show();
    }
}
Run Code Online (Sandbox Code Playgroud)

newStage将是新窗口.问题是,我找不到告诉控制器在哪里查找客户信息的方法(通过传递id作为参数).

有任何想法吗?

parameters dependency-injection javafx parameter-passing fxml

180
推荐指数
4
解决办法
16万
查看次数

如何使用相同的模型对象初始化JavaFX控制器?

脚本

我正在创建一个GUI,其中多个视图引用相同的模型对象.

我习惯了什么

在Swing中,如果我希望所有视图都引用相同的模型,我会将模型传递给构造函数.

我目前正在做什么

在JavaFX中,我通过在每个视图/控制器加载后在视图/控制器(菜单栏,拆分窗格,制表符......)中设置setter方法来传递模型.我发现这非常俗气和笨重.另外,我发现它不起作用,因为在某些情况下我需要在初始化某些控制器小部件之前模型已经存在于控制器中.

Lackluster Alternatives

(注意:我正在引用这些stackoverflow问题:

  • Controller.java文件中的Javafx 2.0操作方法Application.getParameters()
  • 传递参数JavaFX FXML
  • 带控制器的多个FXML,共享对象
  • 加载FXML时将参数传递给控制器)

  • 依赖注入

    • 我看过这个网站,http: //www.zenjava.com/2011/10/23/javafx-2-0-fxml-and-spring/,我看了一下google Guice,但我不知道看不到简单地给每个JavaFX视图/控制器提供相同模型对象的方法.看起来注入会为每个视图/控制器注入不同的模型.
  • 将模型对象保存为公共静态变量

    • 这是一个选项,但目前我不喜欢让公共静态模型如此开放和可用的想法.显然,我可以使它成为一个私有静态变量,并有getter和setter,但我也不喜欢这个想法.
  • 将参数从调用者传递到控制器

    • 我希望每个控制器在其构造函数中加载自身,并且我希望每个自定义控制器自动注入其父控制器.例如,卡片概述选项卡会像这样加载自身:

      public CardOverviewTab() {
          FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("card_overview_tab.fxml"));
          fxmlLoader.setRoot(content);
          fxmlLoader.setController(this);
      
          try {
              fxmlLoader.load();
          } catch (Exception e) {
              e.printStackTrace();
          }
      }
      
      Run Code Online (Sandbox Code Playgroud)
    • 并且SingleGameSetup控制器将卡概述选项卡自动注入变量:

      public class SingleGameSetupController extends AnchorPane {
      
          @FXML private CardOverviewTab cardOverviewTab;
      
          // Rest of the class
      }
      
      Run Code Online (Sandbox Code Playgroud)
    • 包含卡片概述选项卡的fxml部分如下所示:

      <CardOverviewTab fx:id="cardOverviewTab" />
      
      Run Code Online (Sandbox Code Playgroud)
    • 这样我不需要担心手动加载控制器,但我仍然有设置模型的问题.

  • 在FXMLLoader上设置控制器

    • 此选项与我习惯的类似,将模型作为参数传递给构造函数,但它仍然存在使用FXMLLoader手动加载控制器的问题.
  • 活动巴士

    • 我没有读太多内容,但从我所看到的事件总线似乎是不活跃和过时的.
  • 独生子

    • 这类似于对控制器可以检索的模型对象的公共静态引用,但我再次寻找更好的解决方案.另外,我不想要单身模型.

我在寻找什么

有没有办法以不那么繁琐的方式传递模型对象?我正在寻找一种简单的方法,如将模型传递给构造函数,但我不想处理通过FXMLLoader手动加载控制器,或者在加载控制器后设置模型.也许有一个类来检索模型是最好的选择,但我要求以防万一有更好的方法.

java dependency-injection controller javafx fxml

26
推荐指数
1
解决办法
3万
查看次数

JavaFX如何改变阶段

我正在使用Netbeans 7.2和Scene Builder 1.0来开发JavaFX应用程序.我设置了主屏幕,我想拥有它,所以我点击一个按钮,它将关闭主窗口并打开另一个.主Stage对象位于主类中,但控制器类是独立的,并且不能访问它,因为它不是静态的并且在不同的类中.如何更改场景或舞台?

java netbeans javafx scene scenebuilder

13
推荐指数
2
解决办法
5万
查看次数

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();
    }

}
Run Code Online (Sandbox Code Playgroud)

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) { …
Run Code Online (Sandbox Code Playgroud)

java javafx-2

8
推荐指数
1
解决办法
2万
查看次数