2017-04-03 28 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