2017-04-03 50 views
0

我有MyPreferencePage延伸PreferencePage。在PreferencePage中有一个方法getApplyButton()我重写该方法来获取应用按钮。得到优先页面应用按钮+ SWT日食

我需要的,因为有一些验证,我在首选项对话框,并直到所有的数据放在数据不正确的,我不想应用按钮启用应用按钮。

我的代码

public class DefaultColorsPreferencePage extends PreferencePage implements IWorkbenchPreferencePage { 
    @Override 
    protected Control createContents(Composite parent) { 

    this.container = new Composite(parent, SWT.NONE); 
    this.container.setLayout(new GridLayout(1, false)); 
    GridData gd_area = new GridData(SWT.FILL, SWT.FILL, true, true); 
    this.container.setLayoutData(gd_area); 

    this.defalutColoringGroup = new Group(container, SWT.NONE); 
    this.defalutColoringGroup.setLayout(new GridLayout(1, false)); 
    this.defalutColoringGroup.setLayoutData(gd_area); 
    this.defalutColoringGroup.setText(Constants.DESCRIPTION_TEXT); 

    this.defaultColoringCheckBox = new Button(defalutColoringGroup, SWT.CHECK); 
    this.defaultColoringCheckBox.setText(Constants.DEFAULT_COLORING_BUTTON_TEXT); 

    errorLabel = new Label(defalutColoringGroup, SWT.NONE); 
    errorLabel.setText("Expression is not valid, enter a valid expression and try again!"); 
    errorLabel.setForeground(Display.getCurrent().getSystemColor(SWT.COLOR_RED)); 
    errorLabel.setVisible(false); 

    this.viewer = tableviewerComposite.createTableViewer(defalutColoringGroup); 
    this.viewer.setContentProvider(new ArrayContentProvider()); 
    try { 
     contentProvider = new ContentProvider(); 
     this.viewer.setInput(contentProvider.getScenarios()); 
    } catch (ParserConfigurationException | SAXException | IOException e) { 
     e.printStackTrace(); 
    } 
    return container; 
    } 

    @Override 
    protected Button getApplyButton() { 
     super.getApplyButton(); 
    } 
} 

//方法构造柱

public class ScenariosEditingSupport extends EditingSupport { 

private final TableViewer viewer; 
private final CellEditor editor; 
private final DefaultColorsPreferencePage preferencePage; 

public ScenariosEditingSupport(TableViewer viewer) { 
    super(viewer); 
    this.viewer = viewer; 
    this.editor = new TextCellEditor(viewer.getTable()); 
    this.preferencePage = new DefaultColorsPreferencePage(); 
} 

@Override 
protected CellEditor getCellEditor(Object element) { 
    return editor; 
} 

@Override 
protected boolean canEdit(Object element) { 
    return true; 
} 

@Override 
protected Object getValue(Object element) { 
    return ((Content) element).getExpression(); 
} 

@Override 
protected void setValue(Object element, Object changedExpression) { 
    String expression = String.valueOf(changedExpression); 

    if(Repository.isExpressionValid(expression)){ 
     ((Content) element).setExpression(expression); 
     viewer.update(element, null); 
    } 
    else{ 
     preferencePage.setValid(false); 
     preferencePage.setErrorMessage("Expression is not valid, enter a valid expression and try again!"); 
     ((Content) element).setExpression(expression); 
     viewer.update(element, null); 
    } 
} 
} 

回答

2

创建表的列

 private void createTableColumns(final TableViewer viewer,final Composite defalutColoringGroup) { 

    TableViewerColumn scenariosColumn = createTableViewerColumn(viewer,Constants.SCENARIOS_COLUMN_NAME,Constants.SCENARIOS_COLUMN_NUMBER); 
    ScenariosLabelProvider scenariosLabelProvider = new ScenariosLabelProvider(); 
    scenariosColumn.setLabelProvider(scenariosLabelProvider); 
    scenariosColumn.setEditingSupport(new ScenariosEditingSupport(viewer)); 

    //more columns 
    } 

//编辑支持不访问应用按钮启用/禁用首选项页面。请拨打

setValid(false); 

方法PreferencePage禁用应用并确定。

呼叫setValid(true)页面时确定。

您可能还想调用setErrorMessagesetMessage方法在页面无效时设置消息。

+0

你叫它任何你想要改变页面的有效性。例如在createContents或页面上的控件上的任何修改侦听器。 –

+0

我调用了preferencePage.setValid(false);并且它没有禁用应用和确定按钮 – wearybands

+0

我有一个表中的首选项页面内和一列我已经编辑支持,当用户在该列,如果我验证它输入一些值其不正确的话,我想禁用的应用按钮,检查更新代码 – wearybands