Simple is the best!
BlogJava
::
首页
::
新随笔
::
联系
::
聚合
::
管理
posts - 12, comments - 2, trackbacks - 0
<
2008年11月
>
日
一
二
三
四
五
六
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(1)
给我留言
查看公开留言
查看私人留言
随笔分类
Eclipse GEF(1)
Eclipse SWT(1)
Java(6)
操作系统(2)
随笔档案
2011年4月 (1)
2011年3月 (3)
2010年1月 (1)
2008年12月 (4)
2008年11月 (3)
文章档案
2008年11月 (1)
eclipse
很久很久以前
gef
搜索
最新评论
1. re: java.lang.NoClassDefFoundError出现的可能几种情况
@猪儿笨笨
补充的很好,Thank you!有时候就为了处理类似问题,花了不少力气,走了不少冤枉路。
--远帆
2. re: java.lang.NoClassDefFoundError出现的可能几种情况[未登录]
评论内容较长,点击标题查看
--猪儿笨笨
阅读排行榜
1. Lunce分词原理(2876)
2. Eclipse GEF技巧总汇(1521)
3. java.lang.NoClassDefFoundError出现的可能几种情况(1416)
4. windows下手动安装mysql并迁移数据实现方案(759)
5. windows下进程和线程的关系、通信方式(451)
评论排行榜
1. java.lang.NoClassDefFoundError出现的可能几种情况(2)
2. Eclipse GEF技巧总汇(0)
3. Lunce分词原理(0)
4. Win32环境下动态链接库(DLL)编程原理 (0)
5. windows下进程通信方式(0)
Eclipse GEF技巧总汇
1、大纲视图右键菜单项受editpart的createEditPolicies()方法影响。例如:虽然右键菜单提供了删除选项,但只要相关的treeeditpart没有install ComponentEditPolicy,那么当鼠标打开该节点的右键菜单时,是不会看到“删除”项的。
2、和1类似,有时候某些作为容器元素的对象不希望被用户选中,也是通过修改policy来实现的。具体如下:
editpart实现
public
class
BoardPart
extends
ContainerPart
{
protected
void
createEditPolicies()
{
super
.createEditPolicies();
installEditPolicy(EditPolicy.LAYOUT_ROLE,
new
BoardLayoutEditPolicy());
}
}
policy实现
public
class
BoardLayoutEditPolicy
extends
XYLayoutEditPolicy
{
protected
Command createChangeConstraintCommand(EditPart child,
Object constraint)
{
return
null
;
}
}
从上面的代码可以看出,只要createChangeConstraintCommand()返回null,那么容器元素就不会被选中。
3、如果一个或多个图元的属性校验出错,希望自动选中,那么考虑对界面元素进行校验,然后使用下面的方法:
/** */
/**
* 选中未做关联的显示框
*
@param
errorEls 错误显示框ArrayList
*/
private
void
selectErrors(ArrayList
<
ElementView
>
errorEls)
{
EditPartViewer viewer
=
getGraphicalViewer();
viewer.deselectAll();
//
去掉所有选择项
EditPart last
=
null
;
for
(ElementView element:errorEls)
{
EditPart editpart
=
(EditPart) viewer.getEditPartRegistry().get(element);
viewer.appendSelection(editpart);
//
添加选择元素
last
=
editpart;
}
viewer.reveal(last);
//
将最后选中元素放到窗口可视区域
}
4、退出编辑器时提示保存
根据国际惯例,编辑器退出却未保存时,一般都会弹出对话框提示用户选择是否关闭编辑器。这时我首先想到的是覆盖父类的dispose()方法,判断未保存就返回而不退出。可实践证明,eclipse RCP并不支持这样做。经过一番探索得知,需要实现ISaveablePart2接口,在promptToSaveOnClose()添加处理。代码如下:
@Override
public
int
promptToSaveOnClose()
{
if
(
this
.isDirty
&&
!
UIHelper.comfirm(
"
关闭提示
"
, title
+
"
还未保存,确定退出?
"
))
return
ISaveablePart2.CANCEL;
else
return
ISaveablePart2.NO;
}
5、鼠标拖动自动调用选择工具
处理此问题要从画布元素的editpart类入手。第一步修改createFigure()方法:
protected
IFigure createFigure()
{
fig.setOpaque(
true
);
return
fig;
}
第二步覆盖getDragTracker()方法:
public
DragTracker getDragTracker(Request request)
{
if
(request
instanceof
SelectionRequest
&&
((SelectionRequest) request).getLastButtonPressed()
==
3
)
{
return
new
DeselectAllTracker(
this
);
}
return
new
MarqueeDragTracker();
}
两个方法配合使用,否则无法达到目的。
6、如何通过editpart修改editor保存状态(不通过setDirty()实现)
由于editpart类是拿不到editor引用的,故想通过调用editor.setDirty()是不可能的。在我的项目中,拖动一个图元是可以触发修改标记,但是拖动连线后editor就不能自动设为修改状态。通过一番研究发现,可以在editpart类中增加如下方法来实现:
public
void
commit()
{
getViewer().getEditDomain().getCommandStack().execute(
new
Command()
{}
);
}
posted on 2008-11-11 10:44
远帆
阅读(1521)
评论(0)
编辑
收藏
所属分类:
Eclipse GEF
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理