程序员浅谈Eclipse RCP 中可使用的可视化编辑器

来源:岁月联盟 编辑:zhuzhu 时间:2009-05-23

    在进行RCP开发的时候,有一个可视化编辑器,当然可以起到事半功倍的效果。对于进销存管理系统这样简单的程序来说,视图加对话框就可以搞定所有的程序功能,然而对于视图和对话框中的控件,如果没有可视化编辑器的帮助,足以让开发者焦头烂额。然而选择可视化编辑器的道路却坎坷曲折,我在这里把我的经历写出来,希望对大家有一点帮助。

    先来说说VE,我想大家一想到可视化编辑器的时候,第一个就会想到VE.我在这里告诉大家,这个编辑器你们根本不用考虑,不用浪费时间在它上面。为什么这么说呢?第一,这个编辑器的官方版本还是2007年1月30日发布的1.2.3_jem版,这个版本只支持Eclipse3.2,不支持3.4.当然还有一个非官方的1.4版可以用,它的安装地址为http://update.soyatec.org/Ganymede/ve/1.4,可以通过Eclispe的Update功能进行安装。然而,这个1.4版的表现比1.2.3版还要差,它居然在编辑ViewPart的时候会出错,编辑Dialog倒是没有什么问题,不过实在是很不好用,改个布局都难。

    所以我觉得大家首选的考虑对象应该还是SWT-Designer,不过要钱,而且很贵,是239美元,如果是239元人民币,我会毫不犹豫地买下来,但是是美元,那就另当别论了。不过如果是专做RCP开发的公司,可以考虑,不过我想大部分做RCP开发的,都应该是我们这样的玩票吧。对于我来讲,基本上就是能不花钱就不花钱,先不注册和激活,用起来吧,虽然只有三天时间,但是三天后删掉用户目录下的Instantiations.license文件,又可以从头再来了。

    不过别高兴得太早,免费版本居然有功能限制。比如说,想创建一个对话框,创建不了。但是我发现,如果我手动写一个对话框的代码,却可以用SWT-Designer编辑,对于Eclispe自动生成的View类,也可以编辑。这功能对我来说,已经足够了。

    并不是你随便写个对话框类都可以用SWT-Designer编辑的,要想它能够被可视化编辑器解析,对话框类必须具备如下的形式:

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Dialog;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.events.ShellAdapter;
import org.eclipse.swt.events.ShellEvent;

public class LoginDialog extends Dialog {
    protected Shell shell;
    private int result;

    public LoginDialog(Shell parent, int style) {
        super(parent, style);
    }

    public LoginDialog(Shell parent) {
        super(parent);
    }
    
    public int open(){
        createContents();
        return result;
    }
    
    protected void  createContents(){
        //注意下面这一行创建Shell时的参数,想一想我前面讲的模式对话框的概念
        shell = new Shell(getParent(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
    }

}

    如果我们在这个对话框中自己处理事件循环,就更完美了,代码如下:

import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Dialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;

public class LoginDialog extends Dialog {
    protected Shell shell;
    private int result;

    public LoginDialog(Shell parent, int style) {
        super(parent, style);
    }

    public LoginDialog(Shell parent) {
        super(parent);
    }
    
    public int open() {
        createContents();
        Display display = getParent().getDisplay();
        //注意下面这几行,想一想我前面讲的事件循环的概念
        while (!shell.isDisposed()) {
            if (!display.readAndDispatch())
                display.sleep();
        }

        return result;
    }
    
    protected void  createContents(){
        //注意下面这一行创建Shell时的参数,想一想我前面讲的模式对话框的概念
        shell = new Shell(getParent(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
    }

}

    虽然我们不能用JFace里面的Dialog类,只能用swt.widgets里面的Dialog类,但是已经满足了。剩下的功能,就全部交给可视化编辑器了,如下图:

003.PNG

    也就是说,只要我们探索出什么样的源代码可以被可是化编辑器分析并编辑,我们就可以省掉几百美元的注册费。目前在网上,有人致力于SWT-Designer的破解,但是对于最新的7.0版,还是没有破解的资料,再说,公然使用盗版也是不对的。

    只要不嫌麻烦肯发送邮件,获取一个Evaluate版用用也是不错的,该版本没有任何功能限制,但是只有十四天的时间,十四天以后,想再用就不可能了,除非你换一台机器,因为你激活的时候那边已经把你的机器信息记录下来了。下面看看Evaluate版的截图,所有的控件都是可用的,没有灰色按钮,而且创建对话框的向导也是可以用的:

004.PNG

    十四天以后怎么办?这是一个问题。所以,如果免费的版本能够满足我们的要求,就尽量用免费的吧,怎么说它比VE要强多了。