Gridview 将JavaFX的SelectionModel实现到没有它的视图的正确方法

Gridview 将JavaFX的SelectionModel实现到没有它的视图的正确方法,gridview,javafx,selectionmodel,controlsfx,Gridview,Javafx,Selectionmodel,Controlsfx,我正在尝试为ControlsFX的GridView实现一个MultipleSelectionModel。Jonathan Giles在研究互联网时提到,要在每个GridCell中添加侦听器。这让我想知道如何通知事件的选择模型,如选择、取消选择等。在阅读之前,我认为GridCell中使用的节点将使用鼠标/触摸/按键事件,并相应地使用GridCells的updateSelected方法。我这里的问题是,这个更新是否会传播到任何监听器/模型,或者我是否必须手动将它绑定到某个地方,而我目前不知道如何做

我正在尝试为ControlsFX的GridView实现一个MultipleSelectionModel。Jonathan Giles在研究互联网时提到,要在每个GridCell中添加侦听器。这让我想知道如何通知事件的选择模型,如选择、取消选择等。在阅读之前,我认为GridCell中使用的节点将使用鼠标/触摸/按键事件,并相应地使用GridCells的updateSelected方法。我这里的问题是,这个更新是否会传播到任何监听器/模型,或者我是否必须手动将它绑定到某个地方,而我目前不知道如何做

此外,选择模型使用只读的可观察列表,这就提出了另一个问题,即如何将GridView的数据(即项目列表)绑定到选择模型的列表,我假设该列表是模型用于其流程的


我可能完全不使用选择模型,而是在单元/节点级别截取输入事件,并在单元的updateItem方法上高亮显示,同时使用backing ObservableList或2跟踪所有内容并相应刷新,但这不是最好的方法,更不是一个好方法。GridView的选择模型应该是唯一的选择,这就是我在这里的原因。

您不必使用MultiSelectionModel或JavaFX带来的任何东西。使用集合或列表来存储所选节点就足够了


下面是一个关于我的回答的例子。我想它能满足你的需要。如果没有,请具体说明您需要什么。

罗兰,这是一个非常好的答案,我也在考虑做什么。只是我上面链接的线程让我停顿了一下,因为它来自ControlsFX的一位作者,他也是OpenJDK和其他主要项目的重要贡献者。我在一个控件中实现GridView,其中潜在用户有点疯狂地在一个位置囤积大量图像。我想要最有效的方法,我不介意它是否也是最困难的。如果没有其他问题,到时候我会相信你的回答。我使用了1000多个节点,但仍然没有出现性能问题。这取决于你的要求。或者,您可以在基础窗格上放置一个侦听器,并在单击该窗格后找到适当的节点。但是如果你的用户大量使用图像,我想你可能会遇到内存问题。这很好。谢谢:对于我提到的用户来说,1000只是表面上的一个划痕,他们似乎不喜欢把东西分成子文件夹,但我知道这可以通过只生成实际可以看到的内容来缓解。我真的很想使用GridView,因为它的布局会自动调整到父级的维度,这可以节省我实现自己的东西的时间,除非我在刚性柱方案中设置东西,如解决方案中的1。很高兴听到ControlsFX团队的消息,因为他们说他们会接受提交的带有sel的GridView。我只是想说,在等待我的OP的更多答案的同时,我已经实现了你的解决方案,而且效果非常好。我已经添加了一些东西,如拖放,并开始自动布局调整等。再次感谢您的帮助:似乎没有其他人会插嘴。我已经对您提出的解决方案进行了充分的研究,可以说它的性能足以满足需求。再次感谢你的帮助。