Pergunta

Eu estou tentando porta de minha javafx2 aplicativo para javafx8 mas ter notado alguns problemas no Linux com sobreposição de controles.

screenshot A captura de tela mostra como o pop-up tem uma caixa branca em torno dela, que normalmente deve ser transparente e soltar efeito de sombra.Isso só acontece no meu Slackware14 Linux, eu tenho teste na VM do Windows que é executado na mesma máquina e faz bem.

Eu acho que o problema está relacionado a estas questões https://javafx-jira.kenai.com/browse/RT-33709 https://javafx-jira.kenai.com/browse/RT-33750

A minha pergunta é: há alguma solução até que isso seja corrigido ?

Foi útil?

Solução

Qual É o Problema

O padrão JavaFX 8 (modena.css) não leva em conta que a janela transparente recurso é opcional em algumas plataformas (especificamente algumas plataformas Linux).

É improvável que o css padrão será alterado até que o Java 9 vem de fora.

Como Corrigir

Esta é uma solução para o Java 8+ só.

Fonte de seu próprio css para substituir o padrão do css, de modo que você pode oferecer suporte a essas plataformas sem apresentar uma branca feia áreas de fronteira em torno de alguns de seus controles.O css que você fornece pode-se assumir que transparente do windows não são um recurso da plataforma subjacente e o estilo da INTERFACE do usuário de forma que ele ainda fica bem em tais plataformas.Como o janela transparente recurso é um ConditionalFeature, no arranque da aplicação, verifique se o condicional funcionalidade é suportada, e se não é, aplicar o seu personalizado de folha de estilos através de Aplicação.setUserAgentStyleSheet().

Aplicação De Exemplo

Eu só testei isso em um Mac (que suporta a janela transparente recurso), então eu realmente não posso verificar que vai funcionar como esperado no Linux, mas eu espero que ele vai funcionar bem :-)

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();
    }

}

Em seguida, o arquivo solid-pick.css uma cópia exata de todo o modena.css com as seguintes linhas adicionais acrescentados ao final:

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

Estas linhas:

  1. Dar o seletor de cores pop-up de um quadrado de plano de fundo, ao invés de incluir um arredondada.
  2. Remover o translúcido queda efeito de sombra que normalmente envolve o pop-up.

A combinação de todas essas coisas fornecer o pop-up com uma forma e de fronteira, o que parece muito melhor em um ambiente que não oferece janelas transparentes.

O solid-pick.css arquivo deve ser colocado no mesmo diretório como o SolidPick aplicação, de modo a que seja incluído no aplicativo jar e estará disponível para o aplicativo carregador de classe.

Exemplo De Saída

Eis alguns exemplos de saída de renderização no meu Mac com e sem o dropshadow fronteira no pop-up.

Padrão de renderização =>

standard rendering

Modificado de renderização, com bordas quadradas e sem sombra =>

rendering without shadow

Abordagem Sugerida

Por toda a aplicação (e, possivelmente, todo o modena.folha de estilos css) e, usando uma abordagem semelhante à que feito acima para o seletor de cor, correção de qualquer processamento de problemas que surgem em uma janela transparente incapaz ambiente.Em seguida, use a resultante de folha de estilos em seu aplicativo e (no caso de licenciamento de licenças), contribuir com o seu personalizado de folha de estilos para a comunidade, enviando-a para uma festa de 3 projecto, tais como ControlsFX.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top