GMF中,编辑图元属性的方法

来源:互联网 发布:华云网络加速器 编辑:程序博客网 时间:2024/06/06 06:40

         GMF中,经常需要修改图元属性。如果我们直接通过XXXImpl.setXXX();这种方法设置的话,运行后会报错,这是因为在GMF中,必须要在写事务中才能修改资源属性(这里的资源指真正存到图文件里的对象)。

         首先要获得某个图元的EditPart,然后将其转换为此图元的语义模型,之后便可以进行图元属性的修改了:

         XXXImpl  xxxImpl = XXXEditPart.resolveSemanticElement();

         TransactionalEditingDomain domain = TransactionUtil.getEditingDomain(xxxImpl);
 domain.getCommandStack().execute(new RecordingCommand(domain) {
          protected void doExecute() {
          xxxImpl.setName(); // 设置图元属性
          }
           });

        如何获得某个图元的EditPart呢?在上一篇文章中,我已提供一种获得当前editor的EditPart,我们可以在此延伸:

        XXXDiagramEditor  xxxDiagramEditor= (XXXEditor) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor();

        XXXEditPart  xxxEditPart = (XXXEditPart)xxxDiagramEditor.getDiagramEditPart();//获得当前editor的EditPart


        //获得选中的图元的EditPart

        List<?> selectedList = xxxEditPart.getViewer().getSelectedEditParts(); //如果在菜单类(DiagramEditorContextMenuProvider.java)中,可以直接调用getViewer()方法

if (selectedList.size() == 1) {

if (selectedList.get(0) instanceof XXXEditPart) {

XXXEditPart xxxEditPart = (XXXEditPart) selectedList.get(0); //获得选中的图元的EditPart

                       ....

                 }

        }

       当然,如果你希望找到图元中某个名称为“xxx”的图元模型对象,可以由editor的EditPart获得editor的模型对象,进而通过得到它的子图元集合找到你想要的图元模型对象。

原创粉丝点击