天天看點

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

我們最常使用的XYLayout, 控件是可以随意的在四個邊框調整大小, 拖拽控件, 有時我們有需要禁止拖拽或調整大小, 具體實作看下面代碼.

[color=red][b]解決方法1: [/b][/color]

在createChangeConstraintCommand中,根據具體情況傳回UnexecutableCommand.INSTANCE即可.

[color=red][b]具體代碼:[/b][/color]

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

[color=red][b]解決方法2: [/b][/color]

覆寫XYLayoutEditPolicy的createChildEditPolicy()方法即可, 根據具體情況傳回ChildEditPolicy.

[color=red][b]具體代碼:[/b][/color]

/**
	 * @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); // 預設可調整大小,可拖拽
}
           

[b][color=red]注意: [/color][/b]

這個方法是在某個父控件建立控件的時候就設定好了, 再也不會改變的, 就是對某個EditPart的設定隻會有一次, 設定好了即不可再改變.

[color=red][b]具體說明[/b][/color]:

[list]

[*]NonResizableEditPolicy 不允許調整大小

[*]setDragAllowed 是否允許滑鼠拖拽

[*]ResizableEditPolicy 可調整大小

[*]setResizeDirections 設定可調整大小的方向

[/list]

[color=red][b]舉例:[/b][/color]

PositionConstants.SOUTH '南' 也就是 '下' 可以調整

PositionConstants.SOUTH | PositionConstants.EAST 就是 '下', '右', '下右' 允許調整

繼續閱讀