我正在尝试使用 JavaFX 打开多个窗口,我有一个事件侦听器,可以在单击按钮时打开一个新窗口,如下所示:
@FXML
private void joinAction() {
Parent root;
try {
Stage stage = (Stage) joinButton.getScene().getWindow();
stage.close();
root = FXMLLoader.load(getClass().getResource("main.fxml"));
stage = new Stage();
stage.setTitle("TuneUs");
stage.setScene(new Scene(root));
stage.show();
} catch (IOException e) {e.printStackTrace();}
}
Run Code Online (Sandbox Code Playgroud)
第一个窗口打开,新窗口打开,但我的问题是让事件与我的第二个窗口一起工作
在main.fxml我有这一行:
<TextField id="chat_bar" onAction="#sendChat" layoutX="14.0" layoutY="106.0" prefHeight="22.0" prefWidth="403.0"/>
Run Code Online (Sandbox Code Playgroud)
然后在我的控制器类中我有这个方法:
@FXML
private void sendChat() {
System.out.println("test");
}
Run Code Online (Sandbox Code Playgroud)
但 Intellij 告诉我;没有为顶级元素指定控制器
所以,我的问题是:我是否需要创建多个控制器类,或者我可以为多个窗口只使用一个类吗?
我的 JavaFX 项目遵循以下步骤: 在Model类初始化中计算最优值Controller
创建FXMLLoader
设置Controller和view.fxml
渲染视图的新实例
我的 fxml 文件没有像fx:controller="com.example.Controller". IntelliJ 无法解析方法,onMouseClicked="#processMyButtonClick"因为它不知道要使用哪个控制器。No Controller specified for top level element. 有没有办法告诉 IntelliJ。如果在 FXML 中指定了控制器,Java 会抛出Controller value already specified异常。
结果,源代码控制日志被误报“发现 100 个错误”污染,并且#methodNameinfxml和public void methodName(){/*..*/}停止工作之间的链接。
有没有办法告诉 IntelliJ 从 POJO 类派生 fxml 控制器?
基于“没有为顶级元素 指定控制器”,当以编程方式设置控制器时,可以在 fxml 文件中指定控制器,但这是不可取的,因为我想在加载 fxml 之前初始化控制器。
我想整合JavaFX和CDI.网上有一些关于这些的好例子:
https://dzone.com/articles/fxml-javafx-powered-cdi-jboss http://fxapps.blogspot.com.br/2017/10/using-cdi-20-in-javafx-application.html
但是,我看到的所有示例都不能在现实世界中工作,因为它们无法注入多个Stage(primaryStage),如果它们是,我不知道如何.
所以我想知道在JavaFX/CDI项目中是否可以注入多个Stage(例如在模态窗口中使用......)
谢谢!