为ToolBarManager添加自定义控件

时间:2022-07-23 00:57:33
   ToolBarManager是对SWT的ToolBar控件的封装,用它可以省去对这些底层控件的关注,就像使用了TableViewer,就不需要再去关心TableItem这些繁琐的细节一样。
        在一般情况下我们都是向ToolBarManager里面添加Action,显示的效果就是一个Button。如果希望显示一个Combo或者Text这样的控 件,就不能向其中添加Action了,而且又不想使用ToolBar处理具体的ToolItem,以下是两种解决办法:
        第一种:
        构建自己的ControlContribution 就可以很容易的实现这样的功能。
        首先要继承ControlContribution类,实现其protected Control createControl(Composite parent)方法,在这个方法中构建自己希望的控件,只要是Control的子类就都可以,然后将其添加到ToolBarManager里面即可。
        以下即为在View的工具栏中添加自定义控件Combo

        第一步、新建类 ComboContribution,并继承ControlContribution类,然后实现其protected Control createControl(Composite parent)方法,在这个方法中构建Combo控件
为ToolBarManager添加自定义控件为ToolBarManager添加自定义控件     class  ComboContribution  extends  ControlContribution ... {
为ToolBarManager添加自定义控件
为ToolBarManager添加自定义控件为ToolBarManager添加自定义控件        
public ComboContribution(String id)...{
为ToolBarManager添加自定义控件            
super(id);
为ToolBarManager添加自定义控件        }

为ToolBarManager添加自定义控件
为ToolBarManager添加自定义控件        @Override
为ToolBarManager添加自定义控件为ToolBarManager添加自定义控件        
protected Control createControl(Composite parent)...{
为ToolBarManager添加自定义控件            Combo combo 
= new Combo(parent, SWT.READ_ONLY);
为ToolBarManager添加自定义控件为ToolBarManager添加自定义控件            combo.setItems(
new String[]..."First""Secend""Third" });
为ToolBarManager添加自定义控件为ToolBarManager添加自定义控件            combo.addSelectionListener(
new SelectionListener()...{
为ToolBarManager添加自定义控件
为ToolBarManager添加自定义控件为ToolBarManager添加自定义控件                
public void widgetDefaultSelected(SelectionEvent e) ...{
为ToolBarManager添加自定义控件                    
// TODO Auto-generated method stub
为ToolBarManager添加自定义控件
                    
为ToolBarManager添加自定义控件                }

为ToolBarManager添加自定义控件
为ToolBarManager添加自定义控件为ToolBarManager添加自定义控件                
public void widgetSelected(SelectionEvent e) ...{
为ToolBarManager添加自定义控件                    
// TODO Auto-generated method stub
为ToolBarManager添加自定义控件
                    textSysInfo.append("View工具栏测试!");
为ToolBarManager添加自定义控件                }

为ToolBarManager添加自定义控件                
为ToolBarManager添加自定义控件            }
);
为ToolBarManager添加自定义控件            
return combo;
为ToolBarManager添加自定义控件        }

为ToolBarManager添加自定义控件    }
       第二步、 private   void  initializeToolBar()中将其添加到ToolBarManager
为ToolBarManager添加自定义控件为ToolBarManager添加自定义控件/** */ /**
为ToolBarManager添加自定义控件     * Initialize the toolbar
为ToolBarManager添加自定义控件     
*/

为ToolBarManager添加自定义控件为ToolBarManager添加自定义控件    
private   void  initializeToolBar()  ... {
为ToolBarManager添加自定义控件        IToolBarManager toolbarManager 
= getViewSite().getActionBars().getToolBarManager();
为ToolBarManager添加自定义控件为ToolBarManager添加自定义控件        Action deleteAction 
= new Action()...{
为ToolBarManager添加自定义控件为ToolBarManager添加自定义控件            
public void run()...{
为ToolBarManager添加自定义控件                textSysInfo.setText(
"");
为ToolBarManager添加自定义控件            }

为ToolBarManager添加自定义控件        }
;
为ToolBarManager添加自定义控件        deleteAction.setText(
"清空");
为ToolBarManager添加自定义控件        deleteAction.setToolTipText(
"清空系统信息");
为ToolBarManager添加自定义控件        deleteAction.setImageDescriptor(PlatformUI.getWorkbench().
                    getSharedImages().getImageDescriptor(ISharedImages.IMG_TOOL_DELETE));
为ToolBarManager添加自定义控件        toolbarManager.add(deleteAction);
为ToolBarManager添加自定义控件        
为ToolBarManager添加自定义控件        ComboContribution combo 
= new ComboContribution("Combo.contribution");
为ToolBarManager添加自定义控件        toolbarManager.add(combo);
为ToolBarManager添加自定义控件    }
       第二种:
       于第一种类似,只是实现的是 继承ContributionItem类,也是实现其protected Control createControl(Composite parent)方法,在这个方法中构建自定义控件。
为ToolBarManager添加自定义控件
        代码如下:
