Eclipse插件(RCP)自定义状态栏
状态栏
如上图,状态栏位于Eclipse最底部,它与菜单栏、快捷菜单栏属都属于WorkbenchWindow
对象,初始值可在ApplicationActionBarAdvisor
中分别重写fillMenuBar
(菜单栏)、fillCoolBar
(快捷菜单栏)、fillStatusLine
(状态栏) 进行设置。
状态栏与快捷菜单栏一样,默认是不显示的,需要配置其显示,这个很重要,其中菜单栏与快捷菜单那栏自定义已经实现,可参考Eclipse插件(RCP)自定义工作台主菜单栏和Eclipse插件(RCP)自定义工作台快捷菜单栏
目标
实现自定义状态栏自定义
分析
fillStatusLine
方法定义在ActionBarAdvisor
中,其实现如下
protected void fillStatusLine(IStatusLineManager statusLine) {// do nothing}
RCP项目启动时要重写的方法就是这一个,其中IStatusLineManager
有两个实现类StatusLineManager
和SubStatusLineManager
,它们都实现了IContributionManager
接口,这和菜单栏ICoolBarManager
、快捷菜单栏IMenuManager
一样,因此,状态栏不仅可以展示消息,同时可以添加菜单或按钮。
状态栏的视图实现类是StatusLine
, 它初始时默认会被分为BEGIN_GROUP
、MIDDLE_GROUP
、END_GROUP
三个组,细节可以参考org.eclipse.jface.action.StatusLineManager
源码。
需要注意的是,在fillStatusLine
中设置消息,是不会显示的,因为此时做的只是初始化配置,添加消息时 StatusLine
还未实例化。要展示消息可以同过StatusLineContributionItem
的 setText
代替,另一种方案是在ApplicationWorkbenchAdvisor
的postStartup
中实现,因为此时,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();}
有了这个工具方法,可以方便地在程序中任何需要的地方重新设置状态栏信息。
效果
有图片的消息和按钮的示例
只有错误消息和按钮的示例
总结
本文分析实现了状态栏的信息自定义,并提示了其相关源码及逻辑。提炼出的WorkbenchUtil.getStatusLineManager()
方法,可以方便地在项目中任何需要的地方修改状态栏信息。