JavaFX实现的流体节点列表布局

3
我在我的JavaFX应用程序中使用ListView来动态显示项目。 通过REST调用加载项目到我的后端应用程序。 每个项目都可以点击,然后显示产品视图而不是产品列表。 在调整应用程序窗口大小之前都好(看起来)。 调整大小后,项目看起来很丑,并且它们使用了太多的空间。
问题:有没有一种获得某种流体项目顺序的方法?
在HTML和CSS中,如果我没记错的话,那就是Flexbox。
所有项目的宽度和高度都相同,不给每个项目单独计算宽度或高度的机会。
我在互联网上找到的唯一解决方案是这里:https://github.com/onexip/FlexBoxFX-但它仅使用FXML文件,并且没有选项可以动态添加项目。 最后一个项目更新是6年前,这告诉我它已被放弃或维护不良。它们的官方网站已经失效:http://flexboxfx.io 编辑:正如James_D所提到的,我不需要ListView,而是任何其他可行的解决方案。

我知道WebView,但我想避免在我的应用程序中使用HTML内容。

为了让我的情况更清楚,我制作了一些截图,第一张是编辑过的,代表了我想要的想法。编辑后的截图上的数字表示所需项目的顺序。

如果窗口宽度增加,第一行应该有1、2和3项,下一行4、5和6项,下一行7、8和9项,最后一行只有一个项目(10)。所有行都应该居中,最后一行的项目10应该位于项目8下面。


这是我想要的最终布局,但我不知道如何实现。

enter image description here


当窗口不改变大小时,一切都很好,但是调整大小后,它看起来很丑陋。

Before -- After



2
你真的需要一个 ListView 吗?你的问题都是关于布局,但是 ListView 不是一个布局组件;它是一个虚拟化控件。你所描述的布局可以用 TilePane 来实现。 - James_D
1
我上面的意思是“你需要ListView的功能吗”(除了它提供的最小布局)。例如,您需要选择、虚拟化等功能吗?如果不需要,为什么要使用它?为什么不使用提供所需功能的布局面板呢? - James_D
@James_D 不需要了,我已经在我的问题中添加了编辑。我进行了许多关于流体顺序和类似问题的搜索,但没有找到TilePane。由于我不是JavaFX专家,这对我来说是新信息。现在我会学习TilePane并看看如何使用它。谢谢! - horvoje
@James_D 我明白了。我需要一个“点击事件”来处理我的物品,因为这将打开文章视图,其中我会显示有关产品的更多详细信息。 - horvoje
1
来自Oracle的标准布局教程描述了所有内置的布局面板。布局API包文档描述了一般的布局机制,并提供了所提供的所有布局面板的API文档。始终从官方文档开始,而不是在互联网上随意搜索。 - James_D
1个回答

4

ListView 的主要目的是提供虚拟化;即它提供了一种有效的机制来显示大量的项目,让用户滚动浏览它们,而不需要为当前未显示的项目提供 UI 组件的开销。它还提供了一些额外的功能,例如选择(允许用户将列表中的一个或多个项目放入“选定”状态,这在视觉上显示)。

如果您实际上需要虚拟化,也许需要选择,并且想要类似网格的布局,则第三方库 ControlsFX 提供了类似虚拟化的 GridView

然而,你的问题似乎只涉及布局,你的截图显示你正在使用Pagination控件,这可能会消除虚拟化的需要。如果你不需要ListView的功能,则标准布局面板,如FlowPaneTilePane,可能包裹在ScrollPane中,应该提供所需的布局。


1
我真是太蠢了。这对我来说就是一个RTFM时刻。这是使用本地分页和TilePane的结果: https://horvoje.net/tmp/TilePane.png - horvoje
4
@horvoje 看起来不错。界面很漂亮。 - James_D

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接