Nano Hash - криптовалюты, майнинг, программирование

Проблема с прозрачностью всплывающих окон Javafx8

Я пытаюсь перенести свое приложение javafx2 на javafx8, но заметил некоторые проблемы в Linux с элементами управления всплывающими окнами.

screenshotНа снимке экрана показано, как всплывающее окно окружено белой рамкой, которая обычно должна быть прозрачной и иметь эффект тени. Это происходит только на моем Slackware14 Linux, у меня есть тест на виртуальной машине Windows, которая работает на той же машине, и все отображается нормально.

Я думаю, что проблема связана с этими проблемами https://javafx-jira.kenai.com/browse/RT-33709 https://javafx-jira.kenai.com/browse/RT-33750

Мой вопрос: есть ли какие-либо обходные пути, пока это не будет исправлено?

09.01.2014

Ответы:


1

В чем проблема

JavaFX 8 по умолчанию (modena.css) не учитывает, что функция прозрачного окна является необязательной на некоторых платформах (в частности, на некоторых платформах Linux).

Маловероятно, что CSS по умолчанию будет изменен, пока не выйдет Java 9.

Как это исправить

Это решение только для Java 8+.

Предоставьте свой собственный css, чтобы переопределить css по умолчанию, чтобы вы могли поддерживать эти платформы, не отображая уродливые белые области вокруг некоторых ваших элементов управления. Предоставляемый вами css может предполагать, что прозрачные окна не являются функцией базовой платформы, и стилизовать пользовательский интерфейс так, чтобы он по-прежнему хорошо выглядел на таких платформах. Поскольку функция прозрачного окна является условной функцией, при запуске приложения проверьте чтобы узнать, поддерживается ли условная функция, а если нет, примените собственную таблицу стилей через Application.setUserAgentStyleSheet().

Пример заявления

Я тестировал это только на Mac (который поддерживает функцию прозрачного окна), поэтому я не могу убедиться, что он будет работать должным образом в Linux, но я надеюсь, что он будет работать нормально :-)

import javafx.application.Application;
import javafx.application.ConditionalFeature;
import javafx.application.Platform;
import javafx.geometry.Insets;
import javafx.scene.Scene;
import javafx.scene.control.ColorPicker;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

public class SolidPick extends Application {

    public static void main(String[] args) { launch(args); }

    @Override public void start(Stage stage) throws Exception {
        ColorPicker picker = new ColorPicker();

        if (Platform.isSupported(ConditionalFeature.TRANSPARENT_WINDOW)) {
            Application.setUserAgentStylesheet(
                this.getClass().getResource(
                        "solid-pick.css"
                ).toExternalForm()
            );
        }    

        StackPane layout = new StackPane(picker);
        layout.setPadding(new Insets(10));

        stage.setScene(new Scene(layout));
        stage.show();
    }

}

Затем файл solid-pick.css является точной копией всего modena.css со следующими дополнительными строками, добавленными в конец:

.color-palette {
    -fx-background-radius: 0, 0;
    -fx-effect: null;
}

Эти строки:

  1. Дайте всплывающему окну выбора цвета квадратный фон, а не округлый.
  2. Удалите полупрозрачный эффект тени, который обычно окружает всплывающее окно.

Комбинация этих вещей придает всплывающему окну форму и границу, которые выглядят намного лучше в среде, где нет прозрачных окон.

Файл solid-pick.css должен быть помещен в тот же каталог, что и приложение SolidPick, чтобы он был включен в jar-файл приложения и был доступен загрузчику классов приложения.

Пример вывода

Вот пример вывода рендеринга на моем Mac с рамкой тени во всплывающем окне и без нее.

Стандартный рендеринг =>

стандартный рендеринг

Модифицированный рендеринг, с квадратными границами и без теней =>

рендеринг без тени

Предлагаемый подход

Просмотрите все свое приложение (и, возможно, всю таблицу стилей modena.css) и, используя подход, аналогичный тому, который был использован выше для палитры цветов, устраните все проблемы рендеринга, возникающие в среде, не поддерживающей прозрачное окно. Затем используйте полученную таблицу стилей в своем приложении и (если позволяет лицензия) отправьте свою пользовательскую таблицу стилей сообществу, отправив ее в сторонний проект, такой как ControlsFX.

09.01.2014
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..