当前位置: 首页 > 知识库问答 >
问题:

JavaFx元素未绑定到fx:id[duplicate]上的控制器变量

马德厚
2023-03-14

这可能是先导错误,但是FXML属性没有绑定到fx:id上的控制器类。我把它简化为一个微不足道的例子,但仍然“没有快乐”。我忽略了什么?

<?xml version="1.0" encoding="UTF-8"?>
<?import javafx.scene.layout.AnchorPane?>
<?import javafx.scene.layout.BorderPane?>

<BorderPane fx:id="mainFrame" maxHeight="-Infinity" maxWidth="-Infinity" minHeight="-Infinity" minWidth="-Infinity" prefHeight="400.0" prefWidth="600.0" xmlns="http://javafx.com/javafx/8.0.65" xmlns:fx="http://javafx.com/fxml/1" fx:controller="sample.controller.BorderPaneCtrl">
  <left>
    <AnchorPane fx:id="anchorPaneLeft" prefHeight="200.0" prefWidth="200.0" BorderPane.alignment="CENTER" />
  </left>
</BorderPane>

相关的Java代码是...

package sample.controller;

import javafx.fxml.FXML;
import javafx.scene.layout.AnchorPane;

public class BorderPaneCtrl {
    @FXML private AnchorPane anchorPaneLeft;

    public BorderPaneCtrl() {
        /* so, @FXML-annotated variables are accessible, but not
         *   yet populated
         */
        if (anchorPaneLeft == null) {
            System.out.println("anchorPaneLeft is null");
        }
    }

/* this is what was missing...added for "completeness"
 */
@FXML
public void initialize() {
    /* anchorPaneLeft has now been populated, so it's now
     *   usable
     */
    if (anchorPaneLeft != null) {
        // do cool stuff
    }
}

自我不是这里的问题,我很确定我忽略了一些简单的东西。

共有1个答案

充鑫鹏
2023-03-14

在constuctor中还没有分配FXML元素,但是可以在已经分配元素的地方使用Initializable接口。

public class Controller implements Initializable {
    @FXML
    AnchorPane anchorPaneLeft;

    public Controller() {
        System.out.println(anchorPaneLeft); //null
    }

    @Override
    public void initialize(URL location, ResourceBundle resources) {
        System.out.println(anchorPaneLeft); //AnchorPane
    }
}

我假设您知道应该使用FXML创建控制器,例如:fxmlloader.load(getClass().getResource(“sample.FXML”);

 类似资料:
  • 从正在运行的javafx应用程序打开新的javafx窗口时,我无法将fxml变量绑定到控制器类中的局部变量。 请注意,对于正在运行的应用程序,我可以毫无问题地绑定到同名变量,在运行时在正在运行的应用程序中填充ComboBox。欢迎任何解决方案。 调用新类的代码(ServerConfigChooser) 在运行的应用程序中工作的绑定示例(运行时执行的代码) 控制器类中的fxid“cb_01_fxid

  • 我第一次使用javafx和场景生成器,据我所知,您在场景生成器中为对象创建的fx: id必须与相关控制器类中该对象的变量名匹配。对于我现在正在编写的GUI,所有按钮都遵循这一点,但当我添加ContextMenu时,名称匹配时会出现错误。然而,如果我将fx: id更改为与控制器类中的变量名不匹配,程序将运行。这是怎么回事!? EClassDTAT。fxml EClassDTATController.

  • 首先,我知道这个标题不是最好的,也不是网站推荐/要求的,但我不知道该怎么写。 我正在使用JQuery编辑我网站上的twitter小部件。我没有问题这样做,直到这一个元素。 我已经检查了我正在搜索正确的元素并且我正在尝试编辑的是 我的代码片段: 第一行编辑元素,它工作得很好,但是JQuery找不到。 对不起,这是我第一次在网站上工作,也是第一次使用JS和JQuery

  • 问题内容: 我有一个变量,将由一个或多个控制器使用,由服务更改。在那种情况下,我建立了一个服务来将该变量保存在内存中,并在控制器之间共享。 问题是:每次变量更改时,控制器中的变量都不会实时更新。 我创建这个小提琴来提供帮助。http://jsfiddle.net/ncyVK/ -–请注意,当我增加count的值时,或永远不会更新。 如何将Service / Factory变量绑定到Controll

  • 我有一个复杂的对象,我需要在提交表单时传递给控制器。这个复杂对象有一个对象和一个对象列表。这是我的Web API控制器,它通过使用Ajax的post接收复杂对象: 这是我的html表单: 这是我通过Ajax发送复杂对象的jQuery代码:

  • 如何在JavaSpringBoot应用程序中从配置yml文件加载对象列表? 我已经尝试了几个来源: 配置-属性-在-Spring-引导 Spring Boot配置属性示例 SpringBoot 2的元素没有绑定 堆栈:Java11,SpringBoot 2.1.4,Lombok,. yml格式的配置文件。 我尝试实现简单的@Component,它将从配置文件加载数据。 配置值为: 用于数据加载的J