【问题标题】:JavaFX how to check if mouse click triggered Tab selectionJavaFX如何检查鼠标单击是否触发了选项卡选择
【发布时间】:2017-12-26 08:48:15
【问题描述】:

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

【问题讨论】:

  • 可能值得先解决性能问题。
  • 是的,过去两天我一直在尝试这样做,取得了重大改进,但仍有工作要做。这是我正在探索的一条途径。希望有一种方法可以执行上述操作或强制选项卡窗格首先不选择任何内容。
  • 听起来您正在尝试修复视图中的模型问题。相反,请使用 javafx.concurrent.Worker 并更新相关属性,以免选项卡选择延迟。
  • 是的,我每次通过从更改的模型重新创建整个视图来更改选项卡时应用一个新的“模型”,而不是将模型应用于已经存在的内容。我能够获得 400% 的性能提升。 :D 这个问题不再需要回答,但我想我会留下它,以防万一有人有解决方案而其他人可能需要它。

标签: javafx tabpanel


【解决方案1】:

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

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

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

如果您遇到性能问题并且对 MVC/JavaFX 编程比较陌生,我强烈建议您查看这篇文章:

Scene loads too slow

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-02-25
    • 2019-04-22
    • 1970-01-01
    • 2013-03-17
    • 2014-03-28
    • 2016-08-26
    • 2014-04-09
    • 1970-01-01
    相关资源
    最近更新 更多