@ -842,26 +842,61 @@ public class FormDesigner extends TargetComponent<Form> implements TreeSelection
if ( shouldContinue ) {
continue ;
}
//如果组件为XWCardMainBorderLayout的子组件,直接从XWCardMainBorderLayout中去找
XWCardMainBorderLayout borderLayout = XCreatorUtils . getTopXMainBorderLayout ( creator ) ;
if ( borderLayout ! = null ) {
return xCreatorAt ( x , y , borderLayout , null ) ;
//获取当前组件父组件相对于rootComponent或者paraComponent的距离
int relativeParentX = getRelativeParentX ( creator . getParent ( ) ) ;
int relativeParentY = getRelativeParentY ( creator . getParent ( ) ) ;
//如果不是布局容器,直接进行对比
if ( ! ( creator instanceof XLayoutContainer ) ) {
int newX = x - relativeParentX - creator . getX ( ) ;
int newY = y - relativeParentY - creator . getY ( ) ;
Rectangle rect = ComponentUtils . computeVisibleRect ( creator ) ;
// 判断是否处于交叉区域
if ( isIntersectArea ( newX , newY , rect ) ) {
return creator ;
}
}
//如果是布局容器,从布局容器向下找
if ( creator instanceof XLayoutContainer ) {
return xCreatorAt ( x , y , creator , null ) ;
XCreator result = xCreatorAt ( x - relativeParentX , y - relativeParentY , creator , null ) ;
if ( result ! = null ) {
return result ;
}
}
x - = creator . getX ( ) ;
y - = creator . getY ( ) ;
Rectangle rect = ComponentUtils . computeVisibleRect ( creator ) ;
// 判断是否处于交叉区域
if ( ! isIntersectArea ( x , y , rect ) ) {
continue ;
//最后,如果组件为Tab容器中的子组件,再从Tab容器中去找
XWCardMainBorderLayout borderLayout = XCreatorUtils . getTopXMainBorderLayout ( creator ) ;
if ( borderLayout ! = null ) {
relativeParentX = getRelativeParentX ( borderLayout . getParent ( ) ) ;
relativeParentY = getRelativeParentY ( borderLayout . getParent ( ) ) ;
return xCreatorAt ( x - relativeParentX , y - relativeParentY , borderLayout , null ) ;
}
return creator ;
}
return null ;
}
/ * *
* 获取当前组件相对于rootComponent或者paraComponent的横向距离
* /
private int getRelativeParentX ( Container container ) {
return returnZero ( container ) ? 0 : container . getX ( ) + getRelativeParentX ( container . getParent ( ) ) ;
}
/ * *
* 获取当前组件相对于rootComponent或者paraComponent的纵向距离
* /
private int getRelativeParentY ( Container container ) {
return returnZero ( container ) ? 0 : container . getY ( ) + getRelativeParentY ( container . getParent ( ) ) ;
}
private boolean returnZero ( Container container ) {
return ! ( container instanceof XLayoutContainer )
| | container = = rootComponent
| | ( paraComponent ! = null & & container = = paraComponent ) ;
}
/ * *
* 刷新顶层组件
* * /