如何让JavaFX ListView高度铺满父容器,仅保留ScrollPane滚动条?
解决方案:让ListView撑满父容器并仅保留外层ScrollPane的滚动条
当然可以实现这个需求!核心思路就是让ListView自动扩展高度以显示所有条目,同时让它完全填充父容器VBox的可用空间,这样当内容过多时,就会触发外层ScrollPane的滚动,而ListView自身的滚动条会自动消失。
直接修改你的FXML布局即可,调整后的代码如下:
<ScrollPane fx:controller="sample.Controller" xmlns:fx="http://javafx.com/fxml"> <VBox fillWidth="true"> <Label text="Hello"/> <Label text="Expand listview"/> <ListView fx:id="listViewTest" VBox.vgrow="ALWAYS" prefHeight="Infinity" fitToWidth="true"/> </VBox> </ScrollPane>
关键属性解释:
VBox.fillWidth="true":让VBox的所有子元素自动填充容器的宽度,避免ListView出现左右空白。ListView.VBox.vgrow="ALWAYS":告诉VBox,ListView需要占用容器中所有剩余的垂直空间,而不是保持默认的固定高度。ListView.prefHeight="Infinity":设置ListView的首选高度为无限大,这样它会根据条目数量自动扩展高度,直到能完整显示所有内容,不会触发自身的滚动条。ListView.fitToWidth="true":确保ListView的宽度完全匹配父容器,避免出现不必要的水平滚动。
这样调整后,当ListView中的条目较少时,它会保持合适的高度;当条目数量增多时,ListView会自动拉长以显示所有内容,此时整个VBox的高度会超过外层ScrollPane的视口,ScrollPane就会显示滚动条,而ListView自身的滚动条就不会出现了。
内容的提问来源于stack exchange,提问作者ESipalis
相关产品推荐
相关产品推荐

