JavaFX如何检查鼠标单击是否触发了选项卡选择

JavaFX how to check if mouse click triggered Tab selection

我有一个选项卡窗格,其中包含一堆选项卡(很明显)。通常,您可以通过在选项卡上调用 setOnSelectionChanged() 来为每个选项卡设置一个侦听器。但是,如果以某种方式重新组织 TabPane,则选项卡窗格会自动选择列表中的第一个选项卡。这对我造成了一些性能问题,所以我想知道是否有办法知道鼠标单击是否导致选项卡被选中。显然标签不能有 onMouseClick() 听众。

虽然没有找到答案的解决方案,因为选项卡实际上不是节点并且没有鼠标点击侦听器,但性能问题已解决。

更改选项卡时,我(懒惰地)重新创建整个视图并将模型应用于视图。每次选项卡更改时,这都会导致大约 140 毫秒或更长时间的延迟。在实施搜索框以查找正确的选项卡时,这是一个更大的问题,因为随着从搜索中重新创建选项卡,随着选项卡选择的更改,视图正在重新创建(添加新选项卡时选项卡窗格自动选择第一个选项卡).

最终设计更改为让控制器创建一次视图,并在选项卡更改时简单地将模型挂接到视图,而不是一遍又一遍地重新创建视图。

如果您遇到性能问题并且对 MVC/JavaFX 编程相对较新,我强烈建议您查看此 post:

Scene loads too slow

目前更改标签页大约需要 15 毫秒,这是一个显着的改进!