Kontextmenü (Popup-Fenster) erstellen

NichtExpert

Bekanntes Mitglied
Hallo,

ich versuche momentan ein Kontextmenü zu erstellen.
Dazu soll das Kontextmenü auf meinem Panel dort erscheinen, wo ich auch mit meiner Maus einen Rechtsklick getan habe.
Wie es auch bei Windows zum Beispiel der Fall ist.

Das PopupMenü bekomme ich angezeigt, jedoch nur auf einem bestimmen Punkt und nicht variabel, je nachdem wo man draufdrückt auf dem Panel.

Mein zweites Problem ist, dass ich zum Popupmenü 2 JMenü's zur Auswahl habe. Unter einem der Menü's habe ich noch 3 JMenüItems erstellt. Diese werden jedoch nicht angezeigt.

Java:
public static void gui() {
        meinFrame.setSize(400, 400); // Größe Frame
        meinPanel.setLayout(null);


        meinPanel.addMouseListener(new MouseAdapter() {                                                 // Auf Panel Mouse-listener
            @Override
            public void mouseClicked(MouseEvent e) {
                if (SwingUtilities.isRightMouseButton(e) && e.getClickCount() == 1) {              // bei rechsklick
                    kontextmenu();                                                                                                // ausführen
                }
            }
        });




        meinFrame.add(meinPanel);
        meinFrame.setVisible(true);
        meinFrame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
    }



    public static void kontextmenu() {                                                                                             // Methode Kontextmenü
        JMenu menu = new JMenu("Menü");
        JMenuItem menuItem1 = new JMenuItem("Einstellungen");
        JMenuItem menuItem2 = new JMenuItem("Bearbeiten");
        JMenuItem menuItem3 = new JMenuItem("Ansicht");
        JMenu menu2 = new JMenu("Neu erstellen");

        menu.add(menuItem1);
        menu.add(menuItem2);
        menu.add(menuItem3);
        //menu.setVisible(true);
        //menu.isShowing();
        JPopupMenu popupMenu = new JPopupMenu();
        popupMenu.add(menu);
        popupMenu.add(menu2);
        popupMenu.setVisible(true);

        public static void main(String[] args) {
        gui();
        }
    }


Hoffe einer von euch kennt den Codefragment, der fehlt.
 
Du setzt ja auch keine Koordinaten, wo es erscheinen soll. Und Du erzeugst es auch als eigenständiges Element.... Der Weg ist also falsch ...

Ein JPopupMenu wird über show angezeigt. Show bekommt 3 Parameter: Das übergeordnete Element (meinFrame bei dir) und die Position (also z.B. vom MouseEvent getX() / getY())

Und schon funktioniert das auch richtig.

Konkret könnte es dann wie folgt aussehen:
Java:
meinPanel.addMouseListener(new MouseAdapter() {                                                 // Auf Panel Mouse-listener
            @Override
            public void mouseClicked(MouseEvent e) {
                if (SwingUtilities.isRightMouseButton(e) && e.getClickCount() == 1) {              // bei rechsklick
                    kontextmenu(meinFrame, e.getX(), e.getY());                                                                                                // ausführen
                }
            }
        });
Java:
public static void kontextmenu(JFrame frame, int x, int y) {                                                                                             // Methode Kontextmenü
        JMenu menu = new JMenu("Menue");
        JMenuItem menuItem1 = new JMenuItem("Einstellungen");
        JMenuItem menuItem2 = new JMenuItem("Bearbeiten");
        JMenuItem menuItem3 = new JMenuItem("Ansicht");
        JMenu menu2 = new JMenu("Neu erstellen");

        menu.add(menuItem1);
        menu.add(menuItem2);
        menu.add(menuItem3);
        JPopupMenu popupMenu = new JPopupMenu();
        popupMenu.add(menu);
        popupMenu.add(menu2);
        popupMenu.show(frame, x, y);
    }
 

Zurück
Oben