L'application de notre exemple correspond à l'applet vu ici ; pour que les raccourcis clavier fonctionnent, il faut quelquefois d'abord passer avec la souris sur l'applet (problème de focus). Le menu possède un sous-menu ; les items du sous-menu sont des boutons-radios. Un mnémonique (raccourci clavier) est associé à certains items de menus, ce qui signifie qu'on peut faire le choix à l'aide des touches correspondantes.
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.Color;
import java.awt.BorderLayout;
import java.awt.event.ActionListener;
import java.awt.event.ItemListener;
import java.awt.event.ActionEvent;
import java.awt.event.ItemEvent;
import java.awt.event.KeyEvent;
import java.awt.event.InputEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.SwingUtilities;
import javax.swing.JMenuBar;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.ButtonGroup;
import javax.swing.KeyStroke;
class Ardoise extends JPanel {
Ardoise() {
setPreferredSize(new Dimension(200, 200));
setBackground(Color.BLUE);
setForeground(Color.YELLOW);
}
public void paintComponent(Graphics g) {
int largeur = getWidth();
int hauteur = getHeight();
super.paintComponent(g);
g.fillOval(largeur/2 - 50, largeur/2 - 50, 100, 100);
}
}
// pour le menu déroulant
class MenuCouleur extends JMenu implements ActionListener, ItemListener {
Ardoise ardoise;
JMenuItem itemRouge = new JMenuItem("rouge");
JMenuItem itemJaune = new JMenuItem("jaune");
JMenuItem itemVert = new JMenuItem("vert", KeyEvent.VK_V);
JRadioButtonMenuItem fondBleu = new JRadioButtonMenuItem("fond bleu", true);
JRadioButtonMenuItem fondNoir = new JRadioButtonMenuItem("fond noir", false);
MenuCouleur(final Ardoise ardoise) {
setText("couleur");
this.ardoise = ardoise;
setMnemonic(KeyEvent.VK_C);
itemRouge.setMnemonic(KeyEvent.VK_R);
itemRouge.addActionListener(this);
add(itemRouge);
itemJaune.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_J, InputEvent.CTRL_DOWN_MASK));
itemJaune.addActionListener(this);
add(itemJaune);
itemVert.addActionListener(this);
add(itemVert);
addSeparator();
JMenu sousMenu = new JMenu("fond");
ButtonGroup groupe = new ButtonGroup();
groupe.add(fondBleu);
fondBleu.addItemListener(this);
sousMenu.add(fondBleu);
groupe.add(fondNoir);
fondNoir.addItemListener(this);
sousMenu.add(fondNoir);
add(sousMenu);
}
public void actionPerformed(ActionEvent evt) {
Object source = evt.getSource();
if (source == itemRouge) ardoise.setForeground(Color.RED);
else if (source == itemJaune) ardoise.setForeground(Color.YELLOW);
else if (source == itemVert) ardoise.setForeground(Color.GREEN);
}
public void itemStateChanged(ItemEvent evt) {
Object source = evt.getSource();
if (source == fondBleu) ardoise.setBackground(Color.BLUE);
else if (source == fondNoir) ardoise.setBackground(Color.BLACK);
}
}
class BarreMenu extends JMenuBar {
BarreMenu(Ardoise ardoise) {
add(new MenuCouleur(ardoise));
}
}
public class AvecMenu extends JFrame {
AvecMenu() {
Ardoise ardoise = new Ardoise();
JMenuBar barreMenu = new BarreMenu(ardoise);
setJMenuBar(barreMenu);
add(ardoise, BorderLayout.CENTER);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocation(100, 100);
pack();
setVisible(true);
}
}
class EssaiAvecMenu extends JFrame {
public static void main(String[] arg) {
new AvecMenu();
}
}
Vous pouvez voir :