首页 > 解决方案 > 当 Label 在顶部绘制时 ProgressBar 帧率下降

问题描述

我通常不会在这里寻求帮助,但我很难过 - 这个错误是我很长一段时间以来见过的最奇怪的事情。

https://gfycat.com/FluidFrigidEastsiberianlaika

我有一个简单的 UI 对象GhostProgressBar,称为扩展ScalaFX.StackPane并给它两个孩子 - aProgressBar和 a Label。在将它添加到其他一些 UI 屏幕后,我注意到我的帧率急剧下降,以至于 UI 痛苦地无法使用。

代码非常简单:

import scalafx.geometry.Pos
import scalafx.scene.control.{Label, ProgressBar}
import scalafx.scene.layout.StackPane

class GhostProgressBar extends StackPane {

  alignment = Pos.Center

  val bar = new ProgressBar() {
    prefWidth = Integer.MAX_VALUE
  }
  val text = new Label() {
    id = "ProgressBarText"
    text = "PERFORMANCE TESTING"
  }

  children = List(bar, text)
}

在 GIF 中,我在常规元素中使用它VBox-center没有BorderPane什么奇怪或非典型的。

从我观察到的行为来看,我认为在ProgressBar. 刚才我又做了一些调试,我对它与文本样式有关的怀疑得到了证实。

这是 GIF 中文本的样式。

#ProgressBarText {
    -fx-text-fill: #dddddd;
    -fx-font-weight: bold;
}
#ProgressBarText .text {
    -fx-stroke: #333333;
    -fx-stroke-width: 1px;
    -fx-stroke-type: outside;
}

当我删除该样式时,当栏击中文本时帧速率不会下降。

我无法弄清楚为什么会这样?有人有什么想法吗?我不知道它是 Scala 的东西还是 ScalaFX 的东西,无论它是否可以在 JavaFX 上下文中用相同的东西重现。

帮助将不胜感激。

编辑:我被要求提供版本,我们开始:

编辑 2:我被要求尝试相同的屏幕元素,但使用 JavaFX 元素而不是 ScalaFX 元素。这是我使用的代码,结果是一样的——每当概述的文本在进度条的上方时,帧率就会下降。

import javafx.geometry.Pos
import javafx.scene.control.{Label, ProgressBar}
import javafx.scene.layout.StackPane

class JavaFXGhostProgressBar extends StackPane {

    this.setAlignment(Pos.CENTER)

    val bar = new ProgressBar()
    bar.setMaxWidth(Double.MaxValue)
    val text = new Label()
    text.textProperty().setValue("PERFORMANCE TESTING")
    text.idProperty().setValue("OutlineProgressBarText")

    this.getChildren.addAll(bar, text)
}

我找不到我在这里使用的 JavaFX 版本;IntelliJ 奇怪地没有告诉我。我也无法在我的外部库列表中找到它。

标签: scalajavafxscalafx

解决方案


推荐阅读