Domanda

Voglio creare una barra degli strumenti nella mia applicazione. Se si fa clic su un pulsante sulla barra degli strumenti che, si aprirà un menu, proprio come nella barra degli strumenti di Eclipse. Non so come fare questo in Swing. Qualcuno mi può aiutare per favore? Ho provato Google ma non trovò nulla.

È stato utile?

Soluzione

Questo è il modo più difficile in Swing di quanto dovrebbe essere. Così, invece di voi che punta al tutorial ho creato un esempio completamente funzionante.

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

Altri suggerimenti

Non vedo il motivo per cui questo è più difficile di quanto deve essere o perché si dovrebbe usare un MouseListener. La soluzione da Steve McLeod funziona, ma la visualizzazione del menu dipende da dove è stato cliccato il mouse. Perché non basta usare un ActionListener come normalmente utilizzato per un JButton. Sembra né difficile né meno 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);
    }
});

Questo posiziona il menù più o meno come un menu in un JMenuBar per me, e la posizione è coerente. È possibile inserire in modo diverso modificando la xey in menu.show ().

Credo che sia lo stesso che nel AWT.

Si dovrebbe mettere un ActionCommand su quel pulsante e quando è eseguito visualizzare il menu a comparsa in base alle coordinate del mouse.

Si veda la sezione Bringing Up un menu a comparsa , in Come utilizzare i menu .

Non sono sicuro ho capito bene, ma se volete sapere come fare le barre degli strumenti di controllo dell'oscillazione questo

Java Tutorial: Come utilizzare barre degli strumenti e questo

Java Tutorial: come utilizzare le azioni

Ecco una semplice classe e piacevole

entrare descrizione dell'immagine qui

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) {}
        });
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top