我通常不会在这里寻求帮助,但是我很困惑-这个错误是我很长时间以来见过的最奇怪的事情。
https://gfycat.com/FluidFrigidEastsiberianlaika
我有一个名为GhostProgressBar
的简单UI对象,该对象扩展了ScalaFX.StackPane
并为其赋予了两个子对象-ProgressBar
和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
的{{1}}元素-没什么奇怪或非典型的。
从我观察到的行为来看,我认为这是在BorderPane
栏上绘制文本的问题。刚才我做了一些调试,我怀疑它与文本样式有关。
这是GIF文本中的样式。
ProgressBar
当我删除该样式时,当栏碰到文本时,帧率不会降低。
我不知道为什么为什么发生了?任何人有任何想法吗?我不知道它是Scala还是ScalaFX,是否可以在JavaFX上下文中用相同的东西重现。
我们将不胜感激。
编辑:有人要求我提供版本,然后我们开始:
编辑2:我被要求尝试相同的屏幕元素,但是使用JavaFX元素而不是ScalaFX元素。这是我使用的代码,结果是相同的-每当轮廓文本超过进度条时,帧速率就会下降。
#ProgressBarText {
-fx-text-fill: #dddddd;
-fx-font-weight: bold;
}
#ProgressBarText .text {
-fx-stroke: #333333;
-fx-stroke-width: 1px;
-fx-stroke-type: outside;
}
我找不到在这里使用的JavaFX版本; IntelliJ奇怪地不考虑不告诉我。我也无法在我的外部库列表中找到它。