为什么我不能使用布局约束调整画布大小?

时间:2014-12-27 06:24:08

标签: java javafx

有一个AnchorPane,然后放一个画布。设置画布'布局约束(顶部,左侧,右侧,底部)。从技术上讲,如果AnchorPane调整大小,画布应调整大小。但事实并非如此。如果你使用像按钮而不是画布这样的东西,它就会起作用。

为什么我不能使用布局约束调整画布大小?

1 个答案:

答案 0 :(得分:1)

首先:Canvas是Node的直接子类,不会覆盖Node.isResizable(),因此默认采用:

public boolean isResizable() {
    return false;
}

这只是技术解释为什么父布局容器将在布局计算期间跳过Canvas。

另一个考虑因素是Canvas和"正常" JavaFX Node内部工作完全不同。

在每次布局传递(Parent.layoutChildren()Node.autosize())期间,Node的布局会重新计算,以始终反映正确的状态。还有许多其他因素(缓存提示,优化,可见状态,托管状态......)正在发挥作用,但这是这里的基本概念。

另一方面,Canvas是一个Node,它描绘了所有的孩子"通过GraphicsContext进入白板并完成。没有布局,没有自动调整大小。所以这是快速的(在最初的绘画之后),如果你改变它,你应该知道你在做什么以及你为什么这样做,因为使Canvas可调整大小的条带带来许多好处。

但是有一个非常好的快速示例如何创建可调整大小的画布:http://fxexperience.com/2014/05/resizable-grid-using-canvas/