2016-04-25 18 views
0

Ich habe eine TreeView mit einem ContentProvider und benutzerdefinierten Strukturelementen erstellt. Ich habe auch eine ISelectionChangedListener hinzugefügt, um die TreeView.Java SWT erhalten Grenzen von benutzerdefinierten Element in TreeView

Ich möchte eine MouseListener hinzufügen, erkennen, ob ein Element der Struktur mit der rechten Maustaste angeklickt ist und ein Popup-Menü anzeigen. Wenn der weiße Bereich um den Baum angeklickt wird, möchte ich das Popup-Menü nicht anzeigen. Das Menü wird über Extensions in der plugin.xml hinzugefügt.

Wie kann ich jetzt beurteilen, ob ein tree Element mit der rechten Maustaste geklickt wird, damit ich das Popup-Menü anzeigen kann (vielleicht mit visibleWhen in der plugin.xml)? Ich möchte auch die Auswahl löschen, wenn der Rechtsklick im weißen Bereich der TreeView erkannt wird.

Antwort

0

Ok, ich habe nicht erkannt, dass ich immer noch tree.getItem(...) verwenden kann. So, hier ist meine volle MouseListener:

treeOPCUA.addMouseListener(new MouseListener() 
{ 
    @Override 
    public void mouseUp(MouseEvent e) 
    { 
     if(e.button == 3 && rightMouseClicked == true) 
      rightMouseClicked = false; 
    } 

    @Override 
    public void mouseDown(MouseEvent e) 
    { 
     if(e.button == 3 && rightMouseClicked == false) 
      rightMouseClicked = true; 
     if(treeOPCUA.getItem(new Point(e.x, e.y)) == null) 
      viewer.setSelection(null); 
    } 

    @Override 
    public void mouseDoubleClick(MouseEvent e) 
    { 
     viewer.setExpandedState(e.getSource(), true); 
    } 
}); 

Mit der boolean Variable "rightMouseClicked" ich erkennen, in meinem ISelectionChangedListener, wenn die rechte Maus geklickt wird:

if(event.getSelection() instanceof IStructuredSelection && !rightMouseClicked) 

Ich hoffe, dass diese Antwort jemand hilft.