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

Proper way of Implementing JavaFX' SelectionModel to a View that doesn't have it

我正在尝试为 ControlsFX 的 GridView 实现 MultipleSelectionModel。在研究互联网时,Jonathan Giles 提到 a bad idea 向每个 GridCell 添加侦听器。这让我想知道如何将选择、取消选择等事件通知选择模型。在阅读之前,我在想 GridCell 中使用的节点将消耗一个 mouse/touch/key 事件并使用 GridCells 的 updateSelected 相应的方法。我的问题是这个更新是否会传播到任何 listeners/models,或者我是否必须手动绑定它(某处),我现在不知道该怎么做。

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

我可能会完全绕过使用选择模型,并在 Cell/Node 级别拦截输入事件,并在使用支持 ObservableList 或 2 时做一些事情,例如在 Cell 的 updateItem 方法上突出显示,以跟踪一切,并相应地刷新,但这不是最好的方法,更不是一个好的方法。 GridView 的选择模型,应该是唯一的出路,这就是我来这里的原因。

您不必使用 MultiSelectionModel 或 JavaFX 带来的任何东西。 select.

使用 Set 或 List 来存储节点就足够了

这是一个关于 How to select multiple components of Canvas using ctrl key in javafx? 的示例,其中包含我的回答。我想它可以满足您的需求。如果没有,请具体说明您需要什么。