2014-10-01 80 views

回答

1

更新 - 推荐的方法 - 使用ControlsFX GridView控件

ControlsFX,第三方的JavaFX控制项目看起来有哪些符合个人需求的控制。 ControlsFX命名控件GridView。它是一个虚拟化控件,正如本答案的解决方案中所建议的那样,但它是预先构建的,因此您不必实现自己的控件或高度自定义ListView即可获得此行为。

这里是在GridView的描述(从它的Javadoc):

一个GridView是用于在视觉 ,可滚动的,栅格状方式显示getItems()虚拟化控制。换句话说,虽然ListView每行显示一个ListCell,但在GridView中,单行上将有零个或多个GridCell实例。这种方法意味着实例化的GridCell实例的数量将比GridView项目列表中项目的数量小 ,因为 仅为 GridView的可见区域创建了足够的GridCells。这有助于提高性能并减少内存消耗。

因为每个GridCell都从Cell延伸,所以在其他UI控件中采用的工厂的相同方法也会在 GridView中采用。这有两个主要优点:

  1. 栅格单元的需求,且无需用户参与创建,
  2. 栅格单元可以任意复杂。一个简单的GridCell可能只有其 的文本属性集,而更复杂的GridCell可以在其图形属性中设置任意复杂的场景图集(因为它接受任何节点) 。

过时回答

而不是使用TilePane为您的内容,可以考虑使用ListView,这是一个虚拟化的组件(例如,它只是建立并呈现其在屏幕上看到的节点,而不是所有可能的节点)。只要你正确地实现了这一点,它可能会比一个具有数千个节点的大型TilePane更有效率。如果ListView不太适合你,你可以利用ListViewSkin中的概念(你可以check out it's application source)为你的应用程序创建你自己的类似的虚拟化布局(不要指望它特别容易实现) 。

如何改变ListView的方向?

list.setOrientation(Orientation.HORIZONTAL)

horizonal list

但是,也许你的问题不是方向(我现在有点不清楚你实际上是在问)。

也许你想要做的是创建一个正常的,垂直定向的自定义Row对象的ListView,其中每行将包含一个HBox或单行TilePane。基本上,你需要做更多的工作来获得你想要的表现,你不会找到一个开箱即用的控制,它将完成你想要的,并且表现良好。

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

+0

谢谢@jewelsea。但是如何改变ListView的方向,有点像TilePane中的方向,其中瓷砖或节点是从左到右和从上到下放置的? listView.setOrientation(..)中的可用选项是Orientation.VERTICAL和Orientation.Horizo​​ntal。 – 2014-10-02 04:56:48

+0

您能否提供一个接受特定节点或窗格的GridView示例? [在教程](http://controlsfx.bitbucket.org/org/controlsfx/control/GridView.html)中,GridView正在接受Color列表。但是当我尝试制作一个Pane或Node的列表并在GridView的构造函数中传递列表时,GridView不显示窗格或节点,而是显示它们的类名。我怀疑这个问题与GridCell和cellFactory有关,但我不知道如何定制它们。请帮忙。 – 2014-10-06 08:21:01

+0

我明白了。 [本教程](http://docs.oracle.com/javase/8/javafx/api/javafx/scene/control/Cell.html?is-external=true)非常有帮助。 – 2014-10-06 10:11:05

相关问题