当您想使用FXML时,您将需要能够添加自己的组件。 这很容易,您只需要添加一个import语句。 FXML文件中以大写字母开头的元素将被解释为实例,如果它们是Java Bean,则最重要:如果它们具有无参数的标准构造函数,则一切都很好。

如果没有,那就更复杂了。 您将需要为加载器提供一个Builder和一个BuilderFactory。 例如,在FXExperience Tools中,使用了一个不错的ColorPicker控件,该控件需要将Color传递给它的构造函数。 因此,在FXML中,我们想编写如下代码:

<?import com.fxexperience.javafx.scene.control.colorpicker.ColorPicker?><!-- ... --><ColorPicker fx:id="colorPicker" id="colorPicker" color="GREEN" />

现在我们需要创建一个BuilderFactory和一个Builder:

import com.fxexperience.javafx.scene.control.colorpicker.ColorPicker;
import javafx.fxml.JavaFXBuilderFactory;
import javafx.scene.paint.Color;
import javafx.util.Builder;
import javafx.util.BuilderFactory;/**** @author eppleton*/
public class ColorPickerBuilderFactory implements BuilderFactory {public static class ColorPickerBuilder implements Builder<ColorPicker> {private Color color = Color.WHITE;private String id="colorPicker";public String getId() {return id;}public void setId(String id) {this.id = id;}public Color getColor() {return color;}public void setColor(Color color) {this.color = color;}@Overridepublic ColorPicker build() {ColorPicker picker = new ColorPicker(color);picker.setId(id);return picker;}}private JavaFXBuilderFactory defaultBuilderFactory = new JavaFXBuilderFactory();@Overridepublic Builder<?> getBuilder(Class<?> type) {return (type == ColorPicker.class) ? new ColorPickerBuilder() : defaultBuilderFactory.getBuilder(type);}
}

最后,在加载FXML时,您需要将工厂传递给加载器:

(Parent) FXMLLoader.load(TestTool.class.getResource("GradientEditorControl.fxml"), null,new ColorPickerBuilderFactory())

就是这样,如果我也可以使SceneBuilder理解这一点,那就太好了。

参考: Eppleton博客上的JCG合作伙伴 Toni Epple 使用BuilderFactory将自定义组件添加到FXML 。

翻译自: https://www.javacodegeeks.com/2012/04/fxml-custom-components-using.html

FXML:使用BuilderFactory的自定义组件相关推荐

  1. java 属性自定义配置,将自定义FXML属性设置为自定义javafx组件的参数

    我创建了自定义组件TableBlock . 它由Label和TableView组成 . 例如,TableView可以有1到1000行 . 行数由FXML文件中的参数"rowsFromPref ...

  2. 【说人话】真正意义上讲清楚了如何用$emit()在Vue.js的自定义组件中实现v-model=“”双向绑定

    子组件sg-component.vue代码 <template><div class="sg-component"><button @click=&q ...

  3. vue自定义组件 → 场馆预约の小时范围控件【手到擒来】

    组件pages/components/sg-hour-range.vue <template><ul><liv-for="(item, $index) in h ...

  4. 微信小程序自定义轮播图滚动样式 自定义组件轮播图的实现

    效果图: 实现代码: wxml <view class="card card_b"><swiper autoplay="{{true}}" i ...

  5. 微信小程序自定义组件之Picker组件

    微信小程序开发交流qq群   173683895    承接微信小程序开发.扫码加微信. 需求: 通过JS条件判断,满足条件就弹出Picker给用户选择一个数组里面的数据. 有些朋友可能会有疑问: 1 ...

  6. 【一步步学小程序】3. 使用自定义组件(component)

    上一节创建了一个包含多个课程数据的列表.这一节我们用自定义组件(component),来优化列表页面,即如图,我们把每个课程单元格封装为组件. 使用组件的好处: 自定义组件可以在不同的页面中重复使用 ...

  7. java requiredstringvalidator_如何访问自定义组件中的Validator.required

    我需要一些帮助 . 我正在尝试创建一个包装下拉值的自定义组件,并根据是否需要显示/隐藏默认的--Select--选项 . (我想稍后将其他自定义逻辑应用于此组件) 如何通过父级的被动形式设置我的自定义 ...

  8. php自定义控件,小程序自定义组件的实现方法(代码)

    本篇文章给大家带来的内容是关于小程序自定义组件的实现方法(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. File:threecolgrid.js// components/t ...

  9. Angular系列学习二:基本的组件说明、自定义组件和部分细节说明

    作者:心叶 时间:2018-07-24 16:41 基本说明 组件是Angular中非常重要的一个东西,是拥有模板的指令,是构成Angular应用的基础和核心,被用来包装特定的功能,应用程序的有序运行 ...

最新文章

  1. TLS回调函数(1)
  2. oracle激活锁定用户,oracle 锁用户,oracle解除用户锁定
  3. python导入模块有几种方式、各有什么特点_Python导入模块的几种姿势
  4. oc73--NSArray使用
  5. Ubuntu 15.10 默认壁纸?
  6. javascript特效:会随着鼠标而动的眼睛
  7. linux系统添加中文输入法
  8. ICT通信运营企业的重建之服务升级(三)----如何打造ICT服务满意度
  9. 计算机二级试题aoa,浙江省高校计算机二级AOA考试excel试题及解析
  10. 计算机网络有哪三种地址,IP地址的分类有哪几种
  11. 麻省理工十亿美元计算机学院,麻省理工学院宣布10亿美元成立新计算机学院 | 芥末堆...
  12. 计算机音乐我还是曾经那个少年,我还是曾经的那个少年什么歌曲
  13. 前端HTML、CSS学习完整笔记(中下篇)
  14. 软工专硕考研_你可能需要了解--2018年北京大学软微软件工程专硕考研 经验分享...
  15. pytorch优化器详解:SGD
  16. Mysql跨库跨表复制数据
  17. 最简单的商家管理系统(小白)
  18. 基于FPGA的Bubble 游戏开发
  19. ARM芯片的时钟系统详解(S5PV210芯片)
  20. (算法)求数组中数字组合(可多值组合)相加最接近目标数的组合(可能多个)

热门文章

  1. exchanger_如何通过示例在Java中使用Exchanger
  2. java初学者指南_Java代理初学者指南
  3. synology smb_用于在Synology NAS上测试Spring Boot Web应用程序的JUnit模拟文件
  4. slf4j 记录日志文件_教程:正确的SLF4J日志记录用法以及如何检查它
  5. spring3.0异步_在Spring 4.2中更简单地处理异步事务绑定事件
  6. 基于netty的微服务网关_基于Rx-netty和Karyon2的云就绪微服务
  7. java8 camel_WildFly 8的Camel子系统集成了Java EE –入门
  8. r 数据框选子集_在带有组合框的值列表的下拉列表中显示显示属性的子集
  9. maven 打包编译_您是否真的想加快Maven的编译/打包速度? 那么takari生命周期插件就是答案。...
  10. 内置对象和内置函数_内置假对象