Je veux créer une barre d'outils dans mon application. Si vous cliquez sur un bouton de cette barre d'outils, un menu apparaîtra, tout comme dans la barre d'outils d'Eclipse. Je ne sais pas comment faire ça dans Swing. Quelqu'un peut m'aider s'il vous plaît? J'ai essayé Google mais rien trouvé.
Ceci est bien plus difficile dans Swing qu'il ne le faut. Ainsi, au lieu de vous diriger vers des tutoriels, j'ai créé un exemple pleinement fonctionnel.
import javax.swing.*;
import Java.awt.*;
import Java.awt.event.ActionEvent;
import Java.awt.event.MouseAdapter;
import Java.awt.event.MouseEvent;
public class ToolbarDemo {
public static void main(String[] args) {
final JFrame frame = new JFrame();
frame.setPreferredSize(new Dimension(600, 400));
final JToolBar toolBar = new JToolBar();
//Create the popup menu.
final JPopupMenu popup = new JPopupMenu();
popup.add(new JMenuItem(new AbstractAction("Option 1") {
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(frame, "Option 1 selected");
}
}));
popup.add(new JMenuItem(new AbstractAction("Option 2") {
public void actionPerformed(ActionEvent e) {
JOptionPane.showMessageDialog(frame, "Option 2 selected");
}
}));
final JButton button = new JButton("Options");
button.addMouseListener(new MouseAdapter() {
public void mousePressed(MouseEvent e) {
popup.show(e.getComponent(), e.getX(), e.getY());
}
});
toolBar.add(button);
frame.getContentPane().add(toolBar, BorderLayout.NORTH);
frame.pack();
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setVisible(true);
}
}
Je ne vois pas pourquoi c'est plus difficile que cela ne devrait l'être ou pourquoi vous devriez utiliser MouseListener. La solution de Steve McLeod fonctionne, mais l'emplacement dans lequel le menu apparaît dépend de l'endroit où la souris a été cliquée. Pourquoi ne pas utiliser simplement un ActionListener normalement utilisé pour un JButton. Cela ne semble ni plus difficile ni moins difficile.
final JPopupMenu menu = new JPopupMenu();
menu.add(...whatever...);
final JButton button = new JButton();
button.setText("My Menu");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent ev) {
menu.show(button, button.getBounds().x, button.getBounds().y
+ button.getBounds().height);
}
});
Cela positionne le menu à peu près de la même façon qu'un menu dans une barre de menus J pour moi, et la position est cohérente. Vous pouvez le placer différemment en modifiant x et y dans menu.show ().
Je pense que c'est la même chose que dans AWT.
Vous devez placer une ActionCommand sur ce bouton et, lorsqu'il est exécuté, afficher le menu contextuel en fonction des coordonnées de la souris.
Voir la section Créer un menu contextuel, dans Comment utiliser les menus .
Je ne suis pas sûr de bien vous comprendre, mais si vous voulez savoir comment créer des barres d’outils dans Swing, cochez cette case.
Tutoriels Java: Comment utiliser les barres d’outils et cela
Voici un cours simple et sympa
import javax.swing.JPopupMenu;
import javax.swing.JToggleButton;
import javax.swing.event.PopupMenuEvent;
import javax.swing.event.PopupMenuListener;
import Java.awt.event.ActionListener;
import Java.awt.event.ActionEvent;
public class MenuButton extends JToggleButton {
JPopupMenu popup;
public MenuButton(String name, JPopupMenu menu) {
super(name);
this.popup = menu;
addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ev) {
JToggleButton b = MenuButton.this;
if (b.isSelected()) {
popup.show(b, 0, b.getBounds().height);
} else {
popup.setVisible(false);
}
}
});
popup.addPopupMenuListener(new PopupMenuListener() {
@Override
public void popupMenuWillBecomeVisible(PopupMenuEvent e) {}
@Override
public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
MenuButton.this.setSelected(false);
}
@Override
public void popupMenuCanceled(PopupMenuEvent e) {}
});
}
}