JavaFX的WPF版本的UniformGrid?

时间:2013-06-11 20:34:41

标签: user-interface javafx uniformgrid

我从一个新的应用程序开始使用JavaFX,我希望屏幕上的布局与WPF的UniformGrid相同。有TilePane,但它有所不同(我猜是类似于WrapPanel)。

到目前为止我的方法是(对于一个集合[size = N]我想显示为“tiles”):

  1. 使用TilePane t。
  2. t.setPrefRows(ROUNDUP(sqrt(N)))
  3. 这可能不是最好的方法。 你知道更好的解决方案吗?也许是可以调整大小的?

1 个答案:

答案 0 :(得分:2)

听起来你想要一个布局:

  1. 每行中有一定数量的单元节点。
  2. 每个单元节点具有相同的高度和宽度。
  3. 我不熟悉WPF或UniformGrid,但我认为以上就是你想要的。

    TilePane可能不适合

    似乎TilePane非常适合这种情况,但是,正如您所发现的那样,它并没有真正展现出这种开箱即用的行为。使用TilePane,您可以设置首选行数,但在调整TilePane的大小时,行数和列数可以随着切片重新排列以适应可用区域而改变。

    使用带有绑定和首选项设置或约束的GridPane

    要获得每行固定数量的单元格,请使用GridPane。 GridPane在调整大小时将保留固定数量的行和列。要确保每个单元节点具有相同的高度和宽度,您可以侦听GridPane的高度和宽度属性,并在更改时设置子元素的最小/最大/首选大小,以便它们都具有相同的大小。或者对GridPane行和列设置一些约束,例如setPercentWidthsetPercentHeight

    为了演示这种方法,ColorChooser sample为每个网格行提供固定数量的颜色样本的可重复大小的ColorChooser提供了一些代码,并且当整个包含网格增大或缩小时,颜色样本会增长和缩小适当地适应可用区域。颜色样本本身不一定保持相同的高度/宽度比,但您可以通过在子元素上设置适当的最小/最大/首选大小来轻松实现。

    smallgrid mediumgrid

    创建自己的布局

    作为使用更改侦听器和在子级上设置最小/最大/首选大小的替代方法,您可以通过继承Pane来创建自己的布局管理器,以创建UniformGrid类并实现layoutChildren方法。在layoutChildren中,根据需要排列UniformGrid子项的大小和位置。您可以参考source code of an existing Pane查找如何创建自己的布局的示例。

    调查第三方布局

    ControlsFX项目有一个GridViewMigLayout,它可能提供UniformGrid的功能。