通过鼠标/键事件禁用SpreadsheetView单元格选择,但保留滚动视图

时间:2017-09-07 04:19:50

标签: controlsfx

我正在编写一个Excel导入向导,用于将用户的电子表格加载到ControlsFX SpreadsheetView中。然后,用户可以通过一组组合框识别要导入到app中的相关列(即,名字和姓氏等)。每个组合框都包含可用列的列表。当用户在组合框中进行选择时,相应的列将添加到选择模型的选择范围中。

只能通过组合框进行列选择,并且应忽略用户对电子表格视图中单元格的单击(即,不更改选择模型内容)。

但是,我无法找到一种方法来禁用单元格或列标题上的鼠标单击。关于如何禁用TableView点击的related question解决方案无法提供令人满意的答案:setMouseTransparent(true)实际上禁用了整个视图。

在我的情况下,用户必须能够滚动视图才能找到相关列,因为并非该应用的所有用户都以相同的列顺序构建了他们的电子表格,并且如果不横向滚动,该列可能不可见。

重新进行迭代:我需要在单元格列标题上点击鼠标,以防止更改使用组合框进行的列选择。我该怎么做呢? (仅供参考:在电子表格视图[setOnMousePressed|Released|Clicked(mEvent -> mEvent.consume()]上消费鼠标事件无效。)

1 个答案:

答案 0 :(得分:0)

实际上,当您使用setOnMousePressed方法时,您正在添加一个EventHandler。 EventHandler正在后来的冒泡事件链中发生。

你想要的是添加一个EventFilter,它将在SpreadsheetView拥有它之前捕获事件。

例如,我已经做到了:

,

它正在发挥作用。虽然我真的不知道这种操纵的副作用。