i具有使用ListCell
显示其项目的ListView
(水平方向)。这些单元格是Canvas
。当将足够的项目放入列表中时,会激活垂直和水平的ScrollBar
。发生这种情况时,一部分电池内容物被水平滚动栏剪辑(底部)。
我们如何设置(或适应)列表视图的高度,以便在滚动栏出现时不会发生剪辑?他们的一种检测卷轴何时可见的方式吗?我们可以确定滚动条的高度,并简单地使列表的高度足够高吗?
我已经通过列表视图和列表视图单元格中的更改侦听器尝试了几种方法。但是这些似乎不起作用。
tia
我提出了以下解决方案:添加事件侦听器 - 每次添加,删除或更换元素时,调整了ListView的高度。调整大小时,您只有一个垂直和/或水平滚动杆。如果仅存在垂直滚动栏,则使用其高度和插图来获得单元格高度。如果还存在水平卷轴,也会增加其高度(拇指的高度)。这是相关的代码段(在Scala中):
def extendHeight(thumbnails: ListView[String], vertical: Option[ScrollBar], horizontal: Option[ScrollBar]): Unit = {
(vertical, horizontal) match {
case (None, None) => ()
case (None, Some(_)) => ()
case (Some(v), None) =>
resizeHeight(thumbnails, v, 0)
case (Some(v), Some(h)) =>
val extra = if (h.isVisible) h.getHeight else 0
resizeHeight(thumbnails, v, extra)
}
}
def resizeToFrame(thumbnails: ListView[String]): Unit = {
val (vertical, horizontal) = PStoryBoardUX.getScrollBars(thumbnails)
PStoryBoardUX.extendHeight(thumbnails, vertical, horizontal)
}
thumbnails.getItems.addListener( new ListChangeListener[String] {
override def onChanged(c: Change[_ <: String]): Unit = {
javafx.application.Platform.runLater( () => {
// At thus point in time the scrollbars have not been updated
// So we don't know if they will be active or not. Force this
thumbnails.layout()
// Now resize to remove the visible scrollbars
resizeToFrame(thumbnails)
})
}
})