JavaFX Button
Sommaire
- 1- Objectifs
- 2- Introduction :
- 2.1- Utilisation du constructeur avec le texte en argument :
- 2.2- Utilisation de la méthode setText() pour définir le texte :
- 2.3- Principales différences :
- 3- Les étapes clées pour créer un bouton en JavaFX
- 4- Créer un bouton avec une image en JavaFX
- 5- Ajouter des Événements aux Boutons
- 5.1- Introduction aux événements de boutons en JavaFX
- 5.2- Activité pratique
- 5.2.1- Cours JAVA
JavaFX Button
-
Objectifs
- Comprendre les Fondamentaux des Boutons en JavaFX.
- Savoir créer un bouton simple avec du texte en utilisant la classe
javafx.scene.control.Button
. - Comprendre les différentes manières de créer un bouton, soit en utilisant un constructeur avec du texte, soit en utilisant la méthode
setText
. - Apprendre à ajouter des gestionnaires d’événements aux boutons pour répondre aux clics et effectuer des actions spécifiques.
-
Introduction :
- Dans JavaFX, le package javafx.scene.control fournit divers nœuds (classes) spécialement conçus pour les applications d’interface utilisateur et ceux-ci sont réutilisables. Vous pouvez les personnaliser et créer des pages d’affichage pour vos applications JavaFX. exemple : Bouton, CheckBox, Étiquette, etc.
- Un bouton est un contrôle dans les applications d’interface utilisateur. En général, en cliquant sur le bouton, il exécute l’action correspondante.
- Le bouton est l’un des contrôles d’interface utilisateur présents dans JavaFX. La classe `
javafx.scene.control.Button
` est utilisée pour créer un bouton dans un exemple JavaFX. Il est possible de créer un bouton simple ainsi qu’un bouton avec une image. - Le bouton dans JavaFX est utilisé pour contrôler comment l’application fonctionnera lors de la survenue d’un événement particulier. Il est également possible d’ajouter un gestionnaire d’événements au bouton et de fournir une action pour celui-ci.
- Il existe deux façons de créer un bouton en JavaFX :
- En utilisant un constructeur et en passant le texte à afficher sur le bouton.
- En utilisant la méthode `setText()` avec une chaîne de caractères passée en argument.
-
Utilisation du constructeur avec le texte en argument :
- Dans cette méthode, on crée un bouton en utilisant directement le constructeur
new Button(...)
en passant le texte à afficher sur le bouton en argument. Cela permet d’initialiser le texte du bouton dès sa création. -
Utilisation de la méthode setText() pour définir le texte :
- Dans cette méthode, on crée d’abord un bouton vide, puis on utilise la méthode
setText()
pour définir le texte à afficher sur le bouton. Cette approche peut être utile lorsque vous voulez définir le texte du bouton à un moment différent de sa création, par exemple dans une méthode de gestion d’événement. -
Principales différences :
- Initialisation du texte du bouton :
- Avec le constructeur, le texte est défini dès la création du bouton.
- Avec setText(), le texte peut être défini ultérieurement, après la création du bouton.
- Lisibilité et concision du code :
- L’utilisation du constructeur avec le texte en argument peut rendre le code plus lisible et concis, surtout pour des cas simples.
- L’utilisation de setText() peut être plus appropriée lorsque vous avez besoin de définir le texte du bouton à un moment spécifique, par exemple en réponse à un événement.
- Flexibilité :
- L’utilisation de setText() offre plus de flexibilité, car vous pouvez modifier le texte du bouton à tout moment dans votre programme.
- Avec le constructeur, le texte est fixé lors de la création du bouton.
- En résumé, le choix entre ces deux méthodes dépendra de vos besoins spécifiques et de la lisibilité de votre code. L’utilisation du constructeur peut être plus adaptée pour des cas simples, tandis que setText() offre plus de flexibilité lorsque vous avez besoin de modifier le texte du bouton à différents moments de l’exécution de votre programme.
-
Les étapes clées pour créer un bouton en JavaFX
- Exemple de départ:
- 1- Importer les classes nécessaires de JavaFX.
- 2- Créer une classe ButtonUI qui étend Application.
- 3- Redéfinir la méthode start() pour initialiser l’interface.
- 4- Créer un objet Button avec le texte « Submit ».
- 5- Créer un conteneur StackPane et y ajouter le bouton.
- 6- Créer une Scene avec le conteneur StackPane.
- 7- Définir le titre de la fenêtre.
- 8- Définir la scène pour le stage principal.
- 9- Afficher la fenêtre avec la méthode show().
- 10- Appeler launch(args) dans la méthode main() pour exécuter l’application.
-
Créer un bouton avec une image en JavaFX
- Pour créer un bouton avec une image en JavaFX, nous devons importer toutes les bibliothèques requises telles que javafx.application.Application, javafx.scene.Scene, javafx.scene.control.Button, javafx.scene.layout.StackPane, javafx.scene.image.Image, javafx.scene.image.ImageView, et javafx.stage.Stage. Ensuite, nous créons une classe nommée ButtonUI qui étend la classe Application. Nous devons également remplacer la méthode start pour fournir les détails de l’implémentation.
- Cette méthode crée un objet Stage nommé primaryStage. Pour contenir un bouton avec une image, un objet StackPane est créé, puis passé à l’objet Scene. Un objet FileInputStream est créé et passé au constructeur de l’image. L’objet image créé avec le constructeur est ensuite passé à l’objet ImageView.
- Ensuite, un objet de la classe Button est créé, la méthode setWrapText est appelée avec le paramètre true pour s’assurer que le texte est bien enveloppé, puis cet objet bouton est passé à l’objet StackPane en utilisant la méthode add. Ensuite, la scène est préparée, le titre est défini, et la méthode show est appelée pour afficher la sortie.
- Enfin, dans la méthode main, la méthode launch(args) est appelée pour lancer l’application. Dans le cadre de la sortie, un conteneur de type cadre est affiché avec le titre « JavaFX Button with Image Example » et un bouton avec une icône de maison et le texte « home » est affiché dans le cadre.
- Exemple
- Explication
- 1-Importer les classes nécessaires de JavaFX.
- Les bibliothèques requises sont importées pour créer et gérer les éléments JavaFX.
- 2- Créer une classe ButtonUI qui étend Application.
- La classe ButtonUI étend Application et remplace la méthode start.
- 3- Créer un conteneur StackPane et y ajouter le bouton.
- StackPane est utilisé comme conteneur pour le bouton.
- 4-Chargement de l’image :
- Un objet FileInputStream est utilisé pour charger l’image depuis le disque.
- L’image est ensuite chargée dans un objet Image et affichée dans un ImageView.
- 5-Création du bouton :
- Un bouton est créé avec un texte et une image.
- setWrapText(true) permet d’assurer que le texte s’enroule correctement.
- 6-Ajout du bouton au conteneur :
- Le bouton est ajouté à StackPane en utilisant pane.getChildren().add(newbtn).
- 7-Configuration de la scène :
- Une scène est créée avec le conteneur et ajoutée au stage (primaryStage).
- Le titre de la fenêtre est défini et la fenêtre est affichée avec show().
- 8- Appeler launch(args) dans la méthode main() pour exécuter l’application.
- La méthode launch(args) est appelée pour démarrer l’application JavaFX.
-
Ajouter des Événements aux Boutons
-
Introduction aux événements de boutons en JavaFX
- En JavaFX, les boutons sont des contrôles interactifs qui peuvent déclencher des événements lorsque l’utilisateur interagit avec eux. Pour répondre à ces événements, vous devez attacher des gestionnaires d’événements à vos boutons.
- Un gestionnaire d’événements est une fonction qui est appelée lorsqu’un événement spécifique se produit, comme un clic de souris sur un bouton. En attachant des gestionnaires d’événements à vos boutons, vous pouvez définir le comportement à exécuter lorsque l’utilisateur interagit avec eux.
- Exemple d’ajout d’un gestionnaire d’événement à un bouton en JavaFX
- Dans cet exemple, nous créons un bouton, puis nous attachons un gestionnaire d’événement de clic à l’événement setOnAction du bouton. Lorsque l’utilisateur clique sur le bouton, l’expression
lambda event -> { ... }
est exécutée et affiche un message dans la console. - Activité 1 : Ajouter un gestionnaire d’événement avec une classe interne anonyme
- Au lieu d’utiliser une expression lambda, vous pouvez également utiliser une classe interne anonyme pour définir le gestionnaire d’événement. Cela peut être pratique lorsque le code du gestionnaire d’événement est plus long.
- Modifiez l’exemple précédent pour utiliser une classe interne anonyme :
- Dans cet exemple, nous définissons le gestionnaire d’événement en créant une instance anonyme de la classe EventHandler
. La méthode handle est alors appelée lorsque l’utilisateur clique sur le bouton. - Activité 2 : Ajouter un gestionnaire d’événement avec une expression lambda
- Vous pouvez également utiliser une expression lambda pour définir le gestionnaire d’événement de manière encore plus concise.
- Modifiez l’exemple précédent pour utiliser une expression lambda :
- Dans cet exemple, nous utilisons une expression
lambda event -> { ... }
pour définir l’action à exécuter lors du clic sur le bouton. Cette approche est encore plus concise que l’utilisation d’une classe interne anonyme. -
Activité pratique
- 1- Ouvrez Eclipse et créez un nouveau projet JavaFX.
- 2- Ajoutez trois boutons à votre scène JavaFX.
- 3- Pour chaque bouton, ajoutez un gestionnaire d’événement de clic en utilisant l’une des trois approches suivantes :
- Méthode distincte
- Classe interne anonyme
- Expression lambda
- 4- Définissez une action spécifique pour chaque bouton, comme l’affichage d’un message, l’ouverture d’une autre fenêtre ou la modification de l’apparence d’un autre contrôle.
- 5- Testez votre application en cliquant sur chaque bouton et vérifiez que les actions attendues se produisent.
// Création d'un bouton avec le texte "Cliquez-moi" en utilisant le constructeur
Button button1 = new Button("Cliquez-moi");
// Création d'un bouton vide, puis définition du texte avec la méthode setText()
Button button2 = new Button();
button2.setText("Cliquez-moi");
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class ButtonUI extends Application {
@Override
public void start(Stage primaryStage) {
// Créer un objet Button avec le texte "Submit"
Button button = new Button("Submit");
// Créer un conteneur StackPane et y ajouter le bouton
StackPane root = new StackPane();
root.getChildren().add(button);
// Créer une scène avec le conteneur StackPane
Scene scene = new Scene(root, 300, 250);
// Définir le titre de la fenêtre
primaryStage.setTitle("JavaFX Button Example");
// Définir la scène pour le stage principal
primaryStage.setScene(scene);
// Afficher la fenêtre
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class ButtonUI extends Application {
@Override
public void start(Stage primaryStage) {
// Créer un objet Button avec le texte "Submit"
Button button = new Button("Submit");
// Créer un conteneur StackPane et y ajouter le bouton
StackPane root = new StackPane();
root.getChildren().add(button);
// Créer une scène avec le conteneur StackPane
Scene scene = new Scene(root, 300, 250);
// Définir le titre de la fenêtre
primaryStage.setTitle("JavaFX Button Example");
// Définir la scène pour le stage principal
primaryStage.setScene(scene);
// Afficher la fenêtre
primaryStage.show();
public static void main(String[] args) {
launch(args);
}
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.image.Image;
import javafx.scene.image.ImageView;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
public class ButtonUI extends Application {
@Override
public void start(Stage primaryStage) throws FileNotFoundException {
// Création du conteneur StackPane
StackPane pane = new StackPane();
// Chargement de l'image
FileInputStream input = new FileInputStream("path_to_image/home.png");
Image image = new Image(input);
ImageView imageView = new ImageView(image);
// Création du bouton avec l'image
Button newbtn = new Button("Home", imageView);
newbtn.setWrapText(true);
// Ajout du bouton au conteneur
pane.getChildren().add(newbtn);
// Configuration de la scène
Scene scene = new Scene(pane, 400, 400);
primaryStage.setScene(scene);
primaryStage.setTitle("JavaFX Button with Image Example");
primaryStage.show();
}
public static void main(String[] args) {
launch(args);
}
}
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;
public class ButtonUI extends Application {
// Création du conteneur StackPane
StackPane pane = new StackPane();
// Chargement de l'image
FileInputStream input = new FileInputStream("path_to_image/home.png");
Image image = new Image(input);
ImageView imageView = new ImageView(image);
// Création du bouton avec l'image
Button newbtn = new Button("Home", imageView);
newbtn.setWrapText(true);
// Ajout du bouton au conteneur
pane.getChildren().add(newbtn);
// Configuration de la scène
Scene scene = new Scene(pane, 400, 400);
primaryStage.setScene(scene);
primaryStage.setTitle("JavaFX Button with Image Example");
primaryStage.show();
public static void main(String[] args) {
launch(args);
}
// Créer un bouton
Button myButton = new Button("Cliquez-moi");
// Ajouter un gestionnaire d'événement de clic
myButton.setOnAction(event -> {
System.out.println("Vous avez cliqué sur le bouton !");
});
// Créer un bouton
Button myButton = new Button("Cliquez-moi");
// Ajouter un gestionnaire d'événement de clic avec une classe interne anonyme
myButton.setOnAction(new EventHandler() {
@Override
public void handle(ActionEvent event) {
System.out.println("Vous avez cliqué sur le bouton !");
}
});
// Créer un bouton
Button myButton = new Button("Cliquez-moi");
// Ajouter un gestionnaire d'événement de clic avec une expression lambda
myButton.setOnAction(event -> {
System.out.println("Vous avez cliqué sur le bouton !");
});
Solution
package application;
import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.VBox;
import javafx.stage.Stage;
public class activiteEvent extends Application {
public static void main(String[] args) {
launch(args);
}
@Override
public void start(Stage primaryStage) {
// Créer les boutons
Button button1 = new Button("Button 1");
Button button2 = new Button("Button 2");
Button button3 = new Button("Button 3");
// Ajouter des gestionnaires d'événements
button1.setOnAction(this::handleButton1Click);
button2.setOnAction(new javafx.event.EventHandler() {
@Override
public void handle(javafx.event.ActionEvent event) {
System.out.println("Button 2 clicked!");
}
});
button3.setOnAction(event -> System.out.println("Button 3 clicked!"));
// Ajouter les boutons à un layout
VBox vbox = new VBox(button1, button2, button3);
Scene scene = new Scene(vbox, 300, 200);
// Configurer la scène et la fenêtre principale
primaryStage.setScene(scene);
primaryStage.setTitle("JavaFX Button Example");
primaryStage.show();
}
private void handleButton1Click(javafx.event.ActionEvent event) {
System.out.println("Button 1 clicked!");
}
}