【发布时间】:2019-06-12 15:02:51
【问题描述】:
我有一组自定义控件实现为扩展 javafx.scene.control.Control 和 javafx.scene.control.SkinBase 的标准类对。本质上,它们是一组带有标签和一个或多个“数据”控件的复合控件,例如用于值的 TextBox 和用于度量单位的 ChoiceBox。
我有几个属性可以与 SceneBuilder 正确交互,但是两个属性 value 和 min-label-width 在 SceneBuilder 中显示为只读。如何使这些属性在 SceneBuilder 中可编辑?当在 FXML 控制器中使用控件时,它们在以编程方式操作时可以正常工作。
我使用 CssMetaData 使 min-label-width 可换肤,但这并没有什么区别。我一直在查看 controlsFX 源代码以获取有关如何做事的模板,但还没有找到答案。
// --- min-label-width Defines the space for the label of the control so that
// controls can easily be lined up.
private DoubleProperty minLabelWidth;
public final void setMinLabelWidth(double val)
{
minLabelWidthProperty().set(val);
}
public final Double getMinLabelWidth()
{
return minLabelWidthProperty().get();
}
/**
* lazy allocation of DoubleProperty minLabelWidth.
*
* @return the minLabelWidth
*/
public final DoubleProperty minLabelWidthProperty()
{
if (minLabelWidth == null)
{
minLabelWidth = new StyleableDoubleProperty(100.0)
{
@Override
public Object getBean()
{
return CustomControl.this;
}
@Override
public String getName()
{
return "minLabelWidth"; //$NON-NLS-1$
}
@Override
public CssMetaData<? extends Styleable, Number> getCssMetaData()
{
return StyleableProperties.MIN_LABEL_WIDTH;
}
};
}
return minLabelWidth;
}
private static final CssMetaData<CustomControl, Number> MIN_LABEL_WIDTH =
new CssMetaData<CustomControl, Number>("-min-label-width", SizeConverter.getInstance(), 100)
{
@Override
public Number getInitialValue(CustomControl node)
{
// A vertical Slider should remain vertical
return node.getMinLabelWidth();
}
@Override
public StyleableProperty<Number> getStyleableProperty(CustomControl arg0)
{
return (StyleableProperty<Number>) arg0.minLabelWidthProperty();
}
@Override
public boolean isSettable(CustomControl arg0)
{
return arg0.minLabelWidth == null || !arg0.minLabelWidth.isBound();
}
};
我希望能够在 Java 的属性检查器的自定义部分中编辑 Min Label Width 条目,但该字段是灰色的并且是只读的。
【问题讨论】:
标签: javafx properties custom-controls scenebuilder gluon