为ToolBarManager添加自定义控件为ToolBarManager添加自定义控件      class  ComboContribution2  extends  ContributionItem ... {    
为ToolBarManager添加自定义控件
为ToolBarManager添加自定义控件            
private ToolItem toolitem;
为ToolBarManager添加自定义控件
为ToolBarManager添加自定义控件            
private Combo fFindCombo;
为ToolBarManager添加自定义控件
为ToolBarManager添加自定义控件            
private Button upFindbutton;
为ToolBarManager添加自定义控件
为ToolBarManager添加自定义控件            
private Button downFindbutton;
为ToolBarManager添加自定义控件
为ToolBarManager添加自定义控件            
private Button allFindbutton;
为ToolBarManager添加自定义控件
为ToolBarManager添加自定义控件为ToolBarManager添加自定义控件            
public ComboContribution2() ...{
为ToolBarManager添加自定义控件                
super();
为ToolBarManager添加自定义控件            }

为ToolBarManager添加自定义控件                    
为ToolBarManager添加自定义控件为ToolBarManager添加自定义控件            
protected Control createControl(Composite parent) ...{
为ToolBarManager添加自定义控件                
为ToolBarManager添加自定义控件                Composite composite 
= new Composite(parent, SWT.NONE);
为ToolBarManager添加自定义控件                
为ToolBarManager添加自定义控件                
//查询框
为ToolBarManager添加自定义控件
                fFindCombo = new Combo(composite,SWT.NONE);
为ToolBarManager添加自定义控件                fFindCombo.setLocation(
02);
为ToolBarManager添加自定义控件                fFindCombo.setSize(
130,20);
为ToolBarManager添加自定义控件                System.out.println(
" fFindCombo == " + fFindCombo.getBounds());
为ToolBarManager添加自定义控件                
//向上查
为ToolBarManager添加自定义控件
                upFindbutton = new Button(composite, SWT.NONE);
为ToolBarManager添加自定义控件                upFindbutton.setLocation(
1352);
为ToolBarManager添加自定义控件                upFindbutton.setSize(
30,20);
为ToolBarManager添加自定义控件                upFindbutton.setText(
"上查");    
为ToolBarManager添加自定义控件为ToolBarManager添加自定义控件                upFindbutton.addSelectionListener(
new SelectionListener()...{
为ToolBarManager添加自定义控件
为ToolBarManager添加自定义控件为ToolBarManager添加自定义控件                    
public void widgetDefaultSelected(SelectionEvent e) ...{
为ToolBarManager添加自定义控件                        
// TODO 自动生成方法存根
为ToolBarManager添加自定义控件
                        
为ToolBarManager添加自定义控件                    }

为ToolBarManager添加自定义控件
为ToolBarManager添加自定义控件为ToolBarManager添加自定义控件                    
public void widgetSelected(SelectionEvent e) ...{
为ToolBarManager添加自定义控件                        fFindCombo.add(fFindCombo.getText());
为ToolBarManager添加自定义控件                        
为ToolBarManager添加自定义控件                    }

为ToolBarManager添加自定义控件                    
为ToolBarManager添加自定义控件                }
);
为ToolBarManager添加自定义控件                System.out.println(
" upFindbutton == " + upFindbutton.getBounds());
为ToolBarManager添加自定义控件                
//向下查
为ToolBarManager添加自定义控件
                downFindbutton = new Button(composite, SWT.NONE);
为ToolBarManager添加自定义控件                downFindbutton.setLocation(
1702);
为ToolBarManager添加自定义控件                downFindbutton.setSize(
30,20);
为ToolBarManager添加自定义控件                downFindbutton.setText(
"下查");
为ToolBarManager添加自定义控件                
//全部查询
为ToolBarManager添加自定义控件
                allFindbutton = new Button(composite, SWT.NONE);
为ToolBarManager添加自定义控件                allFindbutton.setLocation(
2052);
为ToolBarManager添加自定义控件                allFindbutton.setSize(
30,20);
为ToolBarManager添加自定义控件                allFindbutton.setText(
"全部");
为ToolBarManager添加自定义控件
为ToolBarManager添加自定义控件                toolitem.setWidth(
240);
为ToolBarManager添加自定义控件
为ToolBarManager添加自定义控件                
return composite;
为ToolBarManager添加自定义控件            }

为ToolBarManager添加自定义控件
为ToolBarManager添加自定义控件为ToolBarManager添加自定义控件            
public void fill(ToolBar parent, int index) ...{
为ToolBarManager添加自定义控件                toolitem 
= new ToolItem(parent, SWT.SEPARATOR, index);
为ToolBarManager添加自定义控件                Control control 
= createControl(parent);
为ToolBarManager添加自定义控件                toolitem.setControl(control);
为ToolBarManager添加自定义控件            }

为ToolBarManager添加自定义控件
为ToolBarManager添加自定义控件        }

为ToolBarManager添加自定义控件
       然后同样在View的 private   void  initializeToolBar()方法中将其添加到ToolBarManager即可。