GEF 禁止控件的拖拽, 调整大小

我们最常使用的XYLayout, 控件是可以随意的在四个边框调整大小, 拖拽控件, 有时我们有需要禁止拖拽或调整大小, 具体实现看下面代码.

解决方法1:
在createChangeConstraintCommand中,根据具体情况返回UnexecutableCommand.INSTANCE即可.

具体代码:
	@Override
	protected Command createChangeConstraintCommand(EditPart child, Object constraint) {
		if (!this.couldChangeConstraint(child)) {
			return UnexecutableCommand.INSTANCE;
		}
}



解决方法2:
覆盖XYLayoutEditPolicy的createChildEditPolicy()方法即可, 根据具体情况返回ChildEditPolicy.

具体代码:
	
	/**
	 * @see org.eclipse.gef.editpolicies.ConstrainedLayoutEditPolicy#createChildEditPolicy(org.eclipse.gef.EditPart)
	 */
@Override
	protected EditPolicy createChildEditPolicy(EditPart child) {
		if (child instanceof PageEditPart) {
			NonResizableEditPolicy childEditPolicy = new NonResizableEditPolicy(); // 不允许调整大小
			childEditPolicy.setDragAllowed(false); // 不允许拖拽
			return childEditPolicy;

		} else if (child instanceof PageHeaderEditPart) {
			ResizableEditPolicy childEditPolicy = new ResizableEditPolicy();
			childEditPolicy.setDragAllowed(false); // 不允许拖拽
			childEditPolicy.setResizeDirections(PositionConstants.SOUTH); // 允许下调整大小
			return childEditPolicy;
		} 

return super.createChildEditPolicy(child); // 默认可调整大小,可拖拽
}


注意:
这个方法是在某个父控件创建控件的时候就设置好了, 再也不会改变的, 就是对某个EditPart的设置只会有一次, 设置好了即不可再改变. 

具体说明:
  • NonResizableEditPolicy 不允许调整大小
  • setDragAllowed 是否允许鼠标拖拽
  • ResizableEditPolicy 可调整大小
  • setResizeDirections 设置可调整大小的方向


举例:
PositionConstants.SOUTH '南' 也就是 '下' 可以调整
PositionConstants.SOUTH | PositionConstants.EAST 就是 '下', '右', '下右' 允许调整

你可能感兴趣的:(eclipse)