# SWT Popup-Menu Problem (Position)



## ich_wills_wissen (2. Mai 2007)

Hallo zusammen,

ich tüftel nun schon seit Stunden hier rum und komme nicht weiter.
Es geht um folgendes:
Ich schreibe derzeit ein Eclipse Plugin. Innerhalb des Plugins gibt es eine Klasse "TopicView" die von ViewPart erbt ("TopicView extends ViewPart").
Innerhalb von Viewpart habe ich ein Composite, welches wiederum ein Label enthält. Ich möchte nun Folgendes:
Wenn ich mit der rechten Maustaste auf das Label klicke soll ein Popup-menu erscheinen (und zwar dort wo der Mauszeiger ist).
Das Problem: Das Popupmenu erscheint, allerdings nicht da wo der Mauszeiger ist!

Mein Code: 
	
	
	
	





```
public void mouseDown(MouseEvent e)
         {
            
            if(e.button == 3)
            {
               Menu menu = new Menu(label);
               menu.setLocation(e.x,e.y);
               MenuItem item = new MenuItem(menu, SWT.PUSH);
                 item.setText("Menu Item");
                 item.addListener(SWT.Selection, new Listener() {
                    public void handleEvent(Event e)    
                    {
                       System.out.println("Item Selected");
                    }});
                
                 menu.setVisible(true);
                 while (!menu.isDisposed() && menu.isVisible()) {
                   if (!Display.getCurrent().readAndDispatch())
                     Display.getCurrent().sleep();
                 }
                 menu.dispose();
            }
            
            
         }
      });
```
Wenn ich nur e.x und e.y ausgeben lasse zeigt er die Koordinaten innerhalb des labels an, also z.B. 4 (x) und 17(y). Das Popupmenu zeichnet sich auch an diesen Koordinaten, allerdings nicht relativ zum Label sondern zum Bildschirm, d.h. Das Popupmenu erscheint ganz links oben auf dem Bildschirm!
Ich weiß so langsam echt nichtmehr weiter.. hat jemand zufällig eine Idee wie ich das lösen kann ? Wäre echt toll..

Verzweifelt-entnervte Grüße,

ich_wills_wissen


----------



## merlin2 (2. Mai 2007)

Vielleicht mit
_e.x+label.x, e.y+label.y_
oder _label.getLocationOnScreen()_ ?


----------



## ich_wills_wissen (3. Mai 2007)

merlin2 hat gesagt.:
			
		

> Vielleicht mit
> _e.x+label.x, e.y+label.y_
> oder _label.getLocationOnScreen()_ ?



Also die Methode label.getLocationOnScreen existiert irgendwie nicht.. sicher das wir beide gerade über das Gleiche reden? ;-) 
Das Label ist ein org.eclipse.swt.widgets.Label...
Auch das CLabel kennt diese Methode nicht.

_e.x+label.x, e.y+label.y_ bringt leider nicht das gewünschte Ergebnis, weil label.x und label.y die Koordinaten relativ zum Parent liefern und nicht zum Display..


----------



## ich_wills_wissen (3. Mai 2007)

Ich hab jetzt zwei Buttons neben das Label gemacht, das sollte es auch tun..


----------



## kleiner_held (3. Mai 2007)

probier das mal:

```
label.toDisplay(e.x, e.y);
```


----------

