2012-11-08 82 views
3

我有一組相對於複合的x/y座標,如何找到這些座標落在哪個小部件中?在位置獲取SWT小部件

+0

你能澄清?您是否知道父組件的小部件孩子的座標?或者他們在其他地方? – BenG

回答

5

這是相當醜陋,但你可以做這樣的功能:如果你使用的MouseListener座標

public Control getControl(Composite composite, int x, int y) 
{ 
    Control control = null; 
    Control[] children = composite.getChildren() 
    if (children.length == 0) 
    control = composite; 
    else 
    for (Control tmp : children) { 
     // The check below will not work because x, y and the control's bounds could be 
     // relative to different parents... Better to convert all coordinates to display 
     // by using Control.toDisplay() and then compare below 
     if (tmp.getBounds().contains(x, y)) 
     { 
     if (control instanceof Composite) 
      control = getControl(tmp, x, y); 
     else 
      control = tmp; 
     break; 
     } 

    } 

    return control; 
} 

,你可以簡單地使用:

event.getSource(); 
+0

+1好主意。這是一個恥辱沒有內置函數來做到這一點... – Baz

+0

有關toDisplay()的評論是有幫助的 – Russ