有一个AnchorPane,然后放一个画布。设置画布'布局约束(顶部,左侧,右侧,底部)。从技术上讲,如果AnchorPane调整大小,画布应调整大小。但事实并非如此。如果你使用像按钮而不是画布这样的东西,它就会起作用。
为什么我不能使用布局约束调整画布大小?
答案 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/