`
zhaozhongwei
  • 浏览: 54554 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

将gmf图片放在文本之后

    博客分类:
  • gmf
 
阅读更多

前两天一直在看gmf,这两天又看birt,关于gmf的很多东东都忘记了,所以今天又看看想把一些东西写出来,否则以后又得从头开始看了。因为要做一个图形编辑器,里面要有很多图片,而且图片要放在文本后面,比如一个html编辑器就需要有个文本框,而在文本框前面应该有文本信息,比如“姓名”。而在gmf中通过emf自动生成的都是先显示图片后显示文本,下了很多功夫也没研究出什么好方法,但还是对付实现了。默认情况下与editpart对应的figure是WrappingLabel,看一下它的paintFigure方法:
    public void paintFigure(Graphics graphics) {
        super.paintFigure(graphics);

        if (hasIcons()) {
            paintIcons(graphics);
        }
    }

这里paintIcons方法就是绘制前面小图标的方法,所以这里需要一个类继承WrappingLabel类,重写paintFigure方法,主要就是不让它调用paintIcons方法,因为paintIcons方法是私有的,所以不能重写它,只能重写paintFigure方法,把这个类取名MyWrappingLabel,实现如下:


public class MyWrappingLabel extends WrappingLabel{

    public void paintFigure(Graphics graphics) {
        if (isOpaque())
            graphics.fillRectangle(getBounds());
        if (getBorder() instanceof AbstractBackground)
            ((AbstractBackground) getBorder()).paintBackground(this, graphics, NO_INSETS);
    }
    public MyWrappingLabel() {
        super();
//        ToolbarLayout tbl = new ToolbarLayout();
//        tbl.setVertical(false);
//        this.setLayoutManager(tbl);
    }

}
还需要在editpart里做相应的修改,因为上面只是把文本前面的图标去掉了,我们还要在文本后面加上我们想要的图标,这里我假设与editpart对应的figure类为CodeFigure,则gmf自动生成的代码类似如下:

    public class CodeFigure extends RectangleFigure {

        /**
         * @generated
         */
        private WrappingLabel fFigureCodeLabelFigure;

        /**
         * @generated
         */
        public CodeFigure() {

            FlowLayout layoutThis = new FlowLayout();
            layoutThis.setStretchMinorAxis(false);
            layoutThis.setMinorAlignment(FlowLayout.ALIGN_LEFTTOP);

            layoutThis.setMajorAlignment(FlowLayout.ALIGN_LEFTTOP);
            layoutThis.setMajorSpacing(5);
            layoutThis.setMinorSpacing(5);
            layoutThis.setHorizontal(true);

            this.setLayoutManager(layoutThis);

            createContents();
        }

        /**
         * @generated
         */
        private void createContents() {

            fFigureCodeLabelFigure = new WrappingLabel();
            fFigureCodeLabelFigure.setText("<...>");

            this.add(fFigureCodeLabelFigure);

        }

........等这里没有全贴出来,因为只需要在构造函数和createContents方法里做些手脚就可以搞定了

    public class CodeFigure extends RectangleFigure {

        /**
         * @generated
         */
        private WrappingLabel fFigureCodeLabelFigure;

        /**
         * @generated not
         */
        public CodeFigure() {
            GridLayout layout = new GridLayout(2, false);
            setLayoutManager(layout);
            createContents();
        }

        /**
         * @generated not
         */
        private void createContents() {

            fFigureCodeLabelFigure = new MyWrappingLabel();
            fFigureCodeLabelFigure.setText("aaaaaaaa");

            add(fFigureCodeLabelFigure, new GridData(SWT.BEGINNING,
                    SWT.BEGINNING, false, false, 1, 1));
            add(new ImageFigure(getImage()), new GridData(SWT.BEGINNING,
                    SWT.BEGINNING, false, false, 1, 1));
        }

        private Image getImage() {
            return getImageImage("icons/full/obj16/Code.gif "); //$NON-NLS-1$
        }

        protected Image getImageImage(String path) {
            Image image = JFaceResources.getImageRegistry().get(path);
            if (image == null) {
                ImageDescriptor descriptor = AbstractUIPlugin
                        .imageDescriptorFromPlugin("myemf.edit ", path); //$NON-NLS-1$
                if (descriptor == null) {
                    descriptor = ImageDescriptor.getMissingImageDescriptor();
                }
                JFaceResources.getImageRegistry().put(path,
                        image = descriptor.createImage());
            }
            return image;
        }

红色的地方是需要注意的地方,比如generated not, 比如原来是generated,如果不改动,则在下次从emf生成gmf的时候则会把修改的东西覆盖掉,而myemf.edit 是你存放图片的插件的名称(确切的说是插件id),而icons/full/obj16/Code.gif 是图片在相应插件下的相对路径。

好了小功告成!

1
0
分享到:
评论

相关推荐

    gmf 1.7 最新版的gmf

    3. **生成代码**:GMF将根据设计生成编辑器的Java代码和资源文件。 4. **编译与运行**:编译生成的代码,然后在Eclipse IDE内运行图形编辑器,进行测试和调试。 总的来说,Eclipse GMF 1.7是开发图形化应用程序的...

    GMF数据表建模例子

    9. **源码分析**:深入研究这个例子的源码,不仅可以学习GMF的使用方法,还可以了解如何将EMF和GEF结合,以及如何处理图形交互事件,这对于开发自己的图形化工具非常有帮助。 10. **社区支持**:由于GMF是开源项目...

    GMF Tutorial中文版

    通过本教程,读者将逐步了解如何使用GMF来设计和实现图形化建模工具,包括如何创建模型,设计图形界面,以及集成编辑功能。同时,教程还探讨了GMF如何简化开发过程,减少开发者对底层框架的直接交互,提高开发效率。...

    GMF教程.doc

    - 修改`mindmap.genmodel`,将`Base Package`设为`org.eclipse.gmf.examples`。 4. **生成图形定义** - 创建`Simple GraphicalDefinitionModel`,选择`Map`作为图形类型,配置Topic类的基本元素和连接集合。 5. ...

    GMF EMF

    GMF(Generic Modeling ...通过深入研究GMF ѧϰ和GMF 学习这两个文件,你将能够掌握GMF的基本概念,理解其工作原理,并具备使用GMF创建自己的图形编辑器的能力。在实践中不断探索和学习,你将逐渐成为GMF的专家。

    15 分钟学会 Eclipse GMF

    本教程将带你快速掌握Eclipse GMF的核心概念和使用方法,让你在15分钟内对GMF有初步的认识。 一、Eclipse GMF简介 Eclipse GMF是一个强大的框架,它允许开发者创建具有用户友好的图形界面的模型编辑器。GMF通过自动...

    GMF实例解析.pdf

    在学习过程中,我们将了解从安装GMF到理解其设计思想,再到实现具体功能的全过程。 1. GMF 2.0与Taipan的安装 安装GMF及其所需组件需要考虑到依赖关系和兼容性问题。有两种主要的安装方法: - 升级法:通过...

    org.eclipse.gmf.rar

    本文将深入探讨GMF中的RAR(Runtime Architecture Resource)组件,以及其在模型驱动开发中的关键作用。 首先,我们需要理解RAR的含义。"org.eclipse.gmf.rar"是Eclipse GMF运行时架构资源的标识符,它是GMF的核心...

    Eclipse插件 GMF

    在这个框架下,开发者首先定义一个领域特定的语言(Domain Specific Language, DSL),然后利用这些DSL来创建模型,最后通过GMF将这些模型映射到图形界面。这一过程大大提高了代码的可读性和可维护性,同时也降低了...

    GMF实例解析(PDF版)

    本文将以Taipan实例为引导,从安装过程、设计意图到实现方法,全面解析GMF的能力和运作机制。 #### GMF与Taipan的安装:步入实战的第一步 ##### 升级法安装GMF:便捷与挑战并存 GMF作为Eclipse建模项目的一部分,...

    GMF相关资料

    此外,GMF也支持脚本编写,可以利用Python或Bash等脚本语言将多个GMF命令组合成一个流程,实现自动化制图。这对于处理大量数据或重复性工作尤其有用。 压缩包中的资料可能包含了教程、示例脚本、数据文件等,建议...

    图形建模框架GMF综述

    GEF则作为控制器层,处理用户交互并将这些操作映射到模型的变化上。这种分离的设计使得GMF具备良好的可维护性和可扩展性。 #### GMF的核心组件 GMF主要由以下几个核心组件构成: - **建模元素定制工具**:提供了...

    GMF 开发文档

    - **GMF Dashboard:** 创建新项目后,会显示GMF Dashboard(图1),它将指导用户完成整个开发过程,并成为主要的交互界面。 ##### 2.2 域模型创建与选择 - **域模型:** 首先需要创建或选择一个先前准备好的域模型...

    GMF Tourial中文版(一)

    - 本文档将通过开发一个名为**mindmap**的应用程序来展示GMF的功能。 - **mindmap**是一款基于GMF开发的思维导图应用,通过此案例可以深入了解GMF如何帮助开发者快速构建出直观易用的图形化编辑器。 #### 四、GMF...

    eclipse gef ve gmf

    在Eclipse中,GEF(Graphical Editing Framework)、VE(Visual Editor)和GMF(Graphical Modeling Framework)是三个重要的插件或框架,主要用于图形化界面设计和建模。 1. GEF(Graphical Editing Framework) ...

    GMF开发FSM的完整的例子

    本文档将通过一个详细的案例来介绍如何使用GMF来开发一个FSM(Finite State Machine,有限状态机)图形编辑器,从而教会读者如何为自己定制化的建模工具开发图形界面。 #### 了解 GMF 的机制与流程 在深入学习如何...

    一个简单的GMF实例

    【标题】:“一个简单的GMF实例” 在IT领域,GMF(Graphical Modeling Framework)是Eclipse项目的一部分,主要用于创建...通过阅读博文和研究提供的源码,可以深入理解GMF的工作原理,并能够将其应用到自己的项目中。

    gmf-runtime-2.1.2.zip

    安装这个插件后,Eclipse IDE将能够支持GMF相关的图形化开发工作。开发者可以通过导入模型文件,然后利用GMF生成对应的图形编辑器,实现模型的可视化编辑。 总结一下,"gmf-runtime-2.1.2.zip"是Eclipse图形化开发...

Global site tag (gtag.js) - Google Analytics