FAQ JavaFXConsultez toutes les FAQ

Nombre d'auteurs : 4, nombre de questions : 507, dernière mise à jour : 2 novembre 2016  Ajouter une question

 

Cette FAQ a été réalisée à partir des questions fréquemment posées sur le forum JavaFX de http://java.developpez.com ainsi que l'expérience personnelle des auteurs.

Nous tenons à souligner que cette FAQ ne garantit en aucun cas que les informations qu'elle propose sont correctes. Les auteurs font leur maximum, mais l'erreur est humaine. Cette FAQ ne prétend pas non plus être complète. Si vous trouvez une erreur, ou que vous souhaitez nous aider en devenant rédacteur, lisez ceci.

Sur ce, nous vous souhaitons une bonne lecture.


SommaireSceneGraphInterface utilisateurContrôlesMenus (9)
précédent sommaire suivant
 

Pour créer une barre de menu, il vous faut créer une instance de la classe javafx.scene.control.MenuBar, et placer cette instance dans votre IU, par exemple dans la partie top d'un BorderPane.

Par exemple :

Code Java : Sélectionner tout
1
2
3
final MenuBar menuBar = new MenuBar(); 
final BorderPane root = new BorderPane(); 
root.setTop(menuBar);

Mis à jour le 7 octobre 2014 bouye

Sur Mac OS X, le plus souvent, la barre de menu d'une application n'est pas affichée en haut de la fenêtre de l'application ; elle apparait plutôt dans la barre de menu système, en haut de l’écran. Le contenu de la barre de menu système change en fonction de la fenêtre active.

Pour activer cette fonctionnalité, il vous suffit de modifier la valeur de la propriété useSystemMenuBar de la classe MenuBar et de lui donner une valeur égale à true.

Par exemple :

Code Java : Sélectionner tout
menuBar.setUseSystemMenuBar(true);

Ce qui permet de placer la barre de menu dans la barre de menu système :



Dans une application, une seule barre de menu doit voir sa propriété useSystemMenuBar mise à la valeur true. Le comportement de la barre système n'est pas défini si plusieurs barres de menu voient leurs propriétés modifiées.

Mis à jour le 7 octobre 2014 bouye

Pour ajouter des entrées dans une barre de menu, il faut ajouter des instances de la classe javafx.scene.control.Menu dans la liste observable menus de cette barre.

Par exemple :

Code Java : Sélectionner tout
1
2
3
4
5
final Menu fileMenu = new Menu("Fichier"); 
final Menu editMenu = new Menu("Édition"); 
final Menu helpMenu = new Menu("Aide"); 
final MenuBar menuBar = new MenuBar(); 
menuBar.getMenus().setAll(fileMenu, editMenu, helpMenu);

Pour retirer des entrées, il suffit de les enlever de la liste observable menus.

Note : il n'est pas possible d'afficher autre chose que des menus dans une barre de menu. Pour des affichages complexes (par exemple : la barre de menu dans NetBeans contient un champ de recherche), il faudra intégrer la barre de menu dans un autre contrôle qui contiendra les objets n’étant pas des menus.

Mis à jour le 7 octobre 2014 bouye

Pour ajouter des entrées dans des menus, il faut ajouter des instances de la classe javafx.scene.control.MenuItem dans la liste observable items du menu.

Ces instances peuvent être des types suivants :

  • Menu - un sous-menu ;
  • MenuItem - une entrée simple ;
  • CheckMenuItem - une entrée à cocher ;
  • RadioMenuItem - une entrée radio à cocher ; ce type d’entrée est également une bascule ;
  • SeparatorMenuItem - un séparateur horizontal ;
  • CustomMenuItem - une entrée contenant un menu à l'apparence customisée.


Par exemple :

Code Java : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
final MenuItem exitItem = new MenuItem("Quitter"); 
final Menu fileMenu = new Menu("Fichier"); 
fileMenu.getItems().setAll(exitItem); 
final MenuItem copyItem = new MenuItem("Copier"); 
final MenuItem cutItem = new MenuItem("Couper"); 
final MenuItem pasteItem = new MenuItem("Coller"); 
final MenuItem optionsItem= new MenuItem("Options...");  
final Menu editMenu = new Menu("Édition"); 
editMenu.getItems().setAll(copyItem, cutItem, pasteItem, new SeparatorMenuItem(), optionsItem); 
final MenuItem aboutItem = new MenuItem("À propos..."); 
final Menu helpMenu = new Menu("Aide"); 
helpMenu.getItems().setAll(aboutItem);

Pour retirer des entrées, il suffit de les enlever de la liste observable items.

Mis à jour le 7 octobre 2014 bouye

Pour créer un menu contextuel, il vous faut créer une instance de la classe javafx.scene.control.ContextMenu. Pour ajouter des entrées dans ce menu, il faut ajouter des instances de la classe javafx.scene.control.MenuItem dans la liste observable items du menu contextuel.

