Вопрос
Мой вопрос относительно прост, я создал пользовательский элемент управления , и я хотел бы перетащить «Узлы» из «SceneBuilder» внутри него,(См. Изображение ниже)
Например
public class CustomControl extends Control {}
Я создаю «StackPane», затем добавляю свой элемент управления внутрь, затем внутрьэто я добавляю еще один "стек стек"
JavaFx Пример
Вы можете посмотреть этот класс, чтобы дать вам представление о том, что я пытаюсь сделать.
public class SplitPane extends Control {}
SplitPane JavaDoc
Или этот:
public class TitledPane extends Labeled {}
TitledPane JavaDoc
Среда
Версия My Scene Builder: 8.5.0 [Gluon]
Моя версия Java: 1.8.0_191 [Oracle]
Пример пользовательского элемента управления
Не забудьте, что это простой пример
@DefaultProperty("contentProperty")
public class CrushPane extends Control {
// Fields
private ObjectProperty<Node> contentProperty = new SimpleObjectProperty<>(this, "contentProperty");
// Constructor
public CrushPane() {
this(null);
}
public CrushPane(Node content) {
setContent(content);
}
// Getters and Setters
public Node getContent() {
return contentProperty.get();
}
public ObjectProperty<Node> contentProperty() {
return contentProperty;
}
public void setContent(Node content) {
contentProperty.set(content);
}
// Override methods
@Override
protected Skin<?> createDefaultSkin() {
return new CrushPaneSkin(this);
}
}
Скин
public class CrushPaneSkin extends SkinBase<CrushPane> {
//-----------------------------------------------
//Fields
private final ChangeListener<Node> contentChanged = (ob, o, n) -> onContentChanged(n);
private AnchorPane root;
//-----------------------------------------------
//Constructor
public CrushPaneSkin(CrushPane crushPane) {
super(crushPane);
this.root = new AnchorPane();
getChildren().add(this.root);
crushPane.contentProperty().addListener(contentChanged);
}
//-----------------------------------------------
//Events
private void onContentChanged(Node newValue) {
ObservableList<Node> children = root.getChildren();
children.clear();
if (newValue != null) {
children.add(newValue);
AnchorPane.setBottomAnchor(newValue, 0.0d);
AnchorPane.setTopAnchor(newValue, 0.0d);
AnchorPane.setLeftAnchor(newValue, 0.0d);
AnchorPane.setRightAnchor(newValue, 0.0d);
}
}
}
Не забудьте добавить банку в сценостроитель.
В Scene Builder
Изображение, когда я пытаюсь перетащить StackPane в свой пользовательский элемент управления
Спасибозаранее за вашу помощь