`

Draw2d中 Figure实现直接编辑框的功能

 
阅读更多
在GEF中,有直接编辑策略,实现直接编辑的功能不是什么难事。但,

如何在Draw2d中实现直接编辑框的功能呢?

思路:用一个带有Text的Shell,实现直接编辑框的功能。

关键点:Shell的大小设置(关系到该框的外观);Shell的位置设置(关系到是否达到直接编辑框的效果);

例子代码:

private Shell textshell;//可以定义一个全局变量,保证该编辑框的唯一性
 private void createTextShell(String oldTextValue){
  Point point = getRealLocation();//关键点1:shell的位置设置----该方法本文后面有说明
  if (textshell == null || textshell.isDisposed()) {
   textshell = new Shell(Display.getCurrent().getActiveShell(), SWT.NONE);
  }
  textshell.setLocation(point.x, point.y);
  textshell.setSize(110, 20);    //关键点2:shell的大小和text的大小设置,根据需要设置合适的大小
  final Text text = new Text(textshell, SWT.BORDER);//在Shell中定义text
  text.setSize(110, 18);
  text.setText(oldTextValue);
  text.setFont(FontFactory.getFont("Arial", 9, SWT.BOLD));//设置text中的字体,FontFactory是自己定义的类,用户可以定义,这里不讨论
  text.setSelection(0, text.getText().length());//设置text的选中字符,比如这里就是全选
  text.addFocusListener(new FocusListener(){

   @Override
   public void focusGained(FocusEvent e) {
   }

   @Override
   public void focusLost(FocusEvent e) {
    //可以在这里,就是失去焦点的时候把合法的值提交
    }
      
     });
  text.addModifyListener(new ModifyListener() {
   @Override
   public void modifyText(ModifyEvent e) {
     //可以在这里对Text框中输入字符的合法性进行判断  

   }
  });
  textshell.open();//别忘了打开shell
 }

private Point getRealLocation(){//得到编辑框的位置,使得该框正好覆盖在在Draw2d的Figure上,实现直接编辑的功能
  Shell parentShell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
  int pgx = parentShell.getLocation().x;
  int pgy = parentShell.getLocation().y;// 1.shell相对于window窗口的坐标。

//利用该pgx,pgy,当移动RCP的窗口时,使得编辑框始终覆盖在对于的Figure上

 

Point point = getLocation(); //2. getLocation()是Draw2d中Figure类的方法,这里得到的point就是要实现直接编辑功能Figure的位置

 

FigureCanvas fCanvas = ...//这个是Draw2d的最顶层的Canvas容器,在你自己的项目中找到它,目的是获得滚动条的位置

int xSel = fCanvas.getHorizontalBar().getSelection();
int ySel = fCanvas.getVerticalBar().getSelection(); //3. 滚动条坐标

//xxx,yyy,就是根据自己RCP实际窗口的位置及Figure在整个窗口视图中的位置继续调整的数据,可以自己设置,

//直到实现该text刚好覆盖在Figure上面,实现直接编辑的功能
 int realx = pgx +point.x - xSel + xxx;
 int realy = pgy+point.y- ySel + yyy ;
 point = new Point(realx, realy);

  return point;
 }
分享到:
评论

相关推荐

    Draw2D 使用例子

    在IT领域,特别是图形用户界面(GUI)的开发中,Draw2D和GEF(Graphics Editing Framework)是两个重要的开源库,主要用于构建可定制的、交互式的2D图形编辑工具。下面将详细介绍这两个库以及如何在实际项目中使用...

    Draw2d Programmer Guide

    Draw2D是Eclipse平台下的一种轻量级图形用户界面工具包,它提供了一系列用于构建复杂图表、文档或绘图的功能组件,这些组件被称为“Figure”。不同于传统的GUI组件,Figure在操作系统级别上没有对应的资源,它们完全...

    swt总结draw2d绘图

    在Eclipse插件开发中,Draw2D是构建定制视图和编辑器的理想工具,可以用于创建具有复杂图形界面的开发工具。 总之,SWT Draw2D提供了一套强大的2D图形绘制框架,它结合了SWT的高性能和丰富的图形功能,为Java...

    Draw2d画线例子

    确保你已经安装了Eclipse IDE,并且导入了相关的插件如GEF(Graphical Editing Framework),因为Draw2d通常与GEF一起使用,为用户提供图形编辑功能。你可以通过Eclipse Marketplace或者更新站点来安装这些插件。 ...

    WEB画图框架 draw2d

    `draw2d` 是一个功能强大的JavaScript库,专门用于在Web环境中创建和编辑图形界面。它以其无需依赖VML或SVG技术,仅采用纯JavaScript实现而备受青睐。在这个详尽的解析中,我们将深入探讨`draw2d`的核心特性、优点、...

    Eclipse GEF+Draw2DAPI

    总之,Eclipse GEF和Draw2D是Eclipse生态中强大的图形编辑工具,结合RCP,可以创建出专业级的图形化应用程序。通过深入研究GEFAPI.CHM和draw2d_api-doc.CHM,开发者能够更好地掌握这两者的核心特性和用法,提升自己...

    Draw2d布局器

    在图形用户界面(GUI)开发中,布局管理器扮演着至关重要的角色,它负责决定组件在画布上的位置和大小。在Eclipse的GEF(Graphical ...在GEF中,理解并灵活运用Draw2d布局器是构建高效图形编辑器的关键步骤之一。

    Draw2D-document.rar_Windows编程_Java_

    《Draw2D在Windows编程中的应用——Java实现详解》 Draw2D,全称为FreeHEP Draw2D,是Java图形库中的一部分,主要用于二维图形的绘制和展示。它提供了丰富的图形元素和交互功能,是开发图形用户界面,尤其是进行...

    GEF 进阶+源码.rar

    10. **样例代码(Sample Code)**:`samplecode.rar`很可能包含了实际的编程示例,这些示例可以帮助开发者理解如何在实践中应用GEF和DRAW2D,例如创建自定义图形元素、实现特定的编辑操作等。 通过深入学习和实践...

    Eclipse插件开发学习笔记(ch20-21)

    在章节20和21中,主要讲解了两个关键知识点:富客户端平台(RCP)技术和Draw2d图形库。 20第20章 富客户端平台(RCP)技术: Eclipse的富客户端平台(Rich Client Platform)提供了一种构建桌面应用程序的框架。这...

    Eclipse GEF Reference(Plugins&Examples;,with source)

    4. **图元工厂(Figure Factory)**:图元工厂是Draw2D的一部分,它提供了创建和管理图形元素的标准方法,简化了图形编辑器的开发过程。 5. **模型(Model)**:在GEF中,模型通常由用户自定义的数据结构组成,可以...

    GEF典型实现例子

    这两篇文章可能分别由CSDN博主和博客园博主分享了他们在使用GEF和相关技术,如Draw2D(用于在GEF中绘制2D图形的库)时的经验和技巧。 在深入理解GEF时,我们需要关注以下几个核心概念: 1. **模型-视图-控制器(MVC...

    一个GEF绘图的简单例子

    4. **图元类**: 实现`org.eclipse.draw2d.Figure`,定义图形元素的外观和行为。 5. **适配器类**: 连接模型和视图,通常实现`org.eclipse.gef.EditPolicy`接口,定义特定编辑策略。 6. **命令类**: 实现具体操作的...

    GEF 3.6.2 API Doc

    `org.eclipse.draw2d.Figure` 是所有图元的基类。 5. **EditPart**: 将模型对象与视图元素关联起来,`org.eclipse.gef.EditPart` 是所有编辑域的基类。 **四、主要功能** 1. **图形化编辑**: GEF提供了一套完整的...

    MidpointRaster:HTMLJS Figure中点栅格

    例如,增加鼠标交互功能,让用户能够直接在栅格上进行像素级别的操作,或者结合其他图形库和动画库,实现更多动态效果。总的来说,MidpointRaster是一个实用的工具,为网页上的像素艺术和复古风格的图形渲染提供了...

Global site tag (gtag.js) - Google Analytics