Programmation Java Swing/Menus
Aller à la navigation
Aller à la recherche
[modifier | modifier le wikicode]
Swing supporte deux types de menu :
- les menus de type
javax.swing.JMenu
attaché à une fenêtre via sa barre de menujavax.swing.JMenuBar
généralement située en haut de la fenêtre. - les menus de type
javax.swing.JPopupMenu
attaché à tout composant, dont l'affichage est, par exemple, déclenché par un clic droit de la souris.
[modifier | modifier le wikicode]
Ces deux types de menu (javax.swing.JMenu
et javax.swing.JPopupMenu
) s'utilisent de la même façon.
Un menu est initialement vide, et l'ajout d'un item se fait en appelant l'une des méthodes suivantes :
add(JMenuItem item)
- Ajouter un item de menu.
add(Action action)
- Ajouter un item de menu créé à partir d'une action.
La seconde méthode est préférable car une même action peut être attachée à différents composants (menu, bouton, ...) ce qui simplifie la gestion de son état (état activé ou désactivé, texte, icône, raccourci clavier, ...) dont la modification de répercute sur tous les composants liés.
Il est possible d'ajouter d'autres éléments à un menu :
- La méthode
addSeparator()
permet d'ajouter un séparateur entre deux items de menu. - La méthode
add(JMenuItem item)
accepte aussi un autre menu afin d'ajouter un sous-menu, car la classejavax.swing.JMenu
dérive dejavax.swing.JMenuItem
.
Exemple :
package org.wikibooks.fr.swing;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
/**
* Créer une fenêtre avec un menu.
* @author fr.wikibooks.org
*/
public class ExempleMenuDeFenetre extends JFrame
{
private void menuOuvrir()
{
// Mettre ici le code pour ouvrir un fichier
}
private void menuEnregistrer()
{
// Mettre ici le code pour sauvegarder un fichier
}
public ExempleMenuDeFenetre()
{
// Création de la fenêtre
setTitle("Démonstration de création de menu pour une fenêtre Swing");
Dimension d = new Dimension(500, 200);
setMinimumSize(d);
setSize(d);
// Création des actions
Action a_ouvrir = new AbstractAction("Ouvrir un fichier...")
{
@Override
public void actionPerformed(ActionEvent e)
{
menuOuvrir();
}
};
a_ouvrir.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_O, InputEvent.CTRL_DOWN_MASK)); // Ctrl-O
Action a_enregistrer = new AbstractAction("Enregistrer le fichier...")
{
@Override
public void actionPerformed(ActionEvent e)
{
menuEnregistrer();
}
};
a_enregistrer.setAccelerator(KeyStroke.getKeyStroke(
KeyEvent.VK_S, InputEvent.CTRL_DOWN_MASK)); // Ctrl-S
// Création du menu
JMenuBar mb = new JMenuBar();
JMenu m = new JMenu("Fichier"); // Fichier :
mb.add(m);
m.add(new JMenuItem(a_ouvrir)); // - Ouvrir
m.addSeparator(); // ----------------
m.add(new JMenuItem(a_enregistrer)); // - Enregistrer
setJMenuBar(mb); // Attacher la barre de menu à la fenêtre
}
public static void main(String[] args)
{
EventQueue.invokeLater(new Runnable()
{
public void run()
{
ExempleMenuDeFenetre frame = new ExempleMenuDeFenetre();
frame.setVisible(true);
}
});
}
}