Я пришел к следующему решению: добавить прослушиватель событий - каждый раз, когда элемент добавляется, удаляется или заменяется, изменяйте высоту 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)
})
}
})