JavaFX - Cores
Para aplicar cores a um aplicativo, o JavaFX oferece várias classes no pacote javafx.scene.paintpacote. Este pacote contém uma classe abstrata chamada Paint e é a classe base de todas as classes usadas para aplicar cores.
Usando essas classes, você pode aplicar cores nos seguintes padrões -
Uniform - Neste padrão, a cor é aplicada uniformemente em todo o nó.
Image Pattern - Isso permite que você preencha a região do nó com um padrão de imagem.
Gradient- Neste padrão, a cor aplicada ao nó varia de um ponto a outro. Tem dois tipos de gradientes, a saberLinear Gradient e Radial Gradient.
Todas as classes de nós às quais você pode aplicar cores, como Shape, Text (incluindo Scene), tem métodos nomeados setFill() e setStroke(). Isso ajudará a definir os valores de cor dos nós e seus traços, respectivamente.
Esses métodos aceitam um objeto do tipo Paint. Portanto, para criar qualquer um desses tipos de imagens, é necessário instanciar essas classes e passar o objeto como parâmetro para esses métodos.
Aplicando Cor aos Nós
Para definir um padrão de cor uniforme para os nós, você precisa passar um objeto da cor da classe para o setFill(), setStroke() métodos como segue -
//Setting color to the text
Color color = new Color.BEIGE
text.setFill(color);
//Setting color to the stroke
Color color = new Color.DARKSLATEBLUE
circle.setStroke(color);
No bloco de código acima, estamos usando as variáveis estáticas da classe color para criar um objeto de cor.
Da mesma forma, você também pode usar os valores RGB ou o padrão HSB de cores ou códigos hash de cores da web, conforme mostrado abaixo -
//creating color object by passing RGB values
Color c = Color.rgb(0,0,255);
//creating color object by passing HSB values
Color c = Color.hsb(270,1.0,1.0);
//creating color object by passing the hash code for web
Color c = Color.web("0x0000FF",1.0);
Exemplo
A seguir está um exemplo que demonstra como aplicar cor aos nós no JavaFX. Aqui, estamos criando um círculo e nós de texto e aplicando cores a eles.
Salve este código em um arquivo com o nome ColorExample.java.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.stage.Stage;
import javafx.scene.shape.Circle;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
public class ColorExample extends Application {
@Override
public void start(Stage stage) {
//Drawing a Circle
Circle circle = new Circle();
//Setting the properties of the circle
circle.setCenterX(300.0f);
circle.setCenterY(180.0f);
circle.setRadius(90.0f);
//Setting color to the circle
circle.setFill(Color.DARKRED);
//Setting the stroke width
circle.setStrokeWidth(3);
//Setting color to the stroke
circle.setStroke(Color.DARKSLATEBLUE);
//Drawing a text
Text text = new Text("This is a colored circle");
//Setting the font of the text
text.setFont(Font.font("Edwardian Script ITC", 50));
//Setting the position of the text
text.setX(155);
text.setY(50);
//Setting color to the text
text.setFill(Color.BEIGE);
text.setStrokeWidth(2);
text.setStroke(Color.DARKSLATEBLUE);
//Creating a Group object
Group root = new Group(circle, text);
//Creating a scene object
Scene scene = new Scene(root, 600, 300);
//Setting title to the Stage
stage.setTitle("Color Example");
//Adding scene to the stage
stage.setScene(scene);
//Displaying the contents of the stage
stage.show();
}
public static void main(String args[]){
launch(args);
}
}
Compile e execute o arquivo java salvo no prompt de comando usando os comandos a seguir.
Javac ColorExample.java
java ColorExample
Ao ser executado, o programa acima gera uma janela JavaFX da seguinte forma -
Aplicando padrão de imagem aos nós
Para aplicar um padrão de imagem aos nós, instancie o ImagePattern classe e passar seu objeto para o setFill(), setStroke() métodos.
O construtor desta classe aceita seis parâmetros, a saber -
Image - O objeto da imagem com o qual você deseja criar o padrão.
x and y - Variáveis duplas que representam as coordenadas (x, y) de origem do retângulo âncora.
height and width - Variáveis duplas que representam a altura e largura da imagem que é usada para criar um padrão.
isProportional- Esta é uma variável booleana; ao definir essa propriedade como true, os locais de início e término são definidos para serem proporcionais.
ImagePattern radialGradient = new ImagePattern(dots, 20, 20, 40, 40, false);
Exemplo
A seguir está um exemplo que demonstra como aplicar o padrão de imagem aos nós no JavaFX. Aqui, estamos criando um círculo e um nó de texto e aplicando um padrão de imagem a eles.
Salve este código em um arquivo com o nome ImagePatternExample.java.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.paint.Color;
import javafx.scene.paint.ImagePattern;
import javafx.scene.paint.Stop;
import javafx.stage.Stage;
import javafx.scene.shape.Circle;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
public class ImagePatternExample extends Application {
@Override
public void start(Stage stage) {
//Drawing a Circle
Circle circle = new Circle();
//Setting the properties of the circle
circle.setCenterX(300.0f);
circle.setCenterY(180.0f);
circle.setRadius(90.0f);
//Drawing a text
Text text = new Text("This is a colored circle");
//Setting the font of the text
text.setFont(Font.font("Edwardian Script ITC", 50));
//Setting the position of the text
text.setX(155);
text.setY(50);
//Setting the image pattern
String link = "https://encrypted-tbn1.gstatic.com"
+ "/images?q=tbn:ANd9GcRQub4GvEezKMsiIf67U"
+ "rOxSzQuQ9zl5ysnjRn87VOC8tAdgmAJjcwZ2qM";
Image image = new Image(link);
ImagePattern radialGradient = new ImagePattern(image, 20, 20, 40, 40, false);
//Setting the linear gradient to the circle and text
circle.setFill(radialGradient);
text.setFill(radialGradient);
//Creating a Group object
Group root = new Group(circle, text);
//Creating a scene object
Scene scene = new Scene(root, 600, 300);
//Setting title to the Stage
stage.setTitle("Image pattern Example");
//Adding scene to the stage
stage.setScene(scene);
//Displaying the contents of the stage
stage.show();
}
public static void main(String args[]){
launch(args);
}
}
Compile e execute o arquivo java salvo no prompt de comando usando os comandos a seguir.
Javac ImagePatternExample.java
java ImagePatternExample
Ao ser executado, o programa acima gera uma janela JavaFX da seguinte forma -
Aplicando Padrão de Gradiente Linear
Para aplicar um padrão de gradiente linear aos nós, instancie o LinearGradient classe e passar seu objeto para o setFill(), setStroke() métodos.
O construtor desta classe aceita cinco parâmetros, a saber -
startX, startY - Essas propriedades duplas representam as coordenadas xey do ponto inicial do gradiente.
endX, endY - Essas propriedades duplas representam as coordenadas xey do ponto final do gradiente.
cycleMethod - Este argumento define como as regiões fora dos limites do gradiente de cor, definidas pelos pontos inicial e final, devem ser preenchidas.
proportional- Esta é uma variável booleana; ao definir esta propriedade paratrue, os locais de início e término são definidos em uma proporção.
Stops - Este argumento define os pontos de interrupção da cor ao longo da linha de gradiente.
//Setting the linear gradient
Stop[] stops = new Stop[] {
new Stop(0, Color.DARKSLATEBLUE),
new Stop(1, Color.DARKRED)
};
LinearGradient linearGradient =
new LinearGradient(0, 0, 1, 0, true, CycleMethod.NO_CYCLE, stops);
Exemplo
A seguir está um exemplo que demonstra como aplicar um padrão de gradiente aos nós no JavaFX. Aqui, estamos criando um círculo e um nó de texto e aplicando um padrão de gradiente linear a eles.
Salve este código em um arquivo com o nome LinearGradientExample.java.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.paint.CycleMethod;
import javafx.scene.paint.LinearGradient;
import javafx.scene.paint.Stop;
import javafx.stage.Stage;
import javafx.scene.shape.Circle;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
public class LinearGradientExample extends Application {
@Override
public void start(Stage stage) {
//Drawing a Circle
Circle circle = new Circle();
//Setting the properties of the circle
circle.setCenterX(300.0f);
circle.setCenterY(180.0f);
circle.setRadius(90.0f);
//Drawing a text
Text text = new Text("This is a colored circle");
//Setting the font of the text
text.setFont(Font.font("Edwardian Script ITC", 55));
//Setting the position of the text
text.setX(140);
text.setY(50);
//Setting the linear gradient
Stop[] stops = new Stop[] {
new Stop(0, Color.DARKSLATEBLUE),
new Stop(1, Color.DARKRED)
};
LinearGradient linearGradient =
new LinearGradient(0, 0, 1, 0, true, CycleMethod.NO_CYCLE, stops);
//Setting the linear gradient to the circle and text
circle.setFill(linearGradient);
text.setFill(linearGradient);
//Creating a Group object
Group root = new Group(circle, text);
//Creating a scene object
Scene scene = new Scene(root, 600, 300);
//Setting title to the Stage
stage.setTitle("Linear Gradient Example");
//Adding scene to the stage
stage.setScene(scene);
//Displaying the contents of the stage
stage.show();
}
public static void main(String args[]){
launch(args);
}
}
Compile e execute o arquivo java salvo no prompt de comando usando os comandos a seguir.
Javac LinearGradientExample.java
java LinearGradientExample
Ao ser executado, o programa acima gera uma janela JavaFX da seguinte forma -
Aplicando Padrão de Gradiente Radial
Para aplicar um padrão de gradiente radial aos nós, instancie o GradientPattern classe e passar seu objeto para o setFill(), setStroke() métodos.
O construtor desta classe aceita alguns parâmetros, alguns dos quais são -
startX, startY - Essas propriedades duplas representam as coordenadas xey do ponto inicial do gradiente.
endX, endY - Essas propriedades duplas representam as coordenadas xey do ponto final do gradiente.
cycleMethod - Este argumento define como as regiões fora dos limites do gradiente de cor são definidas pelos pontos inicial e final e como devem ser preenchidos.
proportional- Esta é uma variável booleana; ao definir esta propriedade paratrue os locais de início e fim são definidos em uma proporção.
Stops - Este argumento define os pontos de interrupção da cor ao longo da linha de gradiente.
//Setting the radial gradient
Stop[] stops = new Stop[] {
new Stop(0.0, Color.WHITE),
new Stop(0.3, Color.RED),
new Stop(1.0, Color.DARKRED)
};
RadialGradient radialGradient =
new RadialGradient(0, 0, 300, 178, 60, false, CycleMethod.NO_CYCLE, stops);
Exemplo
A seguir está um exemplo que demonstra como aplicar um padrão de gradiente radial aos nós no JavaFX. Aqui, estamos criando um círculo e um nó de texto e aplicando um padrão de gradiente a eles.
Salve este código em um arquivo com o nome RadialGradientExample.java.
import javafx.application.Application;
import javafx.scene.Group;
import javafx.scene.Scene;
import javafx.scene.paint.Color;
import javafx.scene.paint.CycleMethod;
import javafx.scene.paint.RadialGradient;
import javafx.scene.paint.Stop;
import javafx.stage.Stage;
import javafx.scene.shape.Circle;
import javafx.scene.text.Font;
import javafx.scene.text.Text;
public class RadialGradientExample extends Application {
@Override
public void start(Stage stage) {
//Drawing a Circle
Circle circle = new Circle();
//Setting the properties of the circle
circle.setCenterX(300.0f);
circle.setCenterY(180.0f);
circle.setRadius(90.0f);
//Drawing a text
Text text = new Text("This is a colored circle");
//Setting the font of the text
text.setFont(Font.font("Edwardian Script ITC", 50));
//Setting the position of the text
text.setX(155);
text.setY(50);
//Setting the radial gradient
Stop[] stops = new Stop[] {
new Stop(0.0, Color.WHITE),
new Stop(0.3, Color.RED),
new Stop(1.0, Color.DARKRED)
};
RadialGradient radialGradient =
new RadialGradient(0, 0, 300, 178, 60, false, CycleMethod.NO_CYCLE, stops);
//Setting the radial gradient to the circle and text
circle.setFill(radialGradient);
text.setFill(radialGradient);
//Creating a Group object
Group root = new Group(circle, text);
//Creating a scene object
Scene scene = new Scene(root, 600, 300);
//Setting title to the Stage
stage.setTitle("Radial Gradient Example");
//Adding scene to the stage
stage.setScene(scene);
//Displaying the contents of the stage
stage.show();
}
public static void main(String args[]) {
launch(args);
}
}
Compile e execute o arquivo java salvo no prompt de comando usando os comandos a seguir.
Javac RadialGradientExample.java
java RadialGradientExample
Ao ser executado, o programa acima gera uma janela JavaFX da seguinte forma -