我看了这个,这个,还有这个,但遗憾的是,没有一个能解决我的问题。组件总是空的。ID是一样的,但我仍然不知道我做错了什么。下面是我的代码:
应用类。
public class Main extends Application {
@Override
public void start(Stage primaryStage) throws Exception {
Parent root = FXMLLoader.load(LocalFileUtils.getResourceAsURL("RootView.fxml"));
primaryStage.setScene(new Scene(root));
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
RootView.fxml
<?xml version="1.0" encoding="UTF-8"?>
<?import java.lang.*?>
<?import javafx.scene.layout.*?>
<?import javafx.scene.shape.*?>
<?import javafx.scene.control.*?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.ColumnConstraints?>
<?import javafx.scene.layout.RowConstraints?>
<BorderPane id="mainPane" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="main.MainViewController">
<center>
<AnchorPane id="mainAnchorPane" prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER" />
</center>
</BorderPane>
控制器类
package main;
import java.net.URL;
import java.util.ResourceBundle;
import javafx.fxml.FXML;
import javafx.fxml.Initializable;
import javafx.scene.layout.AnchorPane;
public class MainViewController implements Initializable {
@FXML
private AnchorPane mainAnchorPane;
@Override
public void initialize(URL location, ResourceBundle resources) {
// TODO Auto-generated method stub
System.out.println("Started");
System.out.println(location); // Prints out he URL of the RootView
System.out.println(resources); //Always Null
System.out.println(mainAnchorPane); //Always Null
}
}
应用程序运行正常。我错过了什么吗?
我将fxml修改为@jonx建议的内容,一切正常。下面是新的FXML。
<AnchorPane fx:id="mainAnchorPane" prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER" />
在FXML中,您需要定义不同的ID。FXML中的id必须如下所示
Fx:id="mainAnchorPane"
我有一个JavaFX应用程序,它与用Java编写的控制器类一起使用FXML。在Java控制器中,在FXML节点初始化之前,我需要小心不要对其进行操作(否则我会得到一个NullPointerException),这在运行初始化方法之前是无法保证的。所以我发现自己经常这样做: 控制器在FXML文件中设置如下: 然后是Java文件中的控制器。 这是可行的,但它笨重且重复。我必须创建globalValue
问题内容: 我的课看起来像这样: 在FXMLLoader创建相应的控制器(在所给出的实例经由文件通过调用第一默认构造,然后)方法: 输出为: 那么,为什么存在这种方法呢?使用构造函数或方法初始化控制器所需的东西有什么区别? 问题答案: 简而言之:首先调用构造函数,然后@FXML填充所有带注释的字段,然后再调用。因此,构造函数无权访问引用文件中定义的组件的字段,而有权访问它们。 引用FXML简介:
我的类如下所示: 通过首先调用默认构造函数,然后调用方法,创建相应控制器的实例(在文件中通过给出): 输出为: 那么,为什么方法会存在呢?使用构造函数或方法初始化控制器所需的东西有什么区别? 谢谢你的建议!
我尝试加载一个FXML,并使用Java代码(而不是使用FXML标记)设置控制器。我在FXML中有不同的字段。我尝试加载(例如文本字段、按钮...)。 下面是一个例子: 如您所见,我创建了一个新的选项卡,为它设置文本,将它添加到tabpane,加载fxml,然后创建一个新的控制器,并将其设置为fxml的控制器。之后,我尝试在初始化之前在fxml中设置一个值,以便在控制器中使用它来更新文本字段或按钮。
问题内容: 我想延迟控制器的初始化,直到从服务器收到必要的数据为止。 我找到了针对Angular1.0.1的解决方案:延迟AngularJS路由更改,直到加载模型以防止闪烁,但无法使其与Angular1.1.0一起使用 模板 JavaScript http://jsfiddle.net/dTJ9N/1/ 问题答案: 由于$ http返回了promise,因此创建自己的deferred仅在htt
问题内容: 如果您有一个控制器来操作Angular.js中的$ scope变量,是否有惯用的方法: 重置控制器的$ scope,然后 重新启动控制器初始化? 对于复杂的控制器,不必将每个变量都重置为其初始值将非常方便,特别是如果您真正想要的是对控制器和范围进行简单的重新初始化。通过再次导航到相同的URL 并没有帮助。 编辑:假设我不能使用任何黑客工具,因为这会违反Chrome打包应用中的CSP。