> 文档中心 > Eclipse插件(RCP)自定义状态栏

Eclipse插件(RCP)自定义状态栏


状态栏

Eclipse插件(RCP)自定义状态栏

如上图,状态栏位于Eclipse最底部,它与菜单栏、快捷菜单栏属都属于WorkbenchWindow 对象,初始值可在ApplicationActionBarAdvisor中分别重写fillMenuBar(菜单栏)、fillCoolBar(快捷菜单栏)、fillStatusLine(状态栏) 进行设置。
状态栏与快捷菜单栏一样,默认是不显示的,需要配置其显示,这个很重要,其中菜单栏与快捷菜单那栏自定义已经实现,可参考Eclipse插件(RCP)自定义工作台主菜单栏和Eclipse插件(RCP)自定义工作台快捷菜单栏

目标

实现自定义状态栏自定义

分析

fillStatusLine方法定义在ActionBarAdvisor中,其实现如下

protected void fillStatusLine(IStatusLineManager statusLine) {// do nothing}

RCP项目启动时要重写的方法就是这一个,其中IStatusLineManager有两个实现类StatusLineManagerSubStatusLineManager,它们都实现了IContributionManager接口,这和菜单栏ICoolBarManager、快捷菜单栏IMenuManager一样,因此,状态栏不仅可以展示消息,同时可以添加菜单或按钮。

状态栏的视图实现类是StatusLine, 它初始时默认会被分为BEGIN_GROUPMIDDLE_GROUPEND_GROUP三个组,细节可以参考org.eclipse.jface.action.StatusLineManager源码。

需要注意的是,在fillStatusLine中设置消息,是不会显示的,因为此时做的只是初始化配置,添加消息时 StatusLine 还未实例化。要展示消息可以同过StatusLineContributionItemsetText 代替,另一种方案是在ApplicationWorkbenchAdvisorpostStartup中实现,因为此时,StatusLine已经示例化了。

实现

1 重写fillStatusLine方法

@Overrideprotected void fillStatusLine(IStatusLineManager statusLine) {// 添加是三个按钮statusLine.add(new NavMenuAction01());statusLine.add(new NavMenuAction02());statusLine.add(new NavMenuAction03());}

2 在postStartup中添加消息

StatusLineManager 支持设置消息和错误消息,这两种消息同时设置时会发生覆盖,因为它们使用同一个视图容器,因此最后设置的才会显示。
消息和错误消息分别支持图片+文字和文字两个方法。

@Overridepublic void postStartup() {super.postStartup();// 控制台打印:软件启动成功!AppPrinter.println("软件启动成功!");AppPrinter.println("软件启动成功!");AppPrinter.println("软件启动成功!");initProject();StatusLineManager statusLineManager = WorkbenchUtil.getStatusLineManager();// 有图标的消息statusLineManager.setMessage(AppActivator.getImageDescriptor("icons/20220417/weijincijiance.png").createImage(),"Hello, Welcome Epx ");// 没有图片的错误消息//statusLineManager.setErrorMessage("Error Message");}

其中 WorkbenchUtil.getStatusLineManager() 方法实现如下

/** * 获取激活窗口中的状态栏 * @return */public static StatusLineManager getStatusLineManager() {IWorkbenchWindow activeWindow = getActiveWorkbenchWindow();if (Objects.isNull(activeWindow)) {return null;}// 必须强转,因为只有 WorkbenchWindow 拓展了 StatusLineManager 方法WorkbenchWindow window = (WorkbenchWindow) activeWindow;return window.getStatusLineManager();}

有了这个工具方法,可以方便地在程序中任何需要的地方重新设置状态栏信息。

效果

有图片的消息和按钮的示例
Eclipse插件(RCP)自定义状态栏
只有错误消息和按钮的示例
Eclipse插件(RCP)自定义状态栏

总结

本文分析实现了状态栏的信息自定义,并提示了其相关源码及逻辑。提炼出的WorkbenchUtil.getStatusLineManager()方法,可以方便地在项目中任何需要的地方修改状态栏信息。

China香烟网