自定义Eclipse中点击Propertyies弹出的首选项对话框

自定义Eclipse中点击Propertyies弹出的首选项对话框,我们可以将其用在我们自己的RCP中。
步骤如下:
1.定义PreferenceDialog,如:

public class PropertyPreferenceDialog extends PreferenceDialog 

 

2.完成构造方法。如:
private ITreeEntry entry;//传一个树结点类型进来
public PropertyPreferenceDialog(Shell parentShell,ITreeEntry entry) {
super(parentShell, new  PreferenceManager());//这里直接new了一个PreferenceManager对象传给构造方法
this.entry = entry;
GeneralPage generalPage = new GeneralPage(entry);//通用设置页面  
getPreferenceManager().addToRoot(new PreferenceNode("general",generalPage));//注意这里的PreferenceNode
getPreferenceManager().addToRoot(new PreferenceNode("editor",new EditorPage(entry)));  
PreferenceNode node = new PreferenceNode("feed",new PreferencePage("综合") {//结点,PreferenceNode是一个抽象类
@Override
 protected Control createContents(Composite parent) {
 noDefaultAndApplyButton();//这句话放在这里也可以,放在构造方法也是一样,当然这里没必要再定义一个构造方法了,用默认的即可
             return new Composite(parent, SWT.NONE);
  }
 });
        
 node.add(new PreferenceNode("general",generalPage));
 node.add(new PreferenceNode("editor",new EditorPage(entry)));
 getPreferenceManager().addToRoot(node);
}

3.定义各个preferencePage。如:
public class GeneralPage extends PreferencePage implements
IWorkbenchPreferencePage {
private ITreeEntry entry;
private Text textId;
/**
 * Create the preference page
 */
public GeneralPage(ITreeEntry entry) {
super("通用");
this.entry = entry;
noDefaultAndApplyButton();//不显示恢复默认和取消按钮
}
/**
 * Create contents of the preference page
 * @param parent
 */
@Override
public Control createContents(Composite parent) {
Composite container = new Composite(parent, SWT.NULL);
container.setLayout(new GridLayout(2,false));
 
final Label idLabel = new Label(container, SWT.NONE);
idLabel.setText("ID:");
 
textId = new Text(container, SWT.BORDER);
final GridData gd_textId = new GridData(SWT.FILL, SWT.CENTER, true, false);
textId.setLayoutData(gd_textId);
if(entry != null ){
textId.setText(String.valueOf(entry.getId()));
}
     return container;
}
 
/**
 * Initialize the preference page
 */
public void init(IWorkbench workbench) {
  }
}
//当然,视使用情况,不实现IWorkbenchPreferencePage也是可以的。
 
4.弹出属性对话框
public class PropertyAction extends Action {
    private TreeViewer treeViewer;
    public PropertyAction(TreeViewer treeViewer){
      this.treeViewer = treeViewer;
      this.setText("属性");
    }
        
    @Override
    public void run(){
      IStructuredSelection selectNode = (IStructuredSelection) treeViewer.getSelection();
      if(selectNode.isEmpty()){
      return;
      }
     
      ITreeEntry entry = (ITreeEntry) selectNode.getFirstElement();
      if(entry==null){
      return;
      }
     
      PropertyPreferenceDialog ppd = new PropertyPreferenceDialog(treeViewer.getControl().getShell(),entry);
      ppd.setSelectedNode("editor");//这个功能倒是蛮好的。可以定位到某一页,这样对用户来说也是很友好的
      ppd.open();
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值