- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
最近我开始学习 JavaFX,现在有些事情困扰着我,我找不到解决我的“问题”的方法。我发现了类似的问题和一些解决方案来解决像我这样的问题,但我找不到适合我的,或者只是我做错了什么。我想要做的是拥有一个具有自己的 FXML Controller 类的主 FXML 文件。然后我想在主 FXML 中添加(导入)其他也有 Controller 的 FXML 文件。我尝试了几件事,但没有任何效果,所以我决定描述我在做什么。首先,我使用 Scene Builder 创建主 FXML 文件,然后为主 FXML 创建 Controller 。然后我在 Scene Builder 中将 Main FXML 的 Controller 类设置为主 Controller (当然……)。之后我对第二个 FXML 做同样的事情。然后我尝试将第二个 FXML 导入到 Main FXML 并且它工作正常,如果我没有为第二个 FXML 设置 Controller 。但是,如果我在将第二个 FXML 导入到主 FXML 之前为它选择了一个 Controller ,我仍然能够导入 FXML 文件并保存它,但是在我尝试运行该程序之后,我收到了一个错误。所以基本上我想做的是在一个主 FXML 文件中有多个 FXML 文件和它们自己的 Controller ,它也有一个 Controller 类。我完全不确定这是否可能,所以请告诉我这是否可能,如果可能的话,我做错了什么。这是我的代码:
public class MainSceneController implements Initializable {
@FXML
private TextField mainTxtField;
public MainSceneController() {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("MainScene.fxml"));
fxmlLoader.setController(this);
fxmlLoader.setRoot(this);
try {
fxmlLoader.load();
} catch (IOException exc) {
} }
@FXML
public void buttonActionMethod(ActionEvent event) {
mainTxtField.setText("Button1 is clicked");
}
@Override
public void initialize(URL location, ResourceBundle resources) {
} }
我调用了第二个 FXML 和第二个 Controller LeftScene 和 LeftSceneController,所以这里是第二个 Controller 的代码:
public class LeftSceneController implements Initializable {
@FXML
private TextField leftTxtField;
public LeftSceneController() {
FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("MainScene.fxml"));
fxmlLoader.setController(this);
fxmlLoader.setRoot(this);
try {
fxmlLoader.load();
} catch (IOException exc) {
}
}
@FXML
public void button2Action(ActionEvent event) {
leftTxtField.setText("Button 2 is clicked");
}
@Override
public void initialize(URL location, ResourceBundle resources) {
} }
最后,这是 MainClass,其中有 main 方法和 start 方法:
public class MainClass extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) throws Exception {
Parent root = FXMLLoader.load(getClass().getResource("MainScene.fxml"));
Scene scene = new Scene(root);
primaryStage.setScene(scene);
primaryStage.setTitle("Multiple FXMLs in one");
primaryStage.show();
} }
我希望你能得到我想做的事。正如我所说,我已经尝试了很多东西,但没有一个能按照我想要的方式工作。如果我在导入之前没有为第二个 FXML 设置 Controller 类,这个版本正在编译和运行,但正如您所料,导入的 FXML 中的第二个按钮没有做任何事情。如果可以的话,我会发布屏幕截图,但我是新来的,通常我只是在阅读,所以我不允许发布屏幕截图。我也尝试发布我的 FXML 代码,但我遇到了系统问题,我无法发布超过一行的代码。
那么……是否可以按我想要的方式进行这项工作?
另外,如果您阅读了所有这些乱七八糟的内容,至少感谢您的宝贵时间! :)
最佳答案
已经有一段时间了,但我终于找到了问题的答案。我找到了 this YouTube 上的视频,它显示的正是我所需要的。尽管我在逐步执行视频中的操作时发现了一些问题。
首先,如果我将另一个 FXML 文件导入到主 FXML 中,就像在本教程中一样,SceneBuilder 正在导入 FXML,就像导入的 FXML 中的内容在主 FXML 中一样,这会导致问题。我的意思是,例如,如果您在导入的 FXML 中有一个按钮,当您使用 SceneBuilder 在主 FXML 中导入它时,导入的按钮会像一个新按钮一样出现在主 FXML 中,并包含它的所有信息(位置、onClickMethod、等)并且它不是应该的样子。这会导致错误,因为 Java 正在主 Controller 中寻找导入按钮的 onClickMethod,而不是在导入的 FXML 的 Controller 中。我不知道为什么它与我不同,它不像视频中那样,但解决方案很简单。如果你想将一个 FXML 文件导入另一个 FXML,你应该使用编辑器来完成,你只需要在主 FXML 的内容中添加以下行:
<fx:include fx:id="importedFXML" source="ImportedFXML.fxml" />
在这种情况下重要的是 fx:id 应该与 .FXML 文件同名,但首字母小。
另一件事,在视频中展示并引起了我的问题,如果您想要多个导入的 FXML 文件并且您希望它们相互通信。该视频展示了如何执行此操作,但并未提及您必须在 MainController 中创建的导入 FXML 文件的 Controller 对象必须具有相同的名称,如 fx:id + Controller 一词。例如上面的 fx:id,对象应该是这样的:
@FXML private ImportedFXMLController importedFXMLController
如果 ImportedFXMLController 是导入的 FXML 的 Controller
所以,我希望这对某人有所帮助。
关于java - 一个 Main FXML 中具有多个 Controller 的多个 XML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29348427/
我的主 UI 是在 FXML 文件中定义的,并且应该包含人员列表。一个人会显示一张图片和一些不同的只读文本行(姓名、年龄等......)该列表本身在整个运行时会不断变化。 (增删改查) 我知道可以创建
正如标题所述,构建表并将所有内容添加到表的初始化方法与 FXMLLoader 之间存在一定的冲突,FXMLLoader 应该为弹出窗口加载 FXML。 我的代码: 主要: import javafx.
我正在创建丰富的 UI 应用程序,我在 FXML 中使用 FXML,每个部分都有单独的 Controller 。我决定关注this教程并使用我的 fxml 作为组件。所以我使用类作为 Controll
你好, 我有以下问题。 是否可以创建一个主 fxml 文件并放置/包含另一个应该具有用户定义属性的 fxml 文件。 例如,我有:main.fxml 和一个fan_object.fxml 然后将 3
我正在尝试制作一个具有用于制作新项目的对话框的应用程序。我已经对其进行了编程,但想要清理文件结构,因此我将对话框及其 Controller 的 fxml 移至它们自己的包中。该对话框的文件位于名为 n
你好, 我有以下问题。 是否可以创建一个主 fxml 文件并放置/包含另一个应该具有用户定义属性的 fxml 文件。 例如,我有:main.fxml 和一个fan_object.fxml 然后将 3
我的应用程序有选项卡式 Pane ,因此为了保持 fxml 文件易于管理,我有一个包含选项卡的主 fxml 文件,以及每个其他选项卡的单独 fxml 文件。这工作正常,但由于某种原因,应用程序已停止加
如果状态为“1”,我想加载另一个 FXML 文件。但在下面的代码中,它不会从初始化加载另一个 FXML。如果我使用按钮,那么此代码可以工作,但我想在没有任何按钮的情况下执行此操作。谁能帮我提个建议吗?
我是 JavaFX 的新手,我想知道是否有办法将一个 fxml 文件放在 child.fxml 中,例如 parent.fxml。 为什么我需要这个? 想法是,我想创建独立的屏幕(小屏幕)并编写一个父
我的程序有一个主要的 FXML 文档,其中包含 TabPane .对于每个选项卡,我希望它有自己的 Controller 和 fxml 文件。当我尝试将外部 fmxl 文件包含到主 fxml 文档中时
我有一个用 fxml 编写的边框 Pane ,它的左 Pane 和中央 Pane 具有可互换的布局。 边框 fxml:
在上面的 fxml 中,我有许多使用相同源 fx:include source="MyCombo.fxml"的 fxml include 标记。可以这样做吗?这样做会影响 F
我需要创建许多不同的 FXML 文件,并且每个文件都有一致的布局。每个都有一个 AnchorPane,它将保存单独的内容。 有没有办法加载“基本”FXML 文件,然后加载第二个 FXML 文件,并将数
我正在尝试创建一个非常简单的带有黑色背景的VBox。就这样。没有其他的。我使用 FXML 来描述我的 VBox。 样本.fxml: Controller .java: package sa
我不明白为什么我总是有同样的错误: image 当我尝试在我的strcuture项目中添加库(fx java)时。 我的build.gradle: plugins { id 'java'
这就是我想要实现的目标。 /Package A/ /Package A/ApplicationController.java /Package A/Application.fxml 在我的 Appli
我有两个 FXML 文件。第一个描述了要显示的第一个 Pane ,其中包含一个选项卡 Pane 、一个菜单和一个菜单项,该菜单项应该在选项卡 Pane 中打开一个新选项卡并在其中绘制一组新节点。这是代
我想要做的是,如果调整场景(应用程序窗口)的大小,我想相应地调整窗口内内容的大小。我已经发布了到目前为止我已经完成的代码 加载器类 public class ResizingButtons exten
我使用的是 Java JDK 13 和 FontAwesomeFX 11。 我有一个 FXML 文件,其中包含一些 FontAwesomeIconViews,但是当将该文件加载到我的 Controll
我明白了 javafx.fxml.LoadException: 当我使用以下代码行加载 fxml 文件时。 AnchorPane anchorPane = (AnchorPane)loader.loa
我是一名优秀的程序员,十分优秀!