怎么样给ToolBarManager添加自定义控件?

怎么样给ToolBarManager添加自定义控件?

项目要实现在Editor的ToolBarManager添加Combo控件的需求。在www.java2s.com上查了一下,没有发现其有现成的例子。而且觉得这个网站的例子大多关注的是SWT的使用,对JFace这一层面关注不多。但是放着JFace不用,直接用SWT的话,开发效率不高,而且容易出现自己引发的错误。看了一下JFace的源码,研究了以下的实现方法。
ToolBarManager是对SWT的ToolBar控件的封装,只用它可以省去这些底层控件的关注。就像使用了TableViewer,就不需要再去关心TableItem这些繁琐的细节一样。
一般我们都是向ToolBarManager里面添加Action,显示的效果就是一个Button.如果希望显示一个Combo或者Text这样的控件,就不能向其中添加Action了。而且又不想使用ToolBar处理具体的ToolItem。只要构建自己的ControlContribution 就可以很容易的实现这样的功能。
首先要继承ControlContribution类,实现其protected Control createControl(Composite parent)方法,在这个方法中构建自己希望的控件。只要是Control的子类就都可以。然后将其添加到ToolBarManager里面即可。
程序如下:
·
怎么样给ToolBarManager添加自定义控件?importorg.eclipse.jface.action.Action;
怎么样给ToolBarManager添加自定义控件?
importorg.eclipse.jface.action.ControlContribution;
怎么样给ToolBarManager添加自定义控件?
importorg.eclipse.jface.action.IAction;
怎么样给ToolBarManager添加自定义控件?
importorg.eclipse.jface.action.ToolBarManager;
怎么样给ToolBarManager添加自定义控件?
importorg.eclipse.swt.SWT;
怎么样给ToolBarManager添加自定义控件?
importorg.eclipse.swt.layout.GridData;
怎么样给ToolBarManager添加自定义控件?
importorg.eclipse.swt.layout.GridLayout;
怎么样给ToolBarManager添加自定义控件?
importorg.eclipse.swt.widgets.Combo;
怎么样给ToolBarManager添加自定义控件?
importorg.eclipse.swt.widgets.Composite;
怎么样给ToolBarManager添加自定义控件?
importorg.eclipse.swt.widgets.Control;
怎么样给ToolBarManager添加自定义控件?
importorg.eclipse.swt.widgets.Display;
怎么样给ToolBarManager添加自定义控件?
importorg.eclipse.swt.widgets.Shell;
怎么样给ToolBarManager添加自定义控件?
怎么样给ToolBarManager添加自定义控件?怎么样给ToolBarManager添加自定义控件?
classComboContributionextendsControlContribution{
怎么样给ToolBarManager添加自定义控件?
怎么样给ToolBarManager添加自定义控件?怎么样给ToolBarManager添加自定义控件?
publicComboContribution(Stringid){
怎么样给ToolBarManager添加自定义控件?
super(id);
怎么样给ToolBarManager添加自定义控件?}

怎么样给ToolBarManager添加自定义控件?
怎么样给ToolBarManager添加自定义控件?@Override
怎么样给ToolBarManager添加自定义控件?怎么样给ToolBarManager添加自定义控件?
protectedControlcreateControl(Compositeparent){
怎么样给ToolBarManager添加自定义控件?Combocombo
=newCombo(parent,SWT.NONE);
怎么样给ToolBarManager添加自定义控件?怎么样给ToolBarManager添加自定义控件?combo.setItems(
newString[]{"JurassicPark","E.T.","JAW"});
怎么样给ToolBarManager添加自定义控件?
returncombo;
怎么样给ToolBarManager添加自定义控件?}

怎么样给ToolBarManager添加自定义控件?}

怎么样给ToolBarManager添加自定义控件?
怎么样给ToolBarManager添加自定义控件?怎么样给ToolBarManager添加自定义控件?
publicclassTestToolBar{
怎么样给ToolBarManager添加自定义控件?
怎么样给ToolBarManager添加自定义控件?怎么样给ToolBarManager添加自定义控件?
publicTestToolBar(Shellshell){
怎么样给ToolBarManager添加自定义控件?怎么样给ToolBarManager添加自定义控件?IActionrunAction
=newAction("Run"){
怎么样给ToolBarManager添加自定义控件?
怎么样给ToolBarManager添加自定义控件?怎么样给ToolBarManager添加自定义控件?
publicvoidrun(){
怎么样给ToolBarManager添加自定义控件?
怎么样给ToolBarManager添加自定义控件?}

怎么样给ToolBarManager添加自定义控件?}
;
怎么样给ToolBarManager添加自定义控件?
怎么样给ToolBarManager添加自定义控件?ToolBarManagerbarManager
=newToolBarManager(SWT.NONE);
怎么样给ToolBarManager添加自定义控件?barManager.add(runAction);
怎么样给ToolBarManager添加自定义控件?
怎么样给ToolBarManager添加自定义控件?ComboContributioncombo
=newComboContribution("Combo.contribution");
怎么样给ToolBarManager添加自定义控件?barManager.add(combo);
怎么样给ToolBarManager添加自定义控件?
怎么样给ToolBarManager添加自定义控件?barManager.createControl(shell);
怎么样给ToolBarManager添加自定义控件?
怎么样给ToolBarManager添加自定义控件?GridDatagd
=newGridData(GridData.FILL_HORIZONTAL);
怎么样给ToolBarManager添加自定义控件?barManager.getControl().setLayoutData(gd);
怎么样给ToolBarManager添加自定义控件?}

怎么样给ToolBarManager添加自定义控件?
怎么样给ToolBarManager添加自定义控件?怎么样给ToolBarManager添加自定义控件?
/**
怎么样给ToolBarManager添加自定义控件?*DOCqianbingCommentmethod"main".
怎么样给ToolBarManager添加自定义控件?*
怎么样给ToolBarManager添加自定义控件?*
@paramargs
怎么样给ToolBarManager添加自定义控件?
*/

怎么样给ToolBarManager添加自定义控件?怎么样给ToolBarManager添加自定义控件?publicstaticvoidmain(String[]args){
怎么样给ToolBarManager添加自定义控件?Displaydisplay
=newDisplay();
怎么样给ToolBarManager添加自定义控件?
怎么样给ToolBarManager添加自定义控件?
finalShellshell=newShell(display);
怎么样给ToolBarManager添加自定义控件?shell.setLayout(
newGridLayout());
怎么样给ToolBarManager添加自定义控件?
怎么样给ToolBarManager添加自定义控件?
newTestToolBar(shell);
怎么样给ToolBarManager添加自定义控件?
怎么样给ToolBarManager添加自定义控件?shell.setSize(
300,300);
怎么样给ToolBarManager添加自定义控件?shell.open();
怎么样给ToolBarManager添加自定义控件?怎么样给ToolBarManager添加自定义控件?
while(!shell.isDisposed()){
怎么样给ToolBarManager添加自定义控件?
if(!display.readAndDispatch())
怎么样给ToolBarManager添加自定义控件?display.sleep();
怎么样给ToolBarManager添加自定义控件?}

怎么样给ToolBarManager添加自定义控件?display.dispose();
怎么样给ToolBarManager添加自定义控件?}

怎么样给ToolBarManager添加自定义控件?}

怎么样给ToolBarManager添加自定义控件?

其中barManager.createControl(shell);是构建ToolBar,如果在ToolBarManager的构造方法中已经传入,此行即可省略。