JPopupMenu auf JTabbedPane

zer0

Erfahrenes Mitglied
Hallo,

ich möchte ein JPopupMenu auf einem JTabbedPane haben. Eigentlicht recht einfach nur möchte ich das sich das PopupMenu NUR auf den Tabs öffnet. Das heißt es soll nicht angezeigt werden wenn man in den Content des JTabbedPane's klickt und auch nicht wenn man auf die Leiste klickt, wo die Tab's angezeigt werden.

Das Popupmenu soll zum schließen der Tab's sein dadurch wirds vllt klarer was ich haben will.

Ich habe auch schon eine Lösung gefunden die eigentlicht genau das richtige ist. Sie müsste nur ein wenig verändert werden.

Java:
    popupMenu = new JPopupMenu();

    menuItem1 = new JMenuItem("schließen");
    tabbedPane = new JTabbedPane();
    tabbedPane.setComponentPopupMenu(popupMenu);
 
    label1 = new JLabel("Label1");
    label2 = new JLabel("Label2");
    
    popupMenu.add(jMenuItem1);
    
    tabbedPane.addTab("Tab 1", label1);
    tabbedPane.addTab("Tab 2", label2);

    popupMenu.addPopupMenuListener(new PopupMenuListener() {
      public void popupMenuCanceled(final PopupMenuEvent evt) {}
      public void popupMenuWillBecomeInvisible(final PopupMenuEvent evt) {}
      public void popupMenuWillBecomeVisible(final PopupMenuEvent evt) {
        JPopupMenu source = (JPopupMenu) evt.getSource();
        int i = tabbedPane.getSelectedIndex();
        JLabel tab = (JLabel) tabbedPane.getTabComponentAt(i);
        JLabel component = (JLabel) tabbedPane.getComponentAt(i);
        if(tab.getMousePosition() != null) {
          menuItem1.setText(tab.getText() + ":  " + component.getText());
        }else{
            // Hier wurde nicht auf einen Tab geklickt, das anzeigen des Popupmenu's soll also verhindert werden!
        }
      }
    });

Ich hab die Stelle im Quellcode kommentiert, ich muss irgendwie verhinden das dass Popupmenu angezeigt wird. Da muss es doch irgendwie eine Lösung geben.

Gruß :)
 
Howdie.

Soweit ich weiß, kann man die Tab-Komponente selbst setzen (via tabbedPane.setTabComponenent(...) oder so ähnlich). Mach dir doch ein eigenes JLabel für die Überschrift bzw. den Tab und füge diesem den PopupListener hinzu. Ist allerdings nur aus dem Kopf grad, ich weiß nicht sicher, ob das so möglich ist.

Gruß,
Alex
 
Hallo,

ich hab das mal mit einem MouseListener gelöst, ging ohne Probleme.
Bei deinem Code könntest du das PopupMenu doch einfach nicht sichtbar setzen?

Gruß,
Martin
 
Zurück