От JavaFX 2.2 до JavaFX8

1

Я сделал приложение с использованием JavaFX 2.2 и хочу перейти на JavaFX 8. С помощью JavaFX2.2 мое приложение выглядит следующим образом:

Изображение 174551

При использовании JavaFX 8 без изменения исходного кода это выглядит так:

Изображение 174551

С JavaFX8 некоторые узлы вообще не отображаются (например, Criterion 1) и иногда появляются после случайного нажатия на scrollpane. Кроме того, узлы имеют неправильный размер (сравните Шаг 1 и маленькую маленькую точку). Другая проблема заключается в том, что при выполнении таких действий, как добавление узлов, приложение сильно отстает от JavaFX8.

К сожалению, я вообще не получаю сообщений об ошибках, и я почти не понимаю, что мне нужно исправить, чтобы заставить приложение работать в JavaFX8. Любая помощь/идеи/подсказки будут очень признательны.

Возможные проблемы (?):

  • Я часто использовал Platform.runLater() в своем приложении. Возможно, это изменилось в JavaFX 8?
  • в JavaFX2.2 размер узла (например, stackpane, содержащий текст) автоматически вычислялся после добавления его в панель прокрутки. Пусть говорят, что я добавляю узел с позицией x и y. Только после того, как JavaFX нарисовал его, я могу получить его высоту и ширину (boundsInParent.getHeight()). Это также является причиной того, что я часто использовал Platform.runLater() для компоновки узлов. Изменилось ли это поведение в JavaFX 8?

EDIT: "ошибка" связана с стилем CSS. Если я удалю таблицы стилей, которые добавляются к узлам, все работает отлично (за исключением, конечно, стиля узлов). В частности, команды, которые я должен удалить, имеют следующую форму:

. GetStylesheets() добавить (ClassName.class.getResource( "CSSFile.css") toExternalForm().);

  • 0
    У меня была возможно (возможно, нет) похожая проблема. Это связано с тем, что прослушиватели / привязки свойств связаны с WeakReference s в JavaFX 8. Если вы можете воспроизвести эту проблему (то есть простое приложение, которое хорошо работает в JavaFX 2.2, но имеет поведение, описанное выше, в JavaFX 8), возможно, я (или кто-то еще) еще) может помочь.
  • 0
    Просто комментарий: меня действительно не удивляет, что ваш код не работает в версиях JDK, учитывая описание того, как вы реализовали свой макет. Platform.runLater() означает «Сделайте это в будущем в потоке приложений FX»; это не значит «Делать это после того, как были определены границы макета». Поэтому тот факт, что ваш код «работает» в JavaFX 2.2, на самом деле является лишь побочным эффектом реализации библиотеки. Разве вы не можете использовать стандартные методы верстки вместо того, чтобы пытаться самостоятельно управлять компоновкой?
Показать ещё 2 комментария
Теги:
javafx
javafx-8
javafx-2

1 ответ

1
Лучший ответ

Я обнаружил ошибку: у меня было одно отрицательное значение в моей таблице стилей CSS (которая использовалась для узлов). Удаление этого значения заставило его работать, как в JavaFX 2.2. Чтобы быть точным, мне пришлось изменить следующее:

-fx-border-width: 5 -1 0 5 ;

в

-fx-border-width: 5 0 0 5 ;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню