У меня есть набор пользовательских элементов управления, реализованных в виде стандартной пары классов, которые расширяют javafx.scene.control.Control и javafx.scene.control.SkinBase. По сути, они представляют собой набор составных элементов управления с меткой и одним или несколькими элементами управления «данные», такими как TextBox для значения и ChoiceBox для единицы измерения.
У меня есть несколько свойств, которые корректно взаимодействуют с SceneBuilder, однако два свойства, value и min-label-width, отображаются в SceneBuilder только для чтения. Как сделать эти свойства редактируемыми в SceneBuilder? Они работают правильно при программном манипулировании, когда элементы управления используются в контроллере FXML.
Я сделал скины min-label-width с помощью CssMetaData, но это не имело значения. Я искал исходный код 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();
}
};
Я ожидаю, что смогу редактировать запись Min Label Width в пользовательском разделе инспектора свойств Java, но это поле серого цвета и доступно только для чтения.