如何将子组件和新属性添加到自定义JavaFX控件?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何将子组件和新属性添加到自定义JavaFX控件?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1905字,纯文字阅读大概需要3分钟。
内容图文
![如何将子组件和新属性添加到自定义JavaFX控件?](/upload/InfoBanner/zyjiaocheng/744/5ee71582d765418db61e79185f76e7d2.jpg)
我想创建一个新的JavaFX组件并在FXML中使用它.如何定义此组件的使用可能性和子类型?有没有办法为这个组件创建我自己的atrributes?例如,这就是我想要的:
<MyNewComponent specificAttribute="...">
<children>
<SpecificChildren></SpecificChildren>
</children>
</MyNewComponent>
解决方法:
当您设置属性的值或在FXML中指定子值时,您基本上只是在对象上设置属性.通常,属性用于简单标量值,嵌套值用于设置更复杂的值.
当FXML解析器遇到小写属性或标记时,它假定该值是属性并将尝试在特定对象上设置它.
例如,考虑一个派生自Parent类的自定义类,并覆盖getChildren()方法,使其成为控件公共API的一部分.
public class MyNewComponent extends Parent {
@Override
public ObservableList<Node> getChildren() {
return super.getChildren();
}
}
您现在应该可以在FXML中将其他控件直接添加到自定义控件中.
<MyNewComponent>
<children>
<SpecificChildren></SpecificChildren>
<children>
</MyNewComponent>
这在概念上类似于以下Java代码:
myNewComponent.getChildren().add(new SpecificChildren());
您可以通过使用DefaultProperty注释修饰自定义控件类来进一步改善这一点,如下所示:
@DefaultProperty(value = "children")
public class MyNewComponent extends Parent {
这允许您省略< Children>< / Children>标签,以便您的FXML可以更新为这样.
<MyNewComponent>
<SpecificChildren></SpecificChildren>
</MyNewComponent>
请注意,这会将控件添加到场景图中,但实际上可能无法将控件显示在您想要的位置,因为您还没有告诉它如何执行此操作(您必须为某些布局方法提供实现或从已经具有布局逻辑的类,如VBox).
同样,属性可以这样定义.
@DefaultProperty(value = "children")
public class MyNewComponent extends Parent {
@Override
public ObservableList<Node> getChildren() {
return super.getChildren();
}
public String setSpecificAttribute(String str) {
// Do something here...
}
}
然后在你的FXML中:
<MyNewComponent specificAttribute = "ABC123">
这在概念上类似于:
myNewComponent.setSpecificAttribute("ABC123");
有关更多详细信息,请参阅官方FXML reference,因为上述建议有一些例外情况,具体取决于您尝试设置的值的类型,并且可能需要一些额外的代码才能使其正常工作.
内容总结
以上是互联网集市为您收集整理的如何将子组件和新属性添加到自定义JavaFX控件?全部内容,希望文章能够帮你解决如何将子组件和新属性添加到自定义JavaFX控件?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。