Par exemple :

Code Java : Sélectionner tout
1
2
3
4
5
6
7
final MenuItem imageItem = new MenuItem("Image..."); 
final MenuItem pdfItem = new MenuItem("PDF..."); 
final Menu exportMenu = new Menu("Export"); 
exportMenu.getItems().setAll(imageItem, pdfItem); 
final MenuItem propertiesItem = new MenuItem("Propriétés..."); 
final ContextMenu contextMenu = new ContextMenu(); 
contextMenu.getItems().setAll(exportMenu, new SeparatorMenuItem(), propertiesItem);

Pour retirer des entrées, il suffit de les enlever de la liste observable items.

Mis à jour le 7 octobre 2014 bouye

Les nœuds graphiques qui héritent de la classe Control disposent de la propriété contextMenu qui permet de placer un menu contextuel sur eux. Si cette propriété n'a pas une valeur égale à null, le menu contextuel sera invoqué lorsque l'utilisateur effectue une action qui affiche d'ordinaire un menu contextuel (par exemple : clic droit avec la souris).

Par exemple :

Code Java : Sélectionner tout
myControl.setContextMenu(contextMenu);

Pour des types de nœuds qui ne sont pas des contrôles et ne disposent pas de cette propriété, il est possible de leur rajouter le support de la gestion des menus contextuels en leur attachant un gestionnaire d’événements de type EventHandler<ContextMenuEvent> :

Code Java : Sélectionner tout
1
2
3
4
5
6
rectangle.addEventHandler(ContextMenuEvent.CONTEXT_MENU_REQUESTED, new EventHandler<ContextMenuEvent>() { 
    public void handle(ContextMenuEvent contextMenuEvent) { 
        contextMenu.show(rectangle, contextMenuEvent.getScreenX(), contextMenuEvent.getScreenY()); 
        contextMenuEvent.consume(); 
    } 
});

Ou :

Code Java : Sélectionner tout
1
2
3
4
rectangle.addEventHandler(ContextMenuEvent.CONTEXT_MENU_REQUESTED, contextMenuEvent -> { 
    contextMenu.show(rectangle, contextMenuEvent.getScreenX(), contextMenuEvent.getScreenY()); 
    contextMenuEvent.consume(); 
});

Désormais, si nous cliquons avec le bouton de droite sur le rectangle, un menu contextuel sera affiché à cette position.

Mis à jour le 7 octobre 2014 bouye

Pour réagir à l'activation d'une entrée dans un menu, il suffit de placer un callback de type EventHandler<ActionEvent> dans sa propriété onAction.

Par exemple :

Code Java : Sélectionner tout
1
2
3
4
5
6
7
item.setOnAction(new EventHandler<ActionEvent>() { 
  
    @Override 
    public void handle(ActionEvent actionEvent) { 
        System.out.println("Salut le monde !"); 
    } 
});

ou :

Code Java : Sélectionner tout
item.setOnAction(actionEvent ->  System.out.println("Salut le monde !"));

Mis à jour le 7 octobre 2014 bouye

Pour mettre une icône sur une entrée, il suffit de modifier la valeur de sa propriété graphic et de lui donner comme nouvelle valeur une ImageView contenant une Image.

Code Java : Sélectionner tout
1
2
3
final Image image = new Image(getClass().getRessource("Ok.png").toExternalForm()); 
final ImageView icon = new ImageView(image); 
item.setGraphic(icon);

Note : cette propriété accepte n'importe quel type de nœud graphique. Il est donc possible de donner un affichage ou un fonctionnement riche à une entrée en mettant un nœud ou un contrôle complexe, interactif ou pas, dans cette propriété.

Mis à jour le 8 octobre 2014 bouye

Pour créer une entrée customisée dans un menu, il faut créer une instance de la classe javafx.scene.control.CustomMenuItem et lui fournir un contrôle destiné à être affiché dans cette entrée en modifiant la valeur de sa propriété content.

Par défaut, les entrées de menu sont configurées pour cacher le menu dès qu'on les active à la souris. La classe CustomMenuItem dispose de la propriété hideOnClick qui permet de désactiver ce comportement.

Par exemple :

Code Java : Sélectionner tout
1
2
final CustomMenuItem customMenuItem = new CustomMenuItem(new Slider()); 
customMenuItem.setHideOnClick(false);

Ici, nous avons créé une nouvelle entrée customisée contenant une réglette et nous avons configuré l’entrée pour ne pas cacher le menu quand nous interagissons avec cette réglette avec la souris.

Mis à jour le 7 octobre 2014 bouye

Proposer une nouvelle réponse sur la FAQ

Ce n'est pas l'endroit pour poser des questions, allez plutôt sur le forum de la rubrique pour ça


Réponse à la question

Liens sous la question
précédent sommaire suivant
 

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2017 Developpez Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.

 
Responsables bénévoles de la rubrique Java : Mickael Baron - Robin56 -