zoukankan      html  css  js  c++  java
  • 深入浅出Eclipse RCP(1):Hello RCP

    Eclipse RCP(Rich Client Platform)允许开发者使用Eclipse架构设计灵活的、可扩展的、美观的应用程序。本系列希望通过层层深入的介绍,一步一步带您进入Eclipse RCP的玄妙世界。

    第一个RCP程序

    打开Eclipse,新建一个Plug-in Project,点击Next。在Project name文本框中输入项目名称net.kirin.rcp.hello,如下图所示。

    image

    点击Next,如下图所示,在“Would you like to create a rich client application?”后面选中Yes。其余均可保留默认值。

    image

    点击Next,选择Hello RCP模板。

    image

    点击Next,打开如下对话框,各项均可保留默认值。

    image

    点击Finish,将创建结构如下的项目。

    image

    双击MANIFEST.MF文件,将打开一个名为Overview的界面,点击Launch an Eclipse application,

    image

    结果如下图所示。

    image

    这就是我们的第一个RCP程序。当然,我们没有写一行代码,完全是Hello RCP模板自动为我们创建的。

    代码解析

    可以看到,RCP模板自动为我们创建了Application.java、ApplicationActionBarAdvisor.java、ApplicationWorkbenchAdvisor.java、ApplicationWorkbenchWindowAdvisor.java、Perspective.java这5个类。下面我们对这5个类进行逐一分析。

    Application类

    在普通的Java程序中,总有一个main()方法作为应用程序的入口点。而RCP程序的入口点则是Application类。打开Application.java文件,可以看到该类实现了IPlatformRunnable接口,入口方法如下所示:

    public Object run(Object args) throws Exception {
        Display display = PlatformUI.createDisplay();
        try {
            int returnCode = PlatformUI.createAndRunWorkbench(display, new ApplicationWorkbenchAdvisor());
            if (returnCode == PlatformUI.RETURN_RESTART) {
                return IPlatformRunnable.EXIT_RESTART;
            }
            return IPlatformRunnable.EXIT_OK;
        } finally {
            display.dispose();
        }
    }

    run()方法为IPlatformRunnable接口所定义的方法,在RCP程序启动时,会首先执行该方法。Application首先创建一个Display对象, 然后调用PlatformUI.createAndRunWorkbench()方法创建并启动工作台,这将打开应用程序主窗口,并使该窗口处于持续打开状态。应用程序开始处理用户的鼠标单击、鼠标移动、按键等各种事件,直到用户关闭程序退出,这就是所谓的事件循环。当然,在关闭之前,必须用display.dispose()销毁Display对象以释放资源。

    ApplicationWorkbenchAdvisor类

    在PlatformUI.createAndRunWorkbench()方法中,还传入了一个新建的ApplicationWorkbenchAdvisor对象。它类负责应用程序生命周期管理,它继承自WorkbenchAdvisor类。开发人员可以在该类中实现程序启动或者关闭时的某种处理。该类的具体实现只是给用户一个初始的视图界面而已,还需要配合WorkbenchWindowAdvisor、ActionBarAdvisor才能构成一个较为完整的用户界面。

    打开ApplicationWorkbenchAdvisor.java文件,代码如下:

    public class ApplicationWorkbenchAdvisor extends WorkbenchAdvisor {
    
        private static final String PERSPECTIVE_ID = "net.kirin.rcp.hello.perspective";
    
        public WorkbenchWindowAdvisor createWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {
            return new ApplicationWorkbenchWindowAdvisor(configurer);
        }
    
        public String getInitialWindowPerspectiveId() {
            return PERSPECTIVE_ID;
        }
    }

    createWorkbenchWindowAdvisor()方法初始化在主界面显示的透视图,并返回ApplicationWorkbenchWindowAdvisor对象。

    ApplicationWorkbenchAdvisor还包含一些比较重要的方法:

    • initialize:最先调用。在窗口打开之前调用,可以用来处理初始化配置工作。
    • preStartup:initialize之后、第一个窗口打开之前调用,可以用来处理临时或者可选处理工作。
    • postStartup:第一个窗口打开之后但启动事件循环之前调用,可以用来进行那些需要自动处理的工作,例如弹出一个提示窗口。
    • preShutdown:事件循环结束之后但窗口关闭之前调用,可以用来进行保存数据、关闭数据库服务器等处理工作。
    • postShutdown:窗口关闭之后调用,可以用来进行保存应用程序状态、清除initialize创建的对象等处理工作。

    ApplicationWorkbenchWindowAdvisor类

    在ApplicationWorkbenchAdvisor类中创建了一个ApplicationWorkbenchWindowAdvisor对象。它主要负责窗口生命周期的管理,例如状态栏、工具栏、菜单、窗口标题、窗口大小和各种控件等等,也可以处理窗口的各种事件例程。其主要代码如下:

    public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {
    
        public ApplicationWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {
            super(configurer);
        }
    
        public ActionBarAdvisor createActionBarAdvisor(IActionBarConfigurer configurer) {
            return new ApplicationActionBarAdvisor(configurer);
        }
        
        public void preWindowOpen() {
            IWorkbenchWindowConfigurer configurer = getWindowConfigurer();
            configurer.setInitialSize(new Point(400, 300));
            configurer.setShowCoolBar(false);
            configurer.setShowStatusLine(false);
            configurer.setTitle("Hello RCP");
        }
    }

    preWindowOpen()方法在窗口控件创建之前调用,用来配置窗口,如设置窗口大小、工具栏、状态栏和标题等。createActionBarAdvisor创建了一个ApplicationActionBarAdvisor对象。

    其它比较重要的方法还包括:

    • postWindowRestore:当窗口根据上一次的保存状态恢复创建之后调用,可以用来调整调整窗口恢复状态。
    • postWindowCreate:窗口创建之后调用,可以用于调整窗口。
    • postWindowOpen:窗口已经打开之后调用,可以用来注册窗口监听,例如在此方法中实现系统托盘。

    ApplicationActionBarAdvisor类

    ApplicationActionBarAdvisor主要负责管理窗口的菜单栏、状态栏、工具栏的外观和行为。其主要代码如下:

    public class ApplicationActionBarAdvisor extends ActionBarAdvisor {
    
        public ApplicationActionBarAdvisor(IActionBarConfigurer configurer) {
            super(configurer);
        }
    
        protected void makeActions(IWorkbenchWindow window) {
        }
    
        protected void fillMenuBar(IMenuManager menuBar) {
        }
        
    }

    makeActions()方法用来注册菜单或工具栏的动作。fillMenuBar()方法用来添加菜单栏。

    其它比较重要的方法还包括:

    • fillCoolBar:添加工具栏
    • fillStatusLine:添加状态栏

    Perspective类

    Perspective类主要负责界面布局的安排,其代码如下:

    public class Perspective implements IPerspectiveFactory {
    
        public void createInitialLayout(IPageLayout layout) {
        }
    }
    

    createInitialLayout()方法通常用于创建初始的界面布局。

    参考资料

    1. Eclipse从入门到精通

    2. Eclipse RCP应用系统开发方法与实战

    3. Eclipse RCP - Tutorial with Eclipse 3.4

    4. 使用Eclipse RCP进行桌面程序开发(一):快速起步

    小结

    本篇作为《深入浅出Eclipse RCP》系列的开篇,介绍了如何使用Hello RCP模板创建最简单的RCP程序,并对自动生成的5个类进行了解析。如果您是RCP的初学者,也许会对本文中出现的一些概念改到困惑。没有关系,我将在接下来的随笔中介绍RPC的基本架构以及Workbench、Action、Perspective等概念。

  • 相关阅读:
    UVA 11488 Hyper Prefix Sets (字典树)
    UVALive 3295 Counting Triangles
    POJ 2752 Seek the Name, Seek the Fame (KMP)
    UVA 11584 Partitioning by Palindromes (字符串区间dp)
    UVA 11100 The Trip, 2007 (贪心)
    JXNU暑期选拔赛
    计蒜客---N的-2进制表示
    计蒜客---线段的总长
    计蒜客---最大质因数
    JustOj 2009: P1016 (dp)
  • 原文地址:https://www.cnblogs.com/kirinboy/p/HeadFirstEclipseRcp1.html
Copyright © 2011-2022 走看看