Javafx 标签在用户元素中不会更改其大小。(扩展控制)

Javafx 标签在用户元素中不会更改其大小。(扩展控制),javafx,canvas,label,resize,controls,Javafx,Canvas,Label,Resize,Controls,我需要制作一个由几个元素组成的自定义元素。这些元素之一是标签。但是,无论在setPrefMinSize,setPrefSize,setPrefMaxSize方法中指定了什么,此标签都不会设置其大小。如果添加Canvas元素,它将正常绘制。 试验方法: public class LinearMarkerTest extends Control { double width = 100.0; double height = 50.0; public LinearMarker

我需要制作一个由几个元素组成的自定义元素。这些元素之一是
标签
。但是,无论在
setPrefMinSize
setPrefSize
setPrefMaxSize
方法中指定了什么,此标签都不会设置其大小。如果添加
Canvas
元素,它将正常绘制。 试验方法:

public class LinearMarkerTest extends Control {
    double width = 100.0;
    double height = 50.0;

    public LinearMarkerTest() {
        Label label = new Label("Label text");
        label.setMinSize(width, height);
        label.setPrefSize(width, height);
        label.setMaxSize(width, height);
        getChildren().add(label);

        Canvas canvas = new Canvas(100,100);
        GraphicsContext graphicsContext = canvas.getGraphicsContext2D();
        graphicsContext.setFill(Color.RED);
        graphicsContext.fillRect(0, 10, width, height);
        getChildren().add(canvas);
    }

}
结果:


来自区域文档:默认情况下,区域继承其超类父类的布局行为,这意味着它将调整所有可调整大小的子节点的大小,使其达到首选大小,但不会重新定位它们-控件在布局方面不做任何事,通常,这是其外观的责任。不管怎么说,你想要实现什么?为什么要扩展(与使用一个可用布局相比)?在场景生成器中使用从布局扩展的自定义元素时,场景生成器会将元素插入这些元素中,而在使用非从布局扩展的元素时,则不会发生。也许有一种简单的方法可以禁止在场景生成器中的其他对象中添加元素?当大小改变时,您是否希望标签中的字母变大或变小?我认为它不会那样做。您可能需要根据宽度/高度缩放标签,这是一个转换。这是一个测试用例。我希望
getWidth()
方法和
getHeight()
方法返回设置的大小。但它返回零。我以前从未见过有人试图扩展控制,但我认为这是你的问题。首先,我得到一个错误,类的-fx skin没有CSS条目,也没有createDefaultSkin()方法。所以这可能是个大问题。如果将类更改为extend Pane,则实际上会在窗口上获得标签(必须为其设置布局X&Y),并且它将响应宽度。您不会描述自定义控件的性质,但最好基于其中一个容器类(如Pane、StackPane或VBox)来构建它。