Java 如何通过名称空间和FXMLLoader将复杂对象传递到FXML?

Java 如何通过名称空间和FXMLLoader将复杂对象传递到FXML?,java,javafx,fxml,Java,Javafx,Fxml,我有一个自定义组件 公共类CustomBtn扩展按钮{ 私有ComplexObject属性; 公共void集合属性(ComplexObject属性){ 这个。属性=属性; } 公共ComplexObject getProperties(){ 返回属性 } } 公共类ComplexObject{ 字符串x=“你好”; int y=42; } 在FXML中,我可以通过 我想通过FXML加载器将一个对象传递到属性中 公共类SampleAppLauncher扩展了应用程序{ 公共无效开始(阶段

我有一个自定义组件


公共类CustomBtn扩展按钮{
私有ComplexObject属性;
公共void集合属性(ComplexObject属性){
这个。属性=属性;
}
公共ComplexObject getProperties(){
返回属性
}
}
公共类ComplexObject{
字符串x=“你好”;
int y=42;
}
在FXML中,我可以通过


我想通过FXML加载器将一个对象传递到属性中


公共类SampleAppLauncher扩展了应用程序{
公共无效开始(阶段primaryStage){
URL val=FXView.class.getClassLoader().getResource(“sample.fxml”);
FXMLLoader=新的FXMLLoader(val);
Map ns=getNameSpace();
ComplexObject属性=新的ComplexObject();
property.x=“再见”;
属性y=420;
//这是我要传递的对象
ns.put(“道具”,财产);
Pane p=loader.load();
场景s=新场景(p);
初级阶段.第二纪(s);
primaryStage.show();
}
我想用

${}anotion

比如:


${props}
可能吗

我知道我可以使用@FXMl之类的“代码隐藏”方法,然后在加载后设置。但我想了解哪些对象可以“通过”到名称空间,以及如何在FXMl中配置自定义组件的“更复杂”对象。
是“名称空间映射仅用于“基元值”吗?”

有几个问题:

public class CustomBtn extends Button{

    ...    

    public ComplexObject getProperties(){
        return properties
    }
}
由于
节点
已包含具有相同数量参数的方法
getProperties
,并且从方法返回的类型与
节点的返回类型赋值不兼容。getProperties
,因此不允许用类中的方法重写该方法。需要为y选择其他名称我们的财产


让我们将您的属性名称更改为
myProperty

public class CustomBtn extends Button{

      ...

      public void setMyProperty(ComplexObject properties){
           ....
      }

      public ComplexObject getMyProperty(){
           ...
      }
}
您可以使用
通过fxml插入属性:


或者使用以
$
开头的属性:


Map<String, Object> ns = loader.getNamespace();
public class CustomBtn extends Button{

      ...

      public void setMyProperty(ComplexObject properties){
           ....
      }

      public ComplexObject getMyProperty(){
           ...
      }
}