2017-04-03 10 views
0

私はPreferencePageを拡張するMyPreferencePageを持っています。 PreferencePageの中にメソッドgetApplyButton()があります。このメソッドをオーバーライドして、適用ボタンを取得します。プリファレンスページで適用ボタンを押す+ swt eclipse

私は環境設定ダイアログのデータに置くバリデーターがいくつかあり、すべてのデータが正しくないときに適用ボタンが必要です。適用ボタンを有効にしないでください。

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 
    } 

//を作成するために、私のコード

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(); 
    } 
} 

//メソッドあなたは、[適用]ボタンをアクセスしないでください設定ページを有効/無効にします。代わりに適用し、[OK]を無効にするにはPreferencePage

setValid(false); 

メソッドを呼び出します。

ページがOKの場合はsetValid(true)と呼び出してください。

ページが無効なときにメッセージを設定するには、setErrorMessageまたはsetMessageメソッドを呼び出すこともできます。

+0

ページの有効性を変更したい場所ならどこでもかまいません。たとえば、createContentsまたはページ上のコントロールのリスナーを変更します。 –

+0

私はpreferencePage.setValid(false)を呼び出しました。それはdidとapplyとOkボタンを無効にしました – wearybands

+0

私は設定ページの中にテーブルを持っていて、ある列にはユーザーがその列に何らかの値を入力すると編集サポートがあります。 、更新されたコードを確認してください – wearybands

関連する問題