Во время разработки я столкнулся с проблемой, которую пытался решить разными способами, но не мог это исправить. Возникающая проблема заключается в том, что изображения и текст становятся размытыми при размещении в иерархии под элементом ScrollPane (следует отметить, что я использую SceneBuilder для части пользовательского интерфейса, и у меня нет какого-либо конкретного .css). В моем приложении зафиксированы два возможных размера: 1280x720 и развернутый экран с помощью функции, которую я присоединяю. Проблема возникает только тогда, когда окно развернуто на максимум, поэтому при исходном разрешении 1280x720 текст и изображения получаются такими четкими, какими и должны быть.
Сначала я думал, что это просто проблема с масштабированием, но весь текст и элементы за пределами ScrollPane расширяются, сохраняя высокое разрешение.
Код: Выделить всё
public static void maximize(){
Rectangle2D primaryScreenBounds = Screen.getPrimary().getVisualBounds();
mainStage.setX(primaryScreenBounds.getMinX());
mainStage.setY(primaryScreenBounds.getMinY());
mainStage.setWidth(primaryScreenBounds.getWidth());
mainStage.setHeight(primaryScreenBounds.getHeight());
double newX = mainStage.getWidth() / 1280;
double newY = mainStage.getHeight() / 720;
Scale scale = new Scale(newX, newY);
scale.setPivotX(mainStage.getX());
scale.setPivotY(mainStage.getY());
scene.getRoot().getTransforms().setAll(scale);
}
Размытие
Возможно, здесь разница не заметна, но она становится очевидной в приложении, что делает его непригодным для использования при окно развернуто.
Версия JavaFX: 19.0.1+1
Версия среды выполнения JavaFX: необязательно[19.0.1]
I' Я пробовал отключить кэширование формы ScrollPane и установить привязку к пикселям из Scene Builder как для панелей над, так и под ScrollPane. Я также экспериментировал с размещением ScrollPane в разных контейнерах и наоборот, вставляя в него различные другие контейнеры.
В свой основной метод я добавил следующие вызовы:
Код: Выделить всё
test.setCache(false);
for (Node n : test.getChildrenUnmodifiable()) {
n.setCache(false);
}
Я также добавил:
Код: Выделить всё
System.setProperty("prism.lcdtext", "false");
Подробнее здесь: https://stackoverflow.com/questions/784 ... ear-blurry