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$
}

@Override
public 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,因此此处设置样式是无效的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值