Adicionar uma imagem de fundo em JavaFX
- Adicionar uma imagem de fundo JavaFX usando CSS
-
Adicione uma imagem de fundo JavaFX usando
BackgroundImage
em Java - Resumo
Este tutorial apresenta como adicionar imagens de fundo no aplicativo JavaFX. Você também pode seguir os códigos de exemplo que incluímos para ajudá-lo a entender o tópico.
O aplicativo JavaFX básico contém um estágio primário, uma cena e nós individuais. A cena organiza as raízes em formato de árvore, e a raiz dessa árvore é chamada de Root Node
.
Nossa classe deve estender a classe Application
de javafx.application
para criar um aplicativo JavaFX. Então, precisamos sobrescrever o método start()
.
Aqui, mostraremos como adicionar uma imagem ao plano de fundo de um aplicativo JavaFX. Existem duas maneiras de fazer este processo: usando CSS e usando a classe BackgroundImage
.
Adicionar uma imagem de fundo JavaFX usando CSS
CSS é uma abreviatura de Cascading Style Sheets e é usado para estilizar páginas da web. Além disso, CSS também pode ser usado para estilizar aplicativos JavaFX. Usaremos as seguintes regras CSS para definir e estilizar a imagem de fundo. Você pode adicionar mais regras de acordo com suas necessidades.
-fx-background-image: url('image-url');
-fx-background-repeat: no-repeat;
-fx-background-size: 500 500;
-fx-background-position: center center;
Podemos usar regras CSS embutidas com a ajuda do método setStyle()
no nó raiz. CSS embutido é ótimo se quisermos apenas adicionar algumas regras. O código JavaFX completo é mostrado abaixo.
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.*;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
StackPane root = new StackPane();
Scene scene = new Scene(root, 650, 650);
root.setStyle(
"-fx-background-image: url('https://cdn.app.compendium.com/uploads/user/e7c690e8-6ff9-102a-ac6d-e4aebca50425/ed5569e8-c0dd-458c-8450-cde6300093bd/File/a5023b0f0fb67f59176a0499af9021ed/java_horz_clr.png'); -fx-background-repeat: no-repeat; -fx-background-size: 500 500; -fx-background-position: center center;");
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
CSS embutido pode se tornar um pouco complicado e difícil de entender se tivermos muitas regras. Em vez disso, podemos criar um arquivo CSS separado e adicionar essas regras a esse arquivo. O conteúdo do arquivo CSS é mostrado abaixo.
#stack-pane{
-fx-background-image: url("https://cdn.app.compendium.com/uploads/user/e7c690e8-6ff9-102a-ac6d-e4aebca50425/ed5569e8-c0dd-458c-8450-cde6300093bd/File/a5023b0f0fb67f59176a0499af9021ed/java_horz_clr.png");
-fx-background-repeat: no-repeat;
-fx-background-size: 500 500;
-fx-background-position: center center;
}
Usamos um seletor de ID no arquivo CSS, portanto, devemos definir o mesmo ID para a raiz de nosso aplicativo JavaFX. Este processo pode ser feito usando a propriedade setId()
.
Podemos simplesmente adicionar uma referência a este arquivo CSS e as regras serão aplicadas ao nosso aplicativo. Usaremos os métodos getStylesheets()
e add()
na cena do aplicativo para usar o arquivo CSS. O código completo para isso é mostrado abaixo.
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.layout.*;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
StackPane root = new StackPane();
root.setId("stack-pane");
Scene scene = new Scene(root, 650, 650);
scene.getStylesheets().add(String.valueOf(this.getClass().getResource("sample.css")));
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Adicione uma imagem de fundo JavaFX usando BackgroundImage
em Java
JavaFX fornece uma classe BackgroundImage
, uma opção conveniente de usar se não quisermos adicionar CSS. O construtor desta classe pega um objeto de classe Image
e outras propriedades de imagem de fundo. A assinatura do construtor desta classe é mostrada a seguir.
BackgroundImage(Image img, BackgroundRepeat repeatXAxis, BackgroundRepeat repeatYAxis,
BackgroundPosition pos, BackgroundSize size)
Usaremos a posição e o tamanho padrão e a imagem não deve ser repetida. Precisamos usar o objeto BackgroundImage
para criar uma instância de classe Background
. Finalmente, podemos usar o setBackground()
no nó raiz para definir a imagem no fundo. O código completo para isso é mostrado abaixo.
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.layout.*;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage primaryStage) {
StackPane root = new StackPane();
Scene scene = new Scene(root, 650, 650);
Image img = new Image(
"https://cdn.app.compendium.com/uploads/user/e7c690e8-6ff9-102a-ac6d-e4aebca50425/ed5569e8-c0dd-458c-8450-cde6300093bd/File/a5023b0f0fb67f59176a0499af9021ed/java_horz_clr.png");
BackgroundImage bImg = new BackgroundImage(img, BackgroundRepeat.NO_REPEAT,
BackgroundRepeat.NO_REPEAT, BackgroundPosition.DEFAULT, BackgroundSize.DEFAULT);
Background bGround = new Background(bImg);
root.setBackground(bGround);
primaryStage.setScene(scene);
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
Resumo
O JavaFX pode estar desatualizado e substituído por outras tecnologias mais recentes, mas ainda pode ser usado para vários fins. Podemos definir a imagem de fundo em um aplicativo JavaFX usando regras CSS. Também podemos aplicar CSS diretamente aos nós usando o método setStyle()
.
Se tivermos mais regras, também podemos usar um arquivo CSS externo. O JavaFX também fornece uma classe BackgroundImage
para definir o plano de fundo usando apenas o Java puro facilmente.