首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 其他教程 > 开源软件 >

RCP 批改ApplicationWindow的StatusLineManager中文本样式

2012-08-10 
RCP 修改ApplicationWindow的StatusLineManager中文本样式前段时间项目中有个需求要修改RCP程序中状态栏文

RCP 修改ApplicationWindow的StatusLineManager中文本样式
前段时间项目中有个需求要修改RCP程序中状态栏文字的样式,一直无法获得状态栏中的label,而直接使用StatusLine来new Label显示不出来,翻遍源码找到一种折中处理方式,记下来,不知是否还有其他更好的办法。

RCP程序如果要给状态栏设置信息,一般得做法是在ApplicationActionBarAdvisor中重写父类的方法fillStatusLine,写法有2种:(至于怎么显示状态栏这里就不介绍,google一下网上很多)
第一种:直接设置文本,这种情况下,文本是靠左对齐,但是无法修改文本的样式

  @Override  protected void fillStatusLine(IStatusLineManager statusLine){ statusLine.setMessage("");}

第二种:添加statusItem,这种情况设置样式比较简单,但是无法左对齐,文字老是和左边有一大块的距离
  @Override  protected void fillStatusLine(IStatusLineManager statusLine){ super.fillStatusLine(statusLine);   final StatusLineContributionItem statusItem = new  StatusLineContributionItem("");  statusItem.setText(message);      statusLine.add(statusItem);  }


我这里改变状态栏样式的方法如下:
package rcp;import org.eclipse.jface.action.IStatusLineManager;import org.eclipse.jface.action.StatusLineManager;import org.eclipse.swt.custom.CLabel;import org.eclipse.swt.graphics.Point;import org.eclipse.swt.widgets.Composite;import org.eclipse.swt.widgets.Control;import org.eclipse.ui.application.ActionBarAdvisor;import org.eclipse.ui.application.IActionBarConfigurer;import org.eclipse.ui.application.IWorkbenchWindowConfigurer;import org.eclipse.ui.application.WorkbenchWindowAdvisor;public class ApplicationWorkbenchWindowAdvisor extends WorkbenchWindowAdvisor {private IStatusLineManager statusLineManager;    public ApplicationWorkbenchWindowAdvisor(IWorkbenchWindowConfigurer configurer) {        super(configurer);    }    public ActionBarAdvisor createActionBarAdvisor(IActionBarConfigurer configurer) {    statusLineManager = configurer.getStatusLineManager();        return new ApplicationActionBarAdvisor(configurer);    }        public void preWindowOpen() {        IWorkbenchWindowConfigurer configurer = getWindowConfigurer();        configurer.setInitialSize(new Point(400, 300));        configurer.setShowCoolBar(true);        configurer.setShowStatusLine(true);        configurer.setTitle("Hello RCP"); //$NON-NLS-1$    }@Overridepublic void postWindowCreate() {super.postWindowCreate();//经过测试发现,在此处,状态栏创建完毕,我在此设置文本statusLineManager.setMessage("设置状态栏文字");/** * 注意此处:一定要在setMessage方法后调用,因为statusLineManager.setMessage("")时会自己设置一个颜色, * 如果在statusLineManager.setMessage("")之前调用,那么颜色会被覆盖,没有发生改变 */setStatusStyle((StatusLineManager)statusLineManager);}        private void setStatusStyle(StatusLineManager statusLineManager){    Composite composite = (Composite) statusLineManager.getControl();    //获得状态栏下的所有控件    Control[] controls =  composite.getChildren();        for(Control control : controls){    if(control instanceof CLabel){    CLabel cLabel = (CLabel)control;    //设置字体和颜色    cLabel.setFont(null);    cLabel.setForeground(null);    break;        }    }    }    }


需要注意的是:如果你在ApplicationActionBarAdvisor中重写父类的方法fillStatusLine中设置文本:statusLineManager.setMessage("设置状态栏文字");然后再改变样式是不成功的,因为现在状态栏还没有创建好,使用StatusLineManager的getControl()方法来获得状态栏所得到的是null,因此此处设置样式是无效的





热点排行