Java Kontextmenü

Ein einfaches Fenster mit einem Button drin:

Hier ein Code mit der Möglichkeit ein Kontextmenü festzulegen:

import java.awt.FlowLayout;
import java.awt.event.MouseAdapter; // Import für das Layout
import java.awt.event.MouseEvent;
import javax.swing.*;
import javax.swing.JPopupMenu;

public class JPopupMenuExample {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> { // Verwende invokeLater für Swing
            JFrame fenster = new JFrame("Kontextmenü");
            fenster.setSize(300, 300);
            fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); // Wichtig!

            // Verwende JButton statt AWT Button für Swing
            JButton button = new JButton("Kontextmenü testen");

            // Popup-Menü erstellen
            JPopupMenu popupMenu = new JPopupMenu();
            JMenuItem item1 = new JMenuItem("Option 1");
            JMenuItem item2 = new JMenuItem("Option 2");
            popupMenu.add(item1);
            popupMenu.add(item2);

            // ActionListener für die Menüelemente (Beispiel)
            item1.addActionListener(e -> System.out.println("Option 1 gewählt"));
            item2.addActionListener(e -> System.out.println("Option 2 gewählt"));

            // MouseListener hinzufügen
            button.addMouseListener(new MouseAdapter() {
                @Override
                public void mousePressed(MouseEvent evt) {
                    if (SwingUtilities.isRightMouseButton(evt)) {
                        popupMenu.show(evt.getComponent(), evt.getX(), evt.getY());
                    }
                }
            });

            // Layout setzen, damit der Button sichtbar ist
            fenster.setLayout(new FlowLayout());

            fenster.add(button); // Button zum Fenster hinzufügen

            fenster.setVisible(true);
        });
    }
}

Nun gibt es über das Kontextmenü die Möglichkeit den Button zu löschen:

import java.awt.FlowLayout;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.*;
public class JPopupMenuExample {

    public static void main(String[] args) {
        SwingUtilities.invokeLater(() -> {
            JFrame fenster = new JFrame("Kontextmenü");
            fenster.setSize(300, 300);
            fenster.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

            JButton button = new JButton("Kontextmenü testen");

            JPopupMenu popupMenu = new JPopupMenu();
            JMenuItem item1 = new JMenuItem("Option 1");
            JMenuItem item2 = new JMenuItem("Option 2");
            JMenuItem deleteItem = new JMenuItem("Button löschen");
            popupMenu.add(item1);
            popupMenu.add(item2);
            popupMenu.addSeparator();
            popupMenu.add(deleteItem);

            item1.addActionListener(e -> System.out.println("Option 1 gewählt"));
            item2.addActionListener(e -> System.out.println("Option 2 gewählt"));
            deleteItem.addActionListener(e -> {
                fenster.remove(button);
                fenster.revalidate();
                fenster.repaint();
            });

            button.addMouseListener(new MouseAdapter() {
                @Override
                public void mousePressed(MouseEvent evt) {
                    if (SwingUtilities.isRightMouseButton(evt)) {
                        popupMenu.show(evt.getComponent(), evt.getX(), evt.getY());
                    }
                }
            });

            fenster.setLayout(new FlowLayout());
            fenster.add(button);
            fenster.setVisible(true);
        });
    }
}