Частота кадров ProgressBar падает, когда Label рисует сверху - PullRequest
0 голосов
/ 29 ноября 2018

Обычно я бы здесь не просил помощи, но я в тупике - эта ошибка - самая странная вещь, которую я видел за долгое время.

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 был странно невнимательным, не сказав мне.Я также не смог найти его в списке внешних библиотек.

...