FXML:使用BuilderFactory的自定义组件

在FXExperience Tools中,为了在FXML中使用如ColorPicker这样的控件,需要构造一个BuilderFactory和一个Builder。加载FXML时,要将工厂传递给加载器,以实现自定义组件的创建。参考Eppleton的博客文章,了解如何通过BuilderFactory将自定义组件添加到FXML。
摘要由CSDN通过智能技术生成
当您想使用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;
 }

@Override
 public ColorPicker build() {
 ColorPicker picker = new ColorPicker(color);
 picker.setId(id);
 return picker;
 }
 }
 private JavaFXBuilderFactory defaultBuilderFactory = new JavaFXBuilderFactory();

@Override
 public 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值