我需要一个带有Canvas叠加层的缩放ImageView,伸展在父窗口上,右侧有一个恒定的边距。这表示一个AnchorPane,其中ImageView和Canvas作为子项,每个都有一个表示边距的rightAnchor插图。
我需要将AnchorPane放在ScrollPane中。调整大小后,ScrollPane必须调整AnchorPane中的ImageView和Canvas叠加层的大小,同时保留边距。
我尝试将ImageView和Canvas添加到AnchorPane,并使用ScrollPane.setFitToWidth(true)将AnchorPane添加到ScrollPane。当我增加ScrollPane的大小时,一切正常 - ImageView和Canvas都会扩展以填充ScrollPane,保留右侧的边距。
但是,当我减小ScrollPane的大小时,AnchorPane的大小并没有减少,而是随着滚动条的增加,AnchorPane上的视口正在减少。
注意,直接插入ScrollPane的ImageView确实有效 - 它会在增长和缩小时重新调整。
看起来ScrollPane.setFitToWidth行为会因ScrollPane中的容器而异。
这是正确的,请问有人建议解决方案吗?
罗伯特
答案 0 :(得分:0)
尝试向其中一个ScrollPane的Bounds属性添加一个侦听器,并在适当的时候从那里减少AnchorPane的大小。
答案 1 :(得分:0)
使用Jurgen的答案解决。
我覆盖了AnchorPane.computeMinHeight,computePrefHeight和computeMaxHeight以返回imageView.minHeight,prefHeight和maxHeight。这将锚定窗格的高度与imageView的高度联系起来 - 这是imageView根据自己的宽度计算的。
然后我向scrollPane.widthProperty添加了一个监听器,它调用了AnchorPane.setPrefWidth,setMinWidth和setMaxWidth
通过这种方式,锚定窗格正确地向封闭的scrollPane发送其首选,最小和最大宽度。