我在JavaFX应用程序上使用ScrollPane。滚动窗格以TilePane作为其内容,显示成千上万个图块。得分太慢。如何增加ScrollPane的滚动?谢谢。

最佳答案

更新-推荐方法-使用ControlsFX GridView

ControlsFX,第三方JavaFX控件项目看起来像具有适合您要求的控件。 ControlsFX将控件命名为GridView。它是此答案的解决方案中建议的虚拟控件,但它是预先构建的,因此您无需实现自己的控件或进行大量自定义ListView即可获得此行为。

这是GridView的描述(来自Javadoc):


  GridView是一个虚拟控件,用于在屏幕上显示getItems()。
  视觉,可滚动,网格状的时尚。换句话说,
  ListView每行显示一个ListCell,在GridView中将为零
  一行上有多个GridCell实例。这种方法意味着
  实例化的GridCell实例的数量将是可观的
  小于GridView项目列表中项目的数量,例如
  仅创建了足够的GridCells用于可见区域
  网格视图。这有助于提高性能并减少内存
  消费。
  
  因为每个GridCell都从Cell扩展,所以cell的方法相同
  其他UI控件中采用的工厂也被采用
  网格视图。这有两个主要好处:
  
  
  GridCell是按需创建的,无需用户参与,
  GridCells可以任意复杂。一个简单的GridCell可能只有
  它的文本属性集,而更复杂的GridCell可以具有
  在其图形属性内设置任意复杂的场景图形(因为它
  接受任何节点)。
  


过时的答案

与其使用TilePane作为内容,不如考虑使用ListView,它是一个虚拟组件(例如,它仅创建和呈现在屏幕上可见的节点,而不是所有可能的节点)。只要正确实现此方法,它就会比具有数千个节点的单个大型TilePane更为有效。如果ListView不太适合您,则可以利用ListViewSkin中的概念(可以check out it's application source)为您的应用程序创建自己的类似虚拟化布局(不要指望这样做特别容易)虽然)。


  如何更改ListView的方向?


list.setOrientation(Orientation.HORIZONTAL)



但是,也许您的问题不是关于方向的(我现在不清楚您在问什么)。

也许您想做的是创建一个自定义Row对象的垂直方向的普通ListView,其中每行将由HBox或单行TilePane组成。基本上,您将需要做更多的工作才能获得所需的性能,您将找不到一个开箱即用的控件,它将完全按照您想要的方式工作并表现良好。

不幸的是,提供完整的示例代码来完全解决您的问题超出了StackOverflow答案的合理范围。

07-28 04:14