我刚刚开始使用JavaFX Scene Builder来构建一个小型应用程序。
它由属于login.fxml的控制器类Login.java组成,其中FXML文件registrierung.fxml通过名为注册点击(动作事件)的方法加载:
public class Login {
@FXML
private void registrationClicked(ActionEvent event){
try{
((Node) (event.getSource())).getScene().getWindow().hide();
FXMLLoader loader = new FXMLLoader(getClass().getResource("/view/fxml/registrierung.fxml"));
Parent root = (Parent) loader.load();
Stage stage = new Stage();
Scene scene = new Scene(root);
stage.setTitle("Registration");
stage.setScene(scene);
stage.setResizable(false);
stage.show();
} catch(IOException e){
e.printStackTrace();
}
}
现在我想参考一下“registrierung”的阶段。fxml“在控制器类”注册表中。java“通过根节点vboxRoot:
@FXML
private VBox vboxRoot;
Stage stage = (Stage) vboxRoot.getScene().getWindow();
但是,“getScene()”总是导致NullPointerException。两个FXML文件的控制器类都在场景生成器中调整。
这就是我在registrierung.fxml中设置rood节点的方式:
<VBox fx:id="vboxRoot" maxHeight="-Infinity" maxWidth="-Infinity" prefHeight="267.0" prefWidth="355.0" stylesheets="@../css/styles.css" xmlns="http://javafx.com/javafx/8" xmlns:fx="http://javafx.com/fxml/1" fx:controller="businesslogik.Registrierung">
我做错了什么?
实现可初始化接口对我来说不起作用(Java 8)。getScene()方法始终为我返回null。所以我必须做以下几件事:
FXMLLoader loader = new FXMLLoader(getClass().getResource("MyGui.fxml"));
Parent root = (Parent)loader.load();
//do stage and scene stuff - i skip it here
MyController controller = (MyController)loader.getController();
stage.setOnShown(controller::adjustUI);
在控制器中,我有:
public void adjustUI(WindowEvent event) {
Scene scene = myComponent.getScene();
//do stuff and do ui adjustments here
}
我遇到了这个问题,并发现通过调用这样的方法(当场景变得可见并连接到节点时,这将触发):
private void determinePrimaryStage() {
rootPane.sceneProperty().addListener((observableScene, oldScene, newScene) -> {
if (oldScene == null && newScene != null) {
// scene is set for the first time. Now its the time to listen stage changes.
newScene.windowProperty().addListener((observableWindow, oldWindow, newWindow) -> {
if (oldWindow == null && newWindow != null) {
primaryStage = (Stage)newWindow;
}
});
}
});
}`
然后我可以稍后做这样的事情:
if(primaryStage == null) {
Platform.runLater(()-.{......
}else {
//do whatever
}
希望这有帮助。
您正在尝试为尚未初始化的对象获取场景。如果你在医院做同样的手术
@Override
public void initialize(URL fxmlFileLocation, ResourceBundle resources) {
Stage stage = (Stage) vboxRoot.getScene().getWindow();
}
或者,如果有一个事件在单击某个对象后触发(在加载场景后执行)
@FXML
private void action(ActionEvent event) throws IOException {
Stage stage = (Stage) vboxRoot.getScene().getWindow();
}
这将工作!
问题内容: 我刚刚开始使用JavaFX Scene Builder来构建一个小型应用程序。 它由属于“ login.fxml”的控制器类“ Login.java”组成,其中通过称为“ registrationClicked(ActionEvent event)”的方法加载了FXML文件“ registrierung.fxml”: 现在,我想通过根节点vboxRoot引用控制器类“ Registri
加载样式表,并在用户单击按钮时将其应用于场景 调用getScene()返回null。 函数所在的类是场景的控制器和根节点,我使用SceneBuilder 2.0,并将类设置为加载fxml的控制器,它是一个。 问题代码是类中的一个成员函数,标记是这样的,我可以通过设置按钮来调用它。 完整的代码可以在https://github.com/SebastianTroy/FactorioManufactur
问题内容: 我昨天在JavaFX中构建了一个小应用程序。我想在Controller类中获取应用程序的场景。每次尝试在控制器类中获取场景时,都会出错。我可以在Controller类的Button上设置OnKeyPressed方法,效果很好。但是,只有在选择Button后,它才能正常工作。我只能在Main类方法replaceSceneContent中获得场景。我已经读过这个问题,但是我在initial
我昨天在JavaFX中构建了一个小应用程序。我想在Controller类中获取应用程序的场景。每次我试图在控制器类中获取场景时,我都会出错。我可以在Controller类中的Button上设置OnKeyPested-method,工作正常。但是只有当按钮被选中时,它才工作正常...我可以只在Main类方法replace eSceneContent中获取场景。我已经读过这个问题了,但是我在初始化方法
代码: 这里的问题是:lowEndDate和highEndDate总是为null,不管输入是什么。
问题内容: 我创建了一个简单的JavaFX应用程序,该应用程序在TextField中接收来自用户的输入。我将来自SceneBuilder的KeyTyped事件附加到控制器。我的函数如下所示: 当我键入回车键时,此功能始终打印出UNDEFINED。有想法该怎么解决这个吗?我键入的其他字母似乎也有相同的问题。 问题答案: 是一个特殊事件。它没有但已设置。 请参见字母“ a”的示例: 和javadoc: