在这个项目中,我将SceneBuilder与Netbean的JavaFX库结合使用。我使用Scenebuilder为控制器类创建fxml和netbean。目标是构建一个要部署的相当复杂的应用程序。
我可以启动JavaFX应用程序并连接控制器类。然而,当我试图打开一个新窗口时,我似乎无法将控制器类绑定到新窗口。为了简单起见,由于后端很复杂,我想为新窗口提供一个单独的控制器类。
TL;DR -- 尝试在具有控制器类的 JavaFX 应用程序上打开一个新窗口。控制器类不绑定。
下面的代码示例
模型类——启动应用程序的包装器
public class Model extends Application{
public static void main(String[] args){
Application.launch(Model.class, args);
}
@Override
public void start(Stage stage) throws Exception{
Parent root = FXMLLoader.load(getClass().getResource("Sample.fxml"));
stage.setScene(new Scene(root));
stage.show();
}
}
主应用程序的Sample.fxml - fxml文件
示例.java -- 扩展可初始化,是示例.fxml 的控制器类。下面是我尝试打开标题为“服务器配置浏览器”的新窗口的代码片段
try{
Parent root = FXMLLoader.load(getClass().getResource("ServerConfigChooser.fxml"));
FXMLLoader loader = new FXMLLoader(getClass().getResource("ServerConfigChooser.fxml"));
ServerConfigChooser controller = new ServerConfigChooser();
loader.setController(controller);
loader.setRoot(root);
Stage stage = new Stage();
stage.setScene(new Scene(root));
stage.show();
} catch (IOException ex)
ServerConfigChooser.java实现可初始化
这就是我的问题所在。我不能简单地声明与.fxml文件中的变量具有相同fxid的变量。当调用类时,initialize()方法不激发。
在ServerConfigChooser类中使用构造函数的原因是我无法自动触发初始化()方法。我在构造函数中手动触发它。
欢迎任何解决方案!
这里的问题可能是你如何加载服务器配置选择器
(我感觉FXML加载了两次或类似的东西)。以下方法应该有效:
try {
FXMLLoader loader = new FXMLLoader(getClass().getResource("ServerConfigChooser.fxml"));
ServerConfigChooser controller = new ServerConfigChooser();
loader.setController(controller);
Parent root = (Parent) loader.load();
Stage stage = new Stage();
stage.setScene(new Scene(root));
stage.show();
}
catch(...) {...}
还要检查您是否没有在服务器配置中选择者.fxml
中指定fx:控制器
(可能冲突,实际上尚未尝试过)。
不要像那样两次加载FXML。可以多次加载同一.fxml文档(多个场景图/控制器),但如果要同时加载场景图和初始化控制器,则只需调用一次fxml加载程序。
这里有一个例子
FXMLLoader loader = new FXMLLoader(getClass().getResource("ServerConfigChooser.fxml"));
ServerConfigChooser controller = new ServerConfigChooser();
loader.setController(controller);
loader.setRoot(controller);
Parent root;
try {
root = (Parent) loader.load();
Scene scene = new Scene(root, 320, 200);
Stage stage = new Stage();
stage.setScene(scene);
stage.show();
} catch (IOException ex) {
Logger.getLogger(ServerConfigChooser.class.getName()).log(Level.SEVERE, null, ex);
}
请注意,
FXMLLoader类的这种方式冲突
例如控制器类
public class ServerConfigChooser extends AnchorPane implements Initializable {
...
}
和 .fxml
<代码>
问题内容: 当您运行/调试它们时,是否可以将eclipse配置为在新窗口中打开控制台应用程序而不是其自己的控制台? 我正在调试客户端/服务器应用程序,我想一次看到两个应用程序的输出,而不必在选项卡之间切换… 问题答案: 在eclipse中,您可以有两个控制台视图…在控制台视图上,您有一个名为“打开控制台”的按钮(控制台视图中最右边的按钮)。如果单击此按钮并选择选项3(新控制台视图),将看到两个
我目前正在Spring Boot 2.4.0中编写一个应用程序,它需要侦听多个端口(具体来说是3个-但将来可能是4个)。这个想法是每个端口都提供不同的API供其他服务/应用程序连接到它。 所以,对于一个最小的工作示例,我会说我们有一个像这样的SpringBootApp: 现在,我想让它在3个不同的端口上监听,比如8080、8081和8082。所有人(!)对其中一个端口的请求,应由特定控制器“负责”
问题内容: 我知道如何更新自己的程序,也知道如何使用预定义的Uri打开程序(例如,用于短信或电子邮件) 我需要知道如何创建一个意图来打开MyTracks或其他我不知道他们在听什么意图的应用程序。 我是从DDMS获得此信息的,但是我并没有成功将其转换为可以使用的Intent。这是从手动打开MyTracks时获取的。 谢谢你的帮助 问题答案: 首先,Android中的“应用程序”概念是一个扩展的概念。
我是Eclipse java、Gradle和JavaFX新手。最近我正在尝试用gradle Project编写一个javafx应用程序。以下是我想提供的各种细节。 Javafx SDK版本和位置 Scene Builder版本和位置 ui.fxml: Build.Gradle 我怀疑这里有一些问题,因为当我运行gradle项目时,我不能运行它。我只能建造它。 当我运行这个时,我得到了相当多的错误。
问题内容: 有什么办法可以使可执行文件.jar双击后打开命令行? 我正在制作一个基于文本的冒险游戏。截至目前,它只是带有房间的迷宫。最终它将变得更大,更深入,但是现在我只想了解基本结构。无论如何,要完成这项工作,我一直在从System.out.printf命令和java.util.Scanner获取输出和输入。到目前为止,所有功能都运行良好,但是当我尝试将其发送给不知道如何或者不想从命令行运行程序
在我的JavaFX FXML应用程序中,我希望当用户单击主窗口中的某个菜单项时弹出一个辅助窗口,这样用户就可以在其中输入一些输入,然后在单击按钮时将这些输入提供给应用程序,并且辅助窗口将被关闭。 所有的教程都有点离谱。它们描述了如何在纯JavaFX中实现这一点,这显然不同于您在FXML中使用的方式,或者它们解释了如何切换场景,这将关闭旧场景。我想这应该很简单,可以定义FXML布局及其控制器,用它们