Есть несколько проблем:
public class CustomBtn extends Button{
...
public ComplexObject getProperties(){
return properties
}
}
Поскольку Node
уже содержит метод getProperties
с таким же количеством аргументов, а тип, возвращаемый вашим методом, не совместим по присваиванию с возвращаемым типомиз Node.getProperties
, вы не можете переопределить метод с тем, что в вашем классе. Вам нужно выбрать другое имя для вашей собственности.
Map<String, Object> ns = getNameSpace();
Метод называется getNamespace
и является частью FXMLLoader
, а не Application
. Вам нужно изменить эту строку на
Map<String, Object> ns = loader.getNamespace();
Давайте изменим имя вашего свойства на myProperty
:
public class CustomBtn extends Button{
...
public void setMyProperty(ComplexObject properties){
....
}
public ComplexObject getMyProperty(){
...
}
}
Вы можете использовать <fx:reference>
для вставки свойства через fxml:
<CustomBtn text="hello">
<myProperty>
<fx:reference source="props"/>
<myProperty>
</CustomBtn>
В качестве альтернативы используйте атрибут, начинающийся с $
:
<CustomBtn text="hello" myProperty="$props" />