Обычно я бы здесь не просил помощи, но я в тупике - эта ошибка - самая странная вещь, которую я видел за долгое время.
https://gfycat.com/FluidFrigidEastsiberianlaika
IУ нас есть простой объект пользовательского интерфейса GhostProgressBar
, который расширяет ScalaFX.StackPane
и дает ему двух дочерних элементов - a ProgressBar
и Label
.После добавления его на некоторые другие экраны пользовательского интерфейса я заметил, что моя частота кадров резко упала до такой степени, что пользовательский интерфейс был крайне непригодным для использования.
Код для этого очень прост:
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.
Помощь будет принята с благодарностью.
РЕДАКТИРОВАТЬ: Я былзапрашиваемые версии, здесь мы идем:
- Версия Scala: 2.12.7
- Версия ScalaFX: 8.0.102-R11
- Версия JDK: 1.8.0_181
- Версия JavaFX: неизвестно, я не знаком с внутренностями 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 был странно невнимательным, не сказав мне.Я также не смог найти его в списке внешних библиотек.