Pergunta

Eu quero criar uma barra de ferramentas no meu aplicativo. Se você clicar em um botão na barra de ferramentas que, ele irá aparecer um menu, assim como na barra de ferramentas do Eclipse. Eu não sei como fazer isso no Swing. Alguém pode me ajudar, por favor? Eu tentei Google, mas não encontrou nada.

Foi útil?

Solução

Esta é a maneira mais difícil no Swing do que precisa ser. Então, ao invés de apontar-lhe a tutoriais Eu criei um exemplo totalmente funcional.

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

Outras dicas

Eu não vejo por que isso é mais difícil do que ele precisa ser, ou porque você deve usar um MouseListener. A solução por Steve McLeod funciona, mas onde aparece o menu depende do local onde o mouse foi clicado. Porque não usar um ActionListener como normalmente utilizado para um JButton. Ele não parece nem mais difícil, nem menos difícil.

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

Isto posiciona o menu sobre o mesmo como um menu em um JMenuBar para mim, ea posição é consistente. Você poderia colocá-lo de forma diferente, modificando o x e y no menu.show ().

Eu acho que é o mesmo que em AWT.

Você deve colocar um ActionCommand sobre esse botão e quando ele é executado mostrar o menu pop-up de acordo com as coordenadas do mouse.

Veja a seção Trazendo um menu de contexto , em Como usar Menus .

Eu não tenho certeza que eu entendi corretamente, mas se você quiser saber como fazer barras de ferramentas no balanço verificar este

Java Tutoriais: Como usar a ferramenta Bares e este

Tutoriais Java: Como usar ações

Aqui está uma classe simples e agradável

enter descrição da imagem aqui

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) {}
        });
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top