我正在尝试为 ControlsFX 的 GridView 实现 MultipleSelectionModel。乔纳森·贾尔斯(Jonathan Giles)在研究互联网时提到,它是 a bad idea向每个 GridCell 添加监听器。这让我想知道如何向选择模型通知选择、取消选择等事件。在阅读本文之前,我认为 GridCell 中使用的节点将消耗鼠标/触摸/按键事件并使用 GridCells 的 updateSelected 相应的方法。我的问题是,此更新是否会传播到任何监听器/模型,或者我是否必须手动绑定(bind)它(在某个地方),我目前不知道该怎么做。
此外,选择模型使用只读可观察列表,这提出了另一个问题,即如何将 GridView 的数据(即项目列表)绑定(bind)到选择模型的列表,我认为该列表是模型用于其流程的列表。
我可能可以完全绕过使用选择模型,并在 Cell/Node 级别拦截输入事件,并执行诸如突出显示 Cell 的 updateItem 方法之类的操作,同时使用后备 ObservableList 或 2 来跟踪所有内容,以及相应地刷新,但这不是最好的方法,更不用说是好的方法了。 GridView 的选择模型应该是唯一的出路,这就是我在这里的原因。
最佳答案
您不一定必须使用 MultiSelectionModel 或 JavaFX 带来的任何东西。使用 Set 或 List 来存储您选择的节点就足够了。
这是一个关于 How to select multiple components of Canvas using ctrl key in javafx? 的示例我的回答。我想它可以满足您的需求。如果没有,请具体说明您需要什么。
关于gridview - 将 JavaFX 的 SelectionModel 实现到没有它的 View 的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29736996/