JavaFX: Como adicionar sombras

Você pode perceber que a sombra neste rectângulo JavaFX mostrado aqui não parece muito realista. Isso porque ele é diretamente atrás do retângulo, como se a fonte de luz fazendo com que a sombra estava morto à frente. Normalmente, esperamos sombras para ser em um pequeno ângulo do objeto projetando a sombra, na maioria das vezes abaixo do objeto e deslocado para um dos lados.

image0.jpg

Felizmente, o DropShadow classe tem várias propriedades que permitem controlar o tamanho e posicionamento da sombra. Esses métodos são listados nesta tabela, que lista os detalhes não só da DropShadow classe, mas também da sua classe irmã, Sombra interior. o Sombra interior classe cria uma sombra dentro de uma forma, em vez de fora da forma. Por agora, o foco em DropShadow.

As Classes Dropshadow e InnerShadow
ConstrutorExplicação
DropShadow ()Cria um novo DropShadow efetuar configurações withdefault.
Sombra interior()Cria um novo Sombra interior efetuar configurações withdefault.
Métodos comunsExplicação
vazio setColor (valor Cor)Define a cor usada para a sombra. O padrão é preto.
setWidth void (valor duplo)Define a largura da sombra. O padrão é 21.
setHeight void (valor duplo)Define a altura da sombra. O padrão é 21.
vazio setOffsetX (valor duplo)O deslocamento horizontal para a sombra. O padrão é 0.
setOffsetY void (valor duplo)O deslocamento vertical para a sombra. O padrão é 0.
setRadius void (valor duplo)O raio do efeito de borrão da sombra. O padrão é10.
dropshadow SóExplicação
vazio setSpread (valor duplo)A proporção (0,0-1,0) da sombra que deve ser cor asolid ao invés de borradas. O padrão é 0.
InnerShadow únicaExplicação
vazio setChoke (valor duplo)A proporção (0,0-1,0) da sombra que deve ser cor asolid ao invés de borradas. O padrão é 0.

Os métodos da DropShadow classe permitem especificar a geometria exata da sombra que você deseja aplicar. o setWidth e setHeight métodos permitem especificar o tamanho da sombra, eo setOffsetX e setOffsetY métodos permitem que você altere a localização do parente sombra ao centro da forma. Normalmente, você vai adicionar um x- positiva e compensar-y para que a sombra aparece abaixo e à direita da forma, como este:

DropShadow shadow1 = new DropShadow () - shadow1.setOffsetX (10) -shadow1.setOffsetY (10) -

Neste exemplo, a sombra é colocada 10 pixels para a direita e 10 pixels abaixo da forma.

o setRadius método permite que você especifique o tamanho do efeito de desfoque aplicada para as bordas da sombra. Quanto maior este número, o fuzzier a sombra aparecerá. Você também pode controlar a espalhar, o que indica que parte do borrão da sombra deve ser de cor sólida antes do efeito borrão nos chutes.

Esta figura mostra um aplicativo JavaFX que demonstra nove variações de sombra projetada básica.

image1.jpg

Para criar esses retângulos sombreados, um método utilitário chamado createShadowedBox foi criado. Aqui está o código para este método:

Retângulo createShadowedBox (o dobro do tamanho, o dobro ShadowWidth, double shadowHeight, double offsetX, double offsetY, raio duplo) {retângulo r = new Rectangle (tamanho, tamanho) -r.setFill (Color.LIGHTGRAY) -r.setStroke (Color.BLACK) -r.setStrokeWidth (2) -DropShadow e = new DropShadow()-e.setWidth(shadowWidth)-e.setHeight(shadowHeight)-e.setOffsetX(offsetX)-e.setOffsetY(offsetY)-e.setRadius(radius)-r.setEffect(e)-return r-}

Como você pode ver, este método aceita seis parâmetros: o tamanho do rectângulo para criar (o retângulo é realmente um quadrado, de modo que o tamanho é usado tanto para a largura ea altura), a largura ea altura da sombra, o x - e y deslocamentos para a sombra, e raio de desfoque da sombra.

O método começa com a criação de um rectângulo. Em seguida, ele cria uma sombra projetada, aplica-se a largura, altura, distância x, y-offset, e raio, e, em seguida, aplica-se o efeito do rectângulo, e retorna o retângulo.

Para criar os retângulos reais sombreadas, o createShadowBox método foi chamado nove vezes, usando diferentes valores de parâmetros:

Rectângulo R1 = createShadowedBox (100, 10, 10, 5, 5, 10) -Rectangle R2 = createShadowedBox (100, 20, 20, 10, 10, 10) -Rectangle R3 = createShadowedBox (100, 30, 30, 15, 15 , 10) -Rectangle R4 = createShadowedBox (100, 20, 20, 0, 0, 10) R5 = -Rectangle createShadowedBox (100, 20, 20, 0, 10, 10) -Rectangle R6 = createShadowedBox (100, 20, 20 , 10, 0, 10) -Rectangle R7 = createShadowedBox (100, 20, 20, 10, 10, 0) -Rectangle R8 = createShadowedBox (100, 20, 20, 10, 10, 20) -Rectangle R9 = createShadowedBox (100 , 20, 20, 10, 10, 50) -

Para o primeiro conjunto de três, o tamanho e deslocamento da sombra foi variado, em cada uma, utilizando os mesmos valores para a largura, a altura e a compensação-x e y-o deslocamento. Assim, a primeira linha de retângulos na figura mostram vários estágios de sombra abaixo e à direita dos retângulos.

Para o próximo conjunto de três, a distância x ou y-offset foi definido como zero para demonstrar variações do offset. E para o último conjunto de três, o raio foi variada. Observe que quando o raio é definido como 0, as bordas da sombra são nítidas. Com valores de raio maiores, a sombra fica mais borrada.

Esta figura mostra como interior sombras trabalhar. Por esta figura, apenas uma linha de código foi alterado no createShadowBox Método: Em vez de criar uma DropShadow, a Sombra interior foi criado:

InnerShadow e = new InnerShadow () -

Como você pode ver, o Sombra interior classe coloca a sombra no interior do rectângulo, em vez de no lado de fora.

image2.jpg

menu