我想創建一組使用JavaFX 8的自定義控件。我有點困惑什麼是正確的方式來做一些東西,如佈置我定義的孩子建立我的控制。 我用來重寫layoutChildren()方法,在這裏我重新定位並調整了孩子的大小;但閱讀javadoc的layoutChildren()有寫:JavaFX 8 - 自定義控件和他們的孩子
在佈局過程中調用佈局在此父級中的子級。默認情況下,它只會將受管理的可調整大小的內容設置爲其首選大小,並且不會執行任何節點定位。
因此,根據文檔,我不得執行子節點的任何重定位(「節點定位」)。
我想了解的是在我的自定義控件中定位和調整兒童大小的正確方法是什麼。
我不明白的另一件事是layoutChildren()被調用的時間和次數;文檔說「在佈局階段調用」,但我不明白何時執行「佈局階段」。
我希望你能幫助我。
編輯@James_D
這是一個例子我在評論說
public class MyControl extends TextField {
private Label label;
public MyControl() {
super();
setSkin(new TextFieldSkin(this));
label=new Label("This is my custom textfield");
getChildren().add(label);
}
@Override
protected void layoutChildren() {
super.layoutChildren();
label.relocate(0, -label.getHeight());
System.out.println("I'm laying out children");
}
}
如果你運行它,你會發現,layoutChildren()被調用每幀
因此,你建議我在重寫方法,我可以做節點定位?這似乎違反了超級合同。 – Vin
「默認情況下,x確實......」不是合同。在這種特殊情況下,Javadocs明確告訴你,如果需要的話,子類應該定位節點:「子類應該覆蓋此函數以根據需要佈置內容。」 –
我們可以有一個自定義佈局管理器如何工作的想法或形象嗎?編寫類似代碼的可能性很高,因此我們可以提供幫助。 – GOXR3PLUS