Question

Je veux créer une barre d'outils dans mon application. Si vous cliquez sur un bouton sur cette barre d'outils, il affichera un menu, comme dans la barre d'outils Eclipse. Je ne sais pas comment faire cela dans Swing. Quelqu'un peut-il me aider s'il vous plaît? J'ai essayé Google, mais rien trouvé.

Était-ce utile?

La solution

Ceci est ainsi plus difficile Swing qu'il doit être. Ainsi, au lieu de vous diriger vers des tutoriels que j'ai créé un exemple entièrement.

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);
    }
}

Autres conseils

Je ne vois pas pourquoi cela est plus difficile qu'il doit être ou pourquoi vous devez utiliser un MouseListener. La solution par Steve McLeod travaille, mais où le menu apparaît dépend de l'endroit où la souris a été cliqué. Pourquoi ne pas simplement utiliser un ActionListener comme normalement utilisé pour un JButton. Il ne semble ni plus difficile ni moins dur.

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 sur le même un menu dans un JMenuBar pour moi, et la position est cohérente. Vous pouvez placer différemment en modifiant le x et y dans menu.show ().

Je pense qu'il est le même que dans AWT.

Vous devriez mettre ActionCommand sur ce bouton et quand il est exécuté afficher le menu contextuel en fonction des coordonnées de la souris.

Voir la section Mise en place un menu contextuel , dans Comment utiliser menus.

Je ne suis pas sûr que je vous comprends bien, mais si vous voulez savoir comment faire des barres d'outils en échec Swing cette

Java Tutoriels: Comment utiliser des barres d'outils et cette

Java Tutoriels: Comment utiliser les actions

Voici une classe simple et agréable

entrer image description ici

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) {}
        });
    }